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	"encoding/json"
22	"github.com/Azure/go-autorest/autorest"
23	"github.com/Azure/go-autorest/autorest/azure"
24	"github.com/Azure/go-autorest/autorest/date"
25	"github.com/Azure/go-autorest/autorest/to"
26	"net/http"
27)
28
29// Access enumerates the values for access.
30type Access string
31
32const (
33	// Allow ...
34	Allow Access = "Allow"
35	// Deny ...
36	Deny Access = "Deny"
37)
38
39// PossibleAccessValues returns an array of possible values for the Access const type.
40func PossibleAccessValues() []Access {
41	return []Access{Allow, Deny}
42}
43
44// ApplicationGatewayBackendHealthServerHealth enumerates the values for application gateway backend health
45// server health.
46type ApplicationGatewayBackendHealthServerHealth string
47
48const (
49	// Down ...
50	Down ApplicationGatewayBackendHealthServerHealth = "Down"
51	// Draining ...
52	Draining ApplicationGatewayBackendHealthServerHealth = "Draining"
53	// Partial ...
54	Partial ApplicationGatewayBackendHealthServerHealth = "Partial"
55	// Unknown ...
56	Unknown ApplicationGatewayBackendHealthServerHealth = "Unknown"
57	// Up ...
58	Up ApplicationGatewayBackendHealthServerHealth = "Up"
59)
60
61// PossibleApplicationGatewayBackendHealthServerHealthValues returns an array of possible values for the ApplicationGatewayBackendHealthServerHealth const type.
62func PossibleApplicationGatewayBackendHealthServerHealthValues() []ApplicationGatewayBackendHealthServerHealth {
63	return []ApplicationGatewayBackendHealthServerHealth{Down, Draining, Partial, Unknown, Up}
64}
65
66// ApplicationGatewayCookieBasedAffinity enumerates the values for application gateway cookie based affinity.
67type ApplicationGatewayCookieBasedAffinity string
68
69const (
70	// Disabled ...
71	Disabled ApplicationGatewayCookieBasedAffinity = "Disabled"
72	// Enabled ...
73	Enabled ApplicationGatewayCookieBasedAffinity = "Enabled"
74)
75
76// PossibleApplicationGatewayCookieBasedAffinityValues returns an array of possible values for the ApplicationGatewayCookieBasedAffinity const type.
77func PossibleApplicationGatewayCookieBasedAffinityValues() []ApplicationGatewayCookieBasedAffinity {
78	return []ApplicationGatewayCookieBasedAffinity{Disabled, Enabled}
79}
80
81// ApplicationGatewayFirewallMode enumerates the values for application gateway firewall mode.
82type ApplicationGatewayFirewallMode string
83
84const (
85	// Detection ...
86	Detection ApplicationGatewayFirewallMode = "Detection"
87	// Prevention ...
88	Prevention ApplicationGatewayFirewallMode = "Prevention"
89)
90
91// PossibleApplicationGatewayFirewallModeValues returns an array of possible values for the ApplicationGatewayFirewallMode const type.
92func PossibleApplicationGatewayFirewallModeValues() []ApplicationGatewayFirewallMode {
93	return []ApplicationGatewayFirewallMode{Detection, Prevention}
94}
95
96// ApplicationGatewayOperationalState enumerates the values for application gateway operational state.
97type ApplicationGatewayOperationalState string
98
99const (
100	// Running ...
101	Running ApplicationGatewayOperationalState = "Running"
102	// Starting ...
103	Starting ApplicationGatewayOperationalState = "Starting"
104	// Stopped ...
105	Stopped ApplicationGatewayOperationalState = "Stopped"
106	// Stopping ...
107	Stopping ApplicationGatewayOperationalState = "Stopping"
108)
109
110// PossibleApplicationGatewayOperationalStateValues returns an array of possible values for the ApplicationGatewayOperationalState const type.
111func PossibleApplicationGatewayOperationalStateValues() []ApplicationGatewayOperationalState {
112	return []ApplicationGatewayOperationalState{Running, Starting, Stopped, Stopping}
113}
114
115// ApplicationGatewayProtocol enumerates the values for application gateway protocol.
116type ApplicationGatewayProtocol string
117
118const (
119	// HTTP ...
120	HTTP ApplicationGatewayProtocol = "Http"
121	// HTTPS ...
122	HTTPS ApplicationGatewayProtocol = "Https"
123)
124
125// PossibleApplicationGatewayProtocolValues returns an array of possible values for the ApplicationGatewayProtocol const type.
126func PossibleApplicationGatewayProtocolValues() []ApplicationGatewayProtocol {
127	return []ApplicationGatewayProtocol{HTTP, HTTPS}
128}
129
130// ApplicationGatewayRedirectType enumerates the values for application gateway redirect type.
131type ApplicationGatewayRedirectType string
132
133const (
134	// Found ...
135	Found ApplicationGatewayRedirectType = "Found"
136	// Permanent ...
137	Permanent ApplicationGatewayRedirectType = "Permanent"
138	// SeeOther ...
139	SeeOther ApplicationGatewayRedirectType = "SeeOther"
140	// Temporary ...
141	Temporary ApplicationGatewayRedirectType = "Temporary"
142)
143
144// PossibleApplicationGatewayRedirectTypeValues returns an array of possible values for the ApplicationGatewayRedirectType const type.
145func PossibleApplicationGatewayRedirectTypeValues() []ApplicationGatewayRedirectType {
146	return []ApplicationGatewayRedirectType{Found, Permanent, SeeOther, Temporary}
147}
148
149// ApplicationGatewayRequestRoutingRuleType enumerates the values for application gateway request routing rule
150// type.
151type ApplicationGatewayRequestRoutingRuleType string
152
153const (
154	// Basic ...
155	Basic ApplicationGatewayRequestRoutingRuleType = "Basic"
156	// PathBasedRouting ...
157	PathBasedRouting ApplicationGatewayRequestRoutingRuleType = "PathBasedRouting"
158)
159
160// PossibleApplicationGatewayRequestRoutingRuleTypeValues returns an array of possible values for the ApplicationGatewayRequestRoutingRuleType const type.
161func PossibleApplicationGatewayRequestRoutingRuleTypeValues() []ApplicationGatewayRequestRoutingRuleType {
162	return []ApplicationGatewayRequestRoutingRuleType{Basic, PathBasedRouting}
163}
164
165// ApplicationGatewaySkuName enumerates the values for application gateway sku name.
166type ApplicationGatewaySkuName string
167
168const (
169	// StandardLarge ...
170	StandardLarge ApplicationGatewaySkuName = "Standard_Large"
171	// StandardMedium ...
172	StandardMedium ApplicationGatewaySkuName = "Standard_Medium"
173	// StandardSmall ...
174	StandardSmall ApplicationGatewaySkuName = "Standard_Small"
175	// WAFLarge ...
176	WAFLarge ApplicationGatewaySkuName = "WAF_Large"
177	// WAFMedium ...
178	WAFMedium ApplicationGatewaySkuName = "WAF_Medium"
179)
180
181// PossibleApplicationGatewaySkuNameValues returns an array of possible values for the ApplicationGatewaySkuName const type.
182func PossibleApplicationGatewaySkuNameValues() []ApplicationGatewaySkuName {
183	return []ApplicationGatewaySkuName{StandardLarge, StandardMedium, StandardSmall, WAFLarge, WAFMedium}
184}
185
186// ApplicationGatewaySslCipherSuite enumerates the values for application gateway ssl cipher suite.
187type ApplicationGatewaySslCipherSuite string
188
189const (
190	// TLSDHEDSSWITHAES128CBCSHA ...
191	TLSDHEDSSWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"
192	// TLSDHEDSSWITHAES128CBCSHA256 ...
193	TLSDHEDSSWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"
194	// TLSDHEDSSWITHAES256CBCSHA ...
195	TLSDHEDSSWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"
196	// TLSDHEDSSWITHAES256CBCSHA256 ...
197	TLSDHEDSSWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"
198	// TLSDHERSAWITHAES128CBCSHA ...
199	TLSDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"
200	// TLSDHERSAWITHAES128GCMSHA256 ...
201	TLSDHERSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"
202	// TLSDHERSAWITHAES256CBCSHA ...
203	TLSDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"
204	// TLSDHERSAWITHAES256GCMSHA384 ...
205	TLSDHERSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"
206	// TLSECDHEECDSAWITHAES128CBCSHA ...
207	TLSECDHEECDSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"
208	// TLSECDHEECDSAWITHAES128CBCSHA256 ...
209	TLSECDHEECDSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
210	// TLSECDHEECDSAWITHAES128GCMSHA256 ...
211	TLSECDHEECDSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
212	// TLSECDHEECDSAWITHAES256CBCSHA ...
213	TLSECDHEECDSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"
214	// TLSECDHEECDSAWITHAES256CBCSHA384 ...
215	TLSECDHEECDSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
216	// TLSECDHEECDSAWITHAES256GCMSHA384 ...
217	TLSECDHEECDSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
218	// TLSECDHERSAWITHAES128CBCSHA ...
219	TLSECDHERSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
220	// TLSECDHERSAWITHAES128CBCSHA256 ...
221	TLSECDHERSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
222	// TLSECDHERSAWITHAES256CBCSHA ...
223	TLSECDHERSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
224	// TLSECDHERSAWITHAES256CBCSHA384 ...
225	TLSECDHERSAWITHAES256CBCSHA384 ApplicationGatewaySslCipherSuite = "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
226	// TLSRSAWITH3DESEDECBCSHA ...
227	TLSRSAWITH3DESEDECBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_3DES_EDE_CBC_SHA"
228	// TLSRSAWITHAES128CBCSHA ...
229	TLSRSAWITHAES128CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA"
230	// TLSRSAWITHAES128CBCSHA256 ...
231	TLSRSAWITHAES128CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_CBC_SHA256"
232	// TLSRSAWITHAES128GCMSHA256 ...
233	TLSRSAWITHAES128GCMSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_128_GCM_SHA256"
234	// TLSRSAWITHAES256CBCSHA ...
235	TLSRSAWITHAES256CBCSHA ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA"
236	// TLSRSAWITHAES256CBCSHA256 ...
237	TLSRSAWITHAES256CBCSHA256 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_CBC_SHA256"
238	// TLSRSAWITHAES256GCMSHA384 ...
239	TLSRSAWITHAES256GCMSHA384 ApplicationGatewaySslCipherSuite = "TLS_RSA_WITH_AES_256_GCM_SHA384"
240)
241
242// PossibleApplicationGatewaySslCipherSuiteValues returns an array of possible values for the ApplicationGatewaySslCipherSuite const type.
243func PossibleApplicationGatewaySslCipherSuiteValues() []ApplicationGatewaySslCipherSuite {
244	return []ApplicationGatewaySslCipherSuite{TLSDHEDSSWITHAES128CBCSHA, TLSDHEDSSWITHAES128CBCSHA256, TLSDHEDSSWITHAES256CBCSHA, TLSDHEDSSWITHAES256CBCSHA256, TLSDHERSAWITHAES128CBCSHA, TLSDHERSAWITHAES128GCMSHA256, TLSDHERSAWITHAES256CBCSHA, TLSDHERSAWITHAES256GCMSHA384, TLSECDHEECDSAWITHAES128CBCSHA, TLSECDHEECDSAWITHAES128CBCSHA256, TLSECDHEECDSAWITHAES128GCMSHA256, TLSECDHEECDSAWITHAES256CBCSHA, TLSECDHEECDSAWITHAES256CBCSHA384, TLSECDHEECDSAWITHAES256GCMSHA384, TLSECDHERSAWITHAES128CBCSHA, TLSECDHERSAWITHAES128CBCSHA256, TLSECDHERSAWITHAES256CBCSHA, TLSECDHERSAWITHAES256CBCSHA384, TLSRSAWITH3DESEDECBCSHA, TLSRSAWITHAES128CBCSHA, TLSRSAWITHAES128CBCSHA256, TLSRSAWITHAES128GCMSHA256, TLSRSAWITHAES256CBCSHA, TLSRSAWITHAES256CBCSHA256, TLSRSAWITHAES256GCMSHA384}
245}
246
247// ApplicationGatewaySslPolicyName enumerates the values for application gateway ssl policy name.
248type ApplicationGatewaySslPolicyName string
249
250const (
251	// AppGwSslPolicy20150501 ...
252	AppGwSslPolicy20150501 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20150501"
253	// AppGwSslPolicy20170401 ...
254	AppGwSslPolicy20170401 ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401"
255	// AppGwSslPolicy20170401S ...
256	AppGwSslPolicy20170401S ApplicationGatewaySslPolicyName = "AppGwSslPolicy20170401S"
257)
258
259// PossibleApplicationGatewaySslPolicyNameValues returns an array of possible values for the ApplicationGatewaySslPolicyName const type.
260func PossibleApplicationGatewaySslPolicyNameValues() []ApplicationGatewaySslPolicyName {
261	return []ApplicationGatewaySslPolicyName{AppGwSslPolicy20150501, AppGwSslPolicy20170401, AppGwSslPolicy20170401S}
262}
263
264// ApplicationGatewaySslPolicyType enumerates the values for application gateway ssl policy type.
265type ApplicationGatewaySslPolicyType string
266
267const (
268	// Custom ...
269	Custom ApplicationGatewaySslPolicyType = "Custom"
270	// Predefined ...
271	Predefined ApplicationGatewaySslPolicyType = "Predefined"
272)
273
274// PossibleApplicationGatewaySslPolicyTypeValues returns an array of possible values for the ApplicationGatewaySslPolicyType const type.
275func PossibleApplicationGatewaySslPolicyTypeValues() []ApplicationGatewaySslPolicyType {
276	return []ApplicationGatewaySslPolicyType{Custom, Predefined}
277}
278
279// ApplicationGatewaySslProtocol enumerates the values for application gateway ssl protocol.
280type ApplicationGatewaySslProtocol string
281
282const (
283	// TLSv10 ...
284	TLSv10 ApplicationGatewaySslProtocol = "TLSv1_0"
285	// TLSv11 ...
286	TLSv11 ApplicationGatewaySslProtocol = "TLSv1_1"
287	// TLSv12 ...
288	TLSv12 ApplicationGatewaySslProtocol = "TLSv1_2"
289)
290
291// PossibleApplicationGatewaySslProtocolValues returns an array of possible values for the ApplicationGatewaySslProtocol const type.
292func PossibleApplicationGatewaySslProtocolValues() []ApplicationGatewaySslProtocol {
293	return []ApplicationGatewaySslProtocol{TLSv10, TLSv11, TLSv12}
294}
295
296// ApplicationGatewayTier enumerates the values for application gateway tier.
297type ApplicationGatewayTier string
298
299const (
300	// Standard ...
301	Standard ApplicationGatewayTier = "Standard"
302	// WAF ...
303	WAF ApplicationGatewayTier = "WAF"
304)
305
306// PossibleApplicationGatewayTierValues returns an array of possible values for the ApplicationGatewayTier const type.
307func PossibleApplicationGatewayTierValues() []ApplicationGatewayTier {
308	return []ApplicationGatewayTier{Standard, WAF}
309}
310
311// AssociationType enumerates the values for association type.
312type AssociationType string
313
314const (
315	// Associated ...
316	Associated AssociationType = "Associated"
317	// Contains ...
318	Contains AssociationType = "Contains"
319)
320
321// PossibleAssociationTypeValues returns an array of possible values for the AssociationType const type.
322func PossibleAssociationTypeValues() []AssociationType {
323	return []AssociationType{Associated, Contains}
324}
325
326// AuthenticationMethod enumerates the values for authentication method.
327type AuthenticationMethod string
328
329const (
330	// EAPMSCHAPv2 ...
331	EAPMSCHAPv2 AuthenticationMethod = "EAPMSCHAPv2"
332	// EAPTLS ...
333	EAPTLS AuthenticationMethod = "EAPTLS"
334)
335
336// PossibleAuthenticationMethodValues returns an array of possible values for the AuthenticationMethod const type.
337func PossibleAuthenticationMethodValues() []AuthenticationMethod {
338	return []AuthenticationMethod{EAPMSCHAPv2, EAPTLS}
339}
340
341// AuthorizationUseStatus enumerates the values for authorization use status.
342type AuthorizationUseStatus string
343
344const (
345	// Available ...
346	Available AuthorizationUseStatus = "Available"
347	// InUse ...
348	InUse AuthorizationUseStatus = "InUse"
349)
350
351// PossibleAuthorizationUseStatusValues returns an array of possible values for the AuthorizationUseStatus const type.
352func PossibleAuthorizationUseStatusValues() []AuthorizationUseStatus {
353	return []AuthorizationUseStatus{Available, InUse}
354}
355
356// BgpPeerState enumerates the values for bgp peer state.
357type BgpPeerState string
358
359const (
360	// BgpPeerStateConnected ...
361	BgpPeerStateConnected BgpPeerState = "Connected"
362	// BgpPeerStateConnecting ...
363	BgpPeerStateConnecting BgpPeerState = "Connecting"
364	// BgpPeerStateIdle ...
365	BgpPeerStateIdle BgpPeerState = "Idle"
366	// BgpPeerStateStopped ...
367	BgpPeerStateStopped BgpPeerState = "Stopped"
368	// BgpPeerStateUnknown ...
369	BgpPeerStateUnknown BgpPeerState = "Unknown"
370)
371
372// PossibleBgpPeerStateValues returns an array of possible values for the BgpPeerState const type.
373func PossibleBgpPeerStateValues() []BgpPeerState {
374	return []BgpPeerState{BgpPeerStateConnected, BgpPeerStateConnecting, BgpPeerStateIdle, BgpPeerStateStopped, BgpPeerStateUnknown}
375}
376
377// ConnectionState enumerates the values for connection state.
378type ConnectionState string
379
380const (
381	// ConnectionStateReachable ...
382	ConnectionStateReachable ConnectionState = "Reachable"
383	// ConnectionStateUnknown ...
384	ConnectionStateUnknown ConnectionState = "Unknown"
385	// ConnectionStateUnreachable ...
386	ConnectionStateUnreachable ConnectionState = "Unreachable"
387)
388
389// PossibleConnectionStateValues returns an array of possible values for the ConnectionState const type.
390func PossibleConnectionStateValues() []ConnectionState {
391	return []ConnectionState{ConnectionStateReachable, ConnectionStateUnknown, ConnectionStateUnreachable}
392}
393
394// ConnectionStatus enumerates the values for connection status.
395type ConnectionStatus string
396
397const (
398	// ConnectionStatusConnected ...
399	ConnectionStatusConnected ConnectionStatus = "Connected"
400	// ConnectionStatusDegraded ...
401	ConnectionStatusDegraded ConnectionStatus = "Degraded"
402	// ConnectionStatusDisconnected ...
403	ConnectionStatusDisconnected ConnectionStatus = "Disconnected"
404	// ConnectionStatusUnknown ...
405	ConnectionStatusUnknown ConnectionStatus = "Unknown"
406)
407
408// PossibleConnectionStatusValues returns an array of possible values for the ConnectionStatus const type.
409func PossibleConnectionStatusValues() []ConnectionStatus {
410	return []ConnectionStatus{ConnectionStatusConnected, ConnectionStatusDegraded, ConnectionStatusDisconnected, ConnectionStatusUnknown}
411}
412
413// DhGroup enumerates the values for dh group.
414type DhGroup string
415
416const (
417	// DHGroup1 ...
418	DHGroup1 DhGroup = "DHGroup1"
419	// DHGroup14 ...
420	DHGroup14 DhGroup = "DHGroup14"
421	// DHGroup2 ...
422	DHGroup2 DhGroup = "DHGroup2"
423	// DHGroup2048 ...
424	DHGroup2048 DhGroup = "DHGroup2048"
425	// DHGroup24 ...
426	DHGroup24 DhGroup = "DHGroup24"
427	// ECP256 ...
428	ECP256 DhGroup = "ECP256"
429	// ECP384 ...
430	ECP384 DhGroup = "ECP384"
431	// None ...
432	None DhGroup = "None"
433)
434
435// PossibleDhGroupValues returns an array of possible values for the DhGroup const type.
436func PossibleDhGroupValues() []DhGroup {
437	return []DhGroup{DHGroup1, DHGroup14, DHGroup2, DHGroup2048, DHGroup24, ECP256, ECP384, None}
438}
439
440// Direction enumerates the values for direction.
441type Direction string
442
443const (
444	// Inbound ...
445	Inbound Direction = "Inbound"
446	// Outbound ...
447	Outbound Direction = "Outbound"
448)
449
450// PossibleDirectionValues returns an array of possible values for the Direction const type.
451func PossibleDirectionValues() []Direction {
452	return []Direction{Inbound, Outbound}
453}
454
455// EffectiveRouteSource enumerates the values for effective route source.
456type EffectiveRouteSource string
457
458const (
459	// EffectiveRouteSourceDefault ...
460	EffectiveRouteSourceDefault EffectiveRouteSource = "Default"
461	// EffectiveRouteSourceUnknown ...
462	EffectiveRouteSourceUnknown EffectiveRouteSource = "Unknown"
463	// EffectiveRouteSourceUser ...
464	EffectiveRouteSourceUser EffectiveRouteSource = "User"
465	// EffectiveRouteSourceVirtualNetworkGateway ...
466	EffectiveRouteSourceVirtualNetworkGateway EffectiveRouteSource = "VirtualNetworkGateway"
467)
468
469// PossibleEffectiveRouteSourceValues returns an array of possible values for the EffectiveRouteSource const type.
470func PossibleEffectiveRouteSourceValues() []EffectiveRouteSource {
471	return []EffectiveRouteSource{EffectiveRouteSourceDefault, EffectiveRouteSourceUnknown, EffectiveRouteSourceUser, EffectiveRouteSourceVirtualNetworkGateway}
472}
473
474// EffectiveRouteState enumerates the values for effective route state.
475type EffectiveRouteState string
476
477const (
478	// Active ...
479	Active EffectiveRouteState = "Active"
480	// Invalid ...
481	Invalid EffectiveRouteState = "Invalid"
482)
483
484// PossibleEffectiveRouteStateValues returns an array of possible values for the EffectiveRouteState const type.
485func PossibleEffectiveRouteStateValues() []EffectiveRouteState {
486	return []EffectiveRouteState{Active, Invalid}
487}
488
489// EffectiveSecurityRuleProtocol enumerates the values for effective security rule protocol.
490type EffectiveSecurityRuleProtocol string
491
492const (
493	// All ...
494	All EffectiveSecurityRuleProtocol = "All"
495	// TCP ...
496	TCP EffectiveSecurityRuleProtocol = "Tcp"
497	// UDP ...
498	UDP EffectiveSecurityRuleProtocol = "Udp"
499)
500
501// PossibleEffectiveSecurityRuleProtocolValues returns an array of possible values for the EffectiveSecurityRuleProtocol const type.
502func PossibleEffectiveSecurityRuleProtocolValues() []EffectiveSecurityRuleProtocol {
503	return []EffectiveSecurityRuleProtocol{All, TCP, UDP}
504}
505
506// EvaluationState enumerates the values for evaluation state.
507type EvaluationState string
508
509const (
510	// Completed ...
511	Completed EvaluationState = "Completed"
512	// InProgress ...
513	InProgress EvaluationState = "InProgress"
514	// NotStarted ...
515	NotStarted EvaluationState = "NotStarted"
516)
517
518// PossibleEvaluationStateValues returns an array of possible values for the EvaluationState const type.
519func PossibleEvaluationStateValues() []EvaluationState {
520	return []EvaluationState{Completed, InProgress, NotStarted}
521}
522
523// ExpressRouteCircuitPeeringAdvertisedPublicPrefixState enumerates the values for express route circuit
524// peering advertised public prefix state.
525type ExpressRouteCircuitPeeringAdvertisedPublicPrefixState string
526
527const (
528	// Configured ...
529	Configured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configured"
530	// Configuring ...
531	Configuring ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "Configuring"
532	// NotConfigured ...
533	NotConfigured ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "NotConfigured"
534	// ValidationNeeded ...
535	ValidationNeeded ExpressRouteCircuitPeeringAdvertisedPublicPrefixState = "ValidationNeeded"
536)
537
538// PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues returns an array of possible values for the ExpressRouteCircuitPeeringAdvertisedPublicPrefixState const type.
539func PossibleExpressRouteCircuitPeeringAdvertisedPublicPrefixStateValues() []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState {
540	return []ExpressRouteCircuitPeeringAdvertisedPublicPrefixState{Configured, Configuring, NotConfigured, ValidationNeeded}
541}
542
543// ExpressRouteCircuitPeeringState enumerates the values for express route circuit peering state.
544type ExpressRouteCircuitPeeringState string
545
546const (
547	// ExpressRouteCircuitPeeringStateDisabled ...
548	ExpressRouteCircuitPeeringStateDisabled ExpressRouteCircuitPeeringState = "Disabled"
549	// ExpressRouteCircuitPeeringStateEnabled ...
550	ExpressRouteCircuitPeeringStateEnabled ExpressRouteCircuitPeeringState = "Enabled"
551)
552
553// PossibleExpressRouteCircuitPeeringStateValues returns an array of possible values for the ExpressRouteCircuitPeeringState const type.
554func PossibleExpressRouteCircuitPeeringStateValues() []ExpressRouteCircuitPeeringState {
555	return []ExpressRouteCircuitPeeringState{ExpressRouteCircuitPeeringStateDisabled, ExpressRouteCircuitPeeringStateEnabled}
556}
557
558// ExpressRouteCircuitPeeringType enumerates the values for express route circuit peering type.
559type ExpressRouteCircuitPeeringType string
560
561const (
562	// AzurePrivatePeering ...
563	AzurePrivatePeering ExpressRouteCircuitPeeringType = "AzurePrivatePeering"
564	// AzurePublicPeering ...
565	AzurePublicPeering ExpressRouteCircuitPeeringType = "AzurePublicPeering"
566	// MicrosoftPeering ...
567	MicrosoftPeering ExpressRouteCircuitPeeringType = "MicrosoftPeering"
568)
569
570// PossibleExpressRouteCircuitPeeringTypeValues returns an array of possible values for the ExpressRouteCircuitPeeringType const type.
571func PossibleExpressRouteCircuitPeeringTypeValues() []ExpressRouteCircuitPeeringType {
572	return []ExpressRouteCircuitPeeringType{AzurePrivatePeering, AzurePublicPeering, MicrosoftPeering}
573}
574
575// ExpressRouteCircuitSkuFamily enumerates the values for express route circuit sku family.
576type ExpressRouteCircuitSkuFamily string
577
578const (
579	// MeteredData ...
580	MeteredData ExpressRouteCircuitSkuFamily = "MeteredData"
581	// UnlimitedData ...
582	UnlimitedData ExpressRouteCircuitSkuFamily = "UnlimitedData"
583)
584
585// PossibleExpressRouteCircuitSkuFamilyValues returns an array of possible values for the ExpressRouteCircuitSkuFamily const type.
586func PossibleExpressRouteCircuitSkuFamilyValues() []ExpressRouteCircuitSkuFamily {
587	return []ExpressRouteCircuitSkuFamily{MeteredData, UnlimitedData}
588}
589
590// ExpressRouteCircuitSkuTier enumerates the values for express route circuit sku tier.
591type ExpressRouteCircuitSkuTier string
592
593const (
594	// ExpressRouteCircuitSkuTierPremium ...
595	ExpressRouteCircuitSkuTierPremium ExpressRouteCircuitSkuTier = "Premium"
596	// ExpressRouteCircuitSkuTierStandard ...
597	ExpressRouteCircuitSkuTierStandard ExpressRouteCircuitSkuTier = "Standard"
598)
599
600// PossibleExpressRouteCircuitSkuTierValues returns an array of possible values for the ExpressRouteCircuitSkuTier const type.
601func PossibleExpressRouteCircuitSkuTierValues() []ExpressRouteCircuitSkuTier {
602	return []ExpressRouteCircuitSkuTier{ExpressRouteCircuitSkuTierPremium, ExpressRouteCircuitSkuTierStandard}
603}
604
605// IkeEncryption enumerates the values for ike encryption.
606type IkeEncryption string
607
608const (
609	// AES128 ...
610	AES128 IkeEncryption = "AES128"
611	// AES192 ...
612	AES192 IkeEncryption = "AES192"
613	// AES256 ...
614	AES256 IkeEncryption = "AES256"
615	// DES ...
616	DES IkeEncryption = "DES"
617	// DES3 ...
618	DES3 IkeEncryption = "DES3"
619)
620
621// PossibleIkeEncryptionValues returns an array of possible values for the IkeEncryption const type.
622func PossibleIkeEncryptionValues() []IkeEncryption {
623	return []IkeEncryption{AES128, AES192, AES256, DES, DES3}
624}
625
626// IkeIntegrity enumerates the values for ike integrity.
627type IkeIntegrity string
628
629const (
630	// MD5 ...
631	MD5 IkeIntegrity = "MD5"
632	// SHA1 ...
633	SHA1 IkeIntegrity = "SHA1"
634	// SHA256 ...
635	SHA256 IkeIntegrity = "SHA256"
636	// SHA384 ...
637	SHA384 IkeIntegrity = "SHA384"
638)
639
640// PossibleIkeIntegrityValues returns an array of possible values for the IkeIntegrity const type.
641func PossibleIkeIntegrityValues() []IkeIntegrity {
642	return []IkeIntegrity{MD5, SHA1, SHA256, SHA384}
643}
644
645// IPAllocationMethod enumerates the values for ip allocation method.
646type IPAllocationMethod string
647
648const (
649	// Dynamic ...
650	Dynamic IPAllocationMethod = "Dynamic"
651	// Static ...
652	Static IPAllocationMethod = "Static"
653)
654
655// PossibleIPAllocationMethodValues returns an array of possible values for the IPAllocationMethod const type.
656func PossibleIPAllocationMethodValues() []IPAllocationMethod {
657	return []IPAllocationMethod{Dynamic, Static}
658}
659
660// IpsecEncryption enumerates the values for ipsec encryption.
661type IpsecEncryption string
662
663const (
664	// IpsecEncryptionAES128 ...
665	IpsecEncryptionAES128 IpsecEncryption = "AES128"
666	// IpsecEncryptionAES192 ...
667	IpsecEncryptionAES192 IpsecEncryption = "AES192"
668	// IpsecEncryptionAES256 ...
669	IpsecEncryptionAES256 IpsecEncryption = "AES256"
670	// IpsecEncryptionDES ...
671	IpsecEncryptionDES IpsecEncryption = "DES"
672	// IpsecEncryptionDES3 ...
673	IpsecEncryptionDES3 IpsecEncryption = "DES3"
674	// IpsecEncryptionGCMAES128 ...
675	IpsecEncryptionGCMAES128 IpsecEncryption = "GCMAES128"
676	// IpsecEncryptionGCMAES192 ...
677	IpsecEncryptionGCMAES192 IpsecEncryption = "GCMAES192"
678	// IpsecEncryptionGCMAES256 ...
679	IpsecEncryptionGCMAES256 IpsecEncryption = "GCMAES256"
680	// IpsecEncryptionNone ...
681	IpsecEncryptionNone IpsecEncryption = "None"
682)
683
684// PossibleIpsecEncryptionValues returns an array of possible values for the IpsecEncryption const type.
685func PossibleIpsecEncryptionValues() []IpsecEncryption {
686	return []IpsecEncryption{IpsecEncryptionAES128, IpsecEncryptionAES192, IpsecEncryptionAES256, IpsecEncryptionDES, IpsecEncryptionDES3, IpsecEncryptionGCMAES128, IpsecEncryptionGCMAES192, IpsecEncryptionGCMAES256, IpsecEncryptionNone}
687}
688
689// IpsecIntegrity enumerates the values for ipsec integrity.
690type IpsecIntegrity string
691
692const (
693	// IpsecIntegrityGCMAES128 ...
694	IpsecIntegrityGCMAES128 IpsecIntegrity = "GCMAES128"
695	// IpsecIntegrityGCMAES192 ...
696	IpsecIntegrityGCMAES192 IpsecIntegrity = "GCMAES192"
697	// IpsecIntegrityGCMAES256 ...
698	IpsecIntegrityGCMAES256 IpsecIntegrity = "GCMAES256"
699	// IpsecIntegrityMD5 ...
700	IpsecIntegrityMD5 IpsecIntegrity = "MD5"
701	// IpsecIntegritySHA1 ...
702	IpsecIntegritySHA1 IpsecIntegrity = "SHA1"
703	// IpsecIntegritySHA256 ...
704	IpsecIntegritySHA256 IpsecIntegrity = "SHA256"
705)
706
707// PossibleIpsecIntegrityValues returns an array of possible values for the IpsecIntegrity const type.
708func PossibleIpsecIntegrityValues() []IpsecIntegrity {
709	return []IpsecIntegrity{IpsecIntegrityGCMAES128, IpsecIntegrityGCMAES192, IpsecIntegrityGCMAES256, IpsecIntegrityMD5, IpsecIntegritySHA1, IpsecIntegritySHA256}
710}
711
712// IPVersion enumerates the values for ip version.
713type IPVersion string
714
715const (
716	// IPv4 ...
717	IPv4 IPVersion = "IPv4"
718	// IPv6 ...
719	IPv6 IPVersion = "IPv6"
720)
721
722// PossibleIPVersionValues returns an array of possible values for the IPVersion const type.
723func PossibleIPVersionValues() []IPVersion {
724	return []IPVersion{IPv4, IPv6}
725}
726
727// IssueType enumerates the values for issue type.
728type IssueType string
729
730const (
731	// IssueTypeAgentStopped ...
732	IssueTypeAgentStopped IssueType = "AgentStopped"
733	// IssueTypeDNSResolution ...
734	IssueTypeDNSResolution IssueType = "DnsResolution"
735	// IssueTypeGuestFirewall ...
736	IssueTypeGuestFirewall IssueType = "GuestFirewall"
737	// IssueTypeNetworkSecurityRule ...
738	IssueTypeNetworkSecurityRule IssueType = "NetworkSecurityRule"
739	// IssueTypePlatform ...
740	IssueTypePlatform IssueType = "Platform"
741	// IssueTypePortThrottled ...
742	IssueTypePortThrottled IssueType = "PortThrottled"
743	// IssueTypeSocketBind ...
744	IssueTypeSocketBind IssueType = "SocketBind"
745	// IssueTypeUnknown ...
746	IssueTypeUnknown IssueType = "Unknown"
747	// IssueTypeUserDefinedRoute ...
748	IssueTypeUserDefinedRoute IssueType = "UserDefinedRoute"
749)
750
751// PossibleIssueTypeValues returns an array of possible values for the IssueType const type.
752func PossibleIssueTypeValues() []IssueType {
753	return []IssueType{IssueTypeAgentStopped, IssueTypeDNSResolution, IssueTypeGuestFirewall, IssueTypeNetworkSecurityRule, IssueTypePlatform, IssueTypePortThrottled, IssueTypeSocketBind, IssueTypeUnknown, IssueTypeUserDefinedRoute}
754}
755
756// LoadBalancerSkuName enumerates the values for load balancer sku name.
757type LoadBalancerSkuName string
758
759const (
760	// LoadBalancerSkuNameBasic ...
761	LoadBalancerSkuNameBasic LoadBalancerSkuName = "Basic"
762	// LoadBalancerSkuNameStandard ...
763	LoadBalancerSkuNameStandard LoadBalancerSkuName = "Standard"
764)
765
766// PossibleLoadBalancerSkuNameValues returns an array of possible values for the LoadBalancerSkuName const type.
767func PossibleLoadBalancerSkuNameValues() []LoadBalancerSkuName {
768	return []LoadBalancerSkuName{LoadBalancerSkuNameBasic, LoadBalancerSkuNameStandard}
769}
770
771// LoadDistribution enumerates the values for load distribution.
772type LoadDistribution string
773
774const (
775	// Default ...
776	Default LoadDistribution = "Default"
777	// SourceIP ...
778	SourceIP LoadDistribution = "SourceIP"
779	// SourceIPProtocol ...
780	SourceIPProtocol LoadDistribution = "SourceIPProtocol"
781)
782
783// PossibleLoadDistributionValues returns an array of possible values for the LoadDistribution const type.
784func PossibleLoadDistributionValues() []LoadDistribution {
785	return []LoadDistribution{Default, SourceIP, SourceIPProtocol}
786}
787
788// NextHopType enumerates the values for next hop type.
789type NextHopType string
790
791const (
792	// NextHopTypeHyperNetGateway ...
793	NextHopTypeHyperNetGateway NextHopType = "HyperNetGateway"
794	// NextHopTypeInternet ...
795	NextHopTypeInternet NextHopType = "Internet"
796	// NextHopTypeNone ...
797	NextHopTypeNone NextHopType = "None"
798	// NextHopTypeVirtualAppliance ...
799	NextHopTypeVirtualAppliance NextHopType = "VirtualAppliance"
800	// NextHopTypeVirtualNetworkGateway ...
801	NextHopTypeVirtualNetworkGateway NextHopType = "VirtualNetworkGateway"
802	// NextHopTypeVnetLocal ...
803	NextHopTypeVnetLocal NextHopType = "VnetLocal"
804)
805
806// PossibleNextHopTypeValues returns an array of possible values for the NextHopType const type.
807func PossibleNextHopTypeValues() []NextHopType {
808	return []NextHopType{NextHopTypeHyperNetGateway, NextHopTypeInternet, NextHopTypeNone, NextHopTypeVirtualAppliance, NextHopTypeVirtualNetworkGateway, NextHopTypeVnetLocal}
809}
810
811// OperationStatus enumerates the values for operation status.
812type OperationStatus string
813
814const (
815	// OperationStatusFailed ...
816	OperationStatusFailed OperationStatus = "Failed"
817	// OperationStatusInProgress ...
818	OperationStatusInProgress OperationStatus = "InProgress"
819	// OperationStatusSucceeded ...
820	OperationStatusSucceeded OperationStatus = "Succeeded"
821)
822
823// PossibleOperationStatusValues returns an array of possible values for the OperationStatus const type.
824func PossibleOperationStatusValues() []OperationStatus {
825	return []OperationStatus{OperationStatusFailed, OperationStatusInProgress, OperationStatusSucceeded}
826}
827
828// Origin enumerates the values for origin.
829type Origin string
830
831const (
832	// OriginInbound ...
833	OriginInbound Origin = "Inbound"
834	// OriginLocal ...
835	OriginLocal Origin = "Local"
836	// OriginOutbound ...
837	OriginOutbound Origin = "Outbound"
838)
839
840// PossibleOriginValues returns an array of possible values for the Origin const type.
841func PossibleOriginValues() []Origin {
842	return []Origin{OriginInbound, OriginLocal, OriginOutbound}
843}
844
845// PcError enumerates the values for pc error.
846type PcError string
847
848const (
849	// AgentStopped ...
850	AgentStopped PcError = "AgentStopped"
851	// CaptureFailed ...
852	CaptureFailed PcError = "CaptureFailed"
853	// InternalError ...
854	InternalError PcError = "InternalError"
855	// LocalFileFailed ...
856	LocalFileFailed PcError = "LocalFileFailed"
857	// StorageFailed ...
858	StorageFailed PcError = "StorageFailed"
859)
860
861// PossiblePcErrorValues returns an array of possible values for the PcError const type.
862func PossiblePcErrorValues() []PcError {
863	return []PcError{AgentStopped, CaptureFailed, InternalError, LocalFileFailed, StorageFailed}
864}
865
866// PcProtocol enumerates the values for pc protocol.
867type PcProtocol string
868
869const (
870	// PcProtocolAny ...
871	PcProtocolAny PcProtocol = "Any"
872	// PcProtocolTCP ...
873	PcProtocolTCP PcProtocol = "TCP"
874	// PcProtocolUDP ...
875	PcProtocolUDP PcProtocol = "UDP"
876)
877
878// PossiblePcProtocolValues returns an array of possible values for the PcProtocol const type.
879func PossiblePcProtocolValues() []PcProtocol {
880	return []PcProtocol{PcProtocolAny, PcProtocolTCP, PcProtocolUDP}
881}
882
883// PcStatus enumerates the values for pc status.
884type PcStatus string
885
886const (
887	// PcStatusError ...
888	PcStatusError PcStatus = "Error"
889	// PcStatusNotStarted ...
890	PcStatusNotStarted PcStatus = "NotStarted"
891	// PcStatusRunning ...
892	PcStatusRunning PcStatus = "Running"
893	// PcStatusStopped ...
894	PcStatusStopped PcStatus = "Stopped"
895	// PcStatusUnknown ...
896	PcStatusUnknown PcStatus = "Unknown"
897)
898
899// PossiblePcStatusValues returns an array of possible values for the PcStatus const type.
900func PossiblePcStatusValues() []PcStatus {
901	return []PcStatus{PcStatusError, PcStatusNotStarted, PcStatusRunning, PcStatusStopped, PcStatusUnknown}
902}
903
904// PfsGroup enumerates the values for pfs group.
905type PfsGroup string
906
907const (
908	// PfsGroupECP256 ...
909	PfsGroupECP256 PfsGroup = "ECP256"
910	// PfsGroupECP384 ...
911	PfsGroupECP384 PfsGroup = "ECP384"
912	// PfsGroupNone ...
913	PfsGroupNone PfsGroup = "None"
914	// PfsGroupPFS1 ...
915	PfsGroupPFS1 PfsGroup = "PFS1"
916	// PfsGroupPFS2 ...
917	PfsGroupPFS2 PfsGroup = "PFS2"
918	// PfsGroupPFS2048 ...
919	PfsGroupPFS2048 PfsGroup = "PFS2048"
920	// PfsGroupPFS24 ...
921	PfsGroupPFS24 PfsGroup = "PFS24"
922)
923
924// PossiblePfsGroupValues returns an array of possible values for the PfsGroup const type.
925func PossiblePfsGroupValues() []PfsGroup {
926	return []PfsGroup{PfsGroupECP256, PfsGroupECP384, PfsGroupNone, PfsGroupPFS1, PfsGroupPFS2, PfsGroupPFS2048, PfsGroupPFS24}
927}
928
929// ProbeProtocol enumerates the values for probe protocol.
930type ProbeProtocol string
931
932const (
933	// ProbeProtocolHTTP ...
934	ProbeProtocolHTTP ProbeProtocol = "Http"
935	// ProbeProtocolTCP ...
936	ProbeProtocolTCP ProbeProtocol = "Tcp"
937)
938
939// PossibleProbeProtocolValues returns an array of possible values for the ProbeProtocol const type.
940func PossibleProbeProtocolValues() []ProbeProtocol {
941	return []ProbeProtocol{ProbeProtocolHTTP, ProbeProtocolTCP}
942}
943
944// ProcessorArchitecture enumerates the values for processor architecture.
945type ProcessorArchitecture string
946
947const (
948	// Amd64 ...
949	Amd64 ProcessorArchitecture = "Amd64"
950	// X86 ...
951	X86 ProcessorArchitecture = "X86"
952)
953
954// PossibleProcessorArchitectureValues returns an array of possible values for the ProcessorArchitecture const type.
955func PossibleProcessorArchitectureValues() []ProcessorArchitecture {
956	return []ProcessorArchitecture{Amd64, X86}
957}
958
959// Protocol enumerates the values for protocol.
960type Protocol string
961
962const (
963	// ProtocolTCP ...
964	ProtocolTCP Protocol = "TCP"
965	// ProtocolUDP ...
966	ProtocolUDP Protocol = "UDP"
967)
968
969// PossibleProtocolValues returns an array of possible values for the Protocol const type.
970func PossibleProtocolValues() []Protocol {
971	return []Protocol{ProtocolTCP, ProtocolUDP}
972}
973
974// ProvisioningState enumerates the values for provisioning state.
975type ProvisioningState string
976
977const (
978	// Deleting ...
979	Deleting ProvisioningState = "Deleting"
980	// Failed ...
981	Failed ProvisioningState = "Failed"
982	// Succeeded ...
983	Succeeded ProvisioningState = "Succeeded"
984	// Updating ...
985	Updating ProvisioningState = "Updating"
986)
987
988// PossibleProvisioningStateValues returns an array of possible values for the ProvisioningState const type.
989func PossibleProvisioningStateValues() []ProvisioningState {
990	return []ProvisioningState{Deleting, Failed, Succeeded, Updating}
991}
992
993// PublicIPAddressSkuName enumerates the values for public ip address sku name.
994type PublicIPAddressSkuName string
995
996const (
997	// PublicIPAddressSkuNameBasic ...
998	PublicIPAddressSkuNameBasic PublicIPAddressSkuName = "Basic"
999	// PublicIPAddressSkuNameStandard ...
1000	PublicIPAddressSkuNameStandard PublicIPAddressSkuName = "Standard"
1001)
1002
1003// PossiblePublicIPAddressSkuNameValues returns an array of possible values for the PublicIPAddressSkuName const type.
1004func PossiblePublicIPAddressSkuNameValues() []PublicIPAddressSkuName {
1005	return []PublicIPAddressSkuName{PublicIPAddressSkuNameBasic, PublicIPAddressSkuNameStandard}
1006}
1007
1008// RouteNextHopType enumerates the values for route next hop type.
1009type RouteNextHopType string
1010
1011const (
1012	// RouteNextHopTypeInternet ...
1013	RouteNextHopTypeInternet RouteNextHopType = "Internet"
1014	// RouteNextHopTypeNone ...
1015	RouteNextHopTypeNone RouteNextHopType = "None"
1016	// RouteNextHopTypeVirtualAppliance ...
1017	RouteNextHopTypeVirtualAppliance RouteNextHopType = "VirtualAppliance"
1018	// RouteNextHopTypeVirtualNetworkGateway ...
1019	RouteNextHopTypeVirtualNetworkGateway RouteNextHopType = "VirtualNetworkGateway"
1020	// RouteNextHopTypeVnetLocal ...
1021	RouteNextHopTypeVnetLocal RouteNextHopType = "VnetLocal"
1022)
1023
1024// PossibleRouteNextHopTypeValues returns an array of possible values for the RouteNextHopType const type.
1025func PossibleRouteNextHopTypeValues() []RouteNextHopType {
1026	return []RouteNextHopType{RouteNextHopTypeInternet, RouteNextHopTypeNone, RouteNextHopTypeVirtualAppliance, RouteNextHopTypeVirtualNetworkGateway, RouteNextHopTypeVnetLocal}
1027}
1028
1029// SecurityRuleAccess enumerates the values for security rule access.
1030type SecurityRuleAccess string
1031
1032const (
1033	// SecurityRuleAccessAllow ...
1034	SecurityRuleAccessAllow SecurityRuleAccess = "Allow"
1035	// SecurityRuleAccessDeny ...
1036	SecurityRuleAccessDeny SecurityRuleAccess = "Deny"
1037)
1038
1039// PossibleSecurityRuleAccessValues returns an array of possible values for the SecurityRuleAccess const type.
1040func PossibleSecurityRuleAccessValues() []SecurityRuleAccess {
1041	return []SecurityRuleAccess{SecurityRuleAccessAllow, SecurityRuleAccessDeny}
1042}
1043
1044// SecurityRuleDirection enumerates the values for security rule direction.
1045type SecurityRuleDirection string
1046
1047const (
1048	// SecurityRuleDirectionInbound ...
1049	SecurityRuleDirectionInbound SecurityRuleDirection = "Inbound"
1050	// SecurityRuleDirectionOutbound ...
1051	SecurityRuleDirectionOutbound SecurityRuleDirection = "Outbound"
1052)
1053
1054// PossibleSecurityRuleDirectionValues returns an array of possible values for the SecurityRuleDirection const type.
1055func PossibleSecurityRuleDirectionValues() []SecurityRuleDirection {
1056	return []SecurityRuleDirection{SecurityRuleDirectionInbound, SecurityRuleDirectionOutbound}
1057}
1058
1059// SecurityRuleProtocol enumerates the values for security rule protocol.
1060type SecurityRuleProtocol string
1061
1062const (
1063	// SecurityRuleProtocolAsterisk ...
1064	SecurityRuleProtocolAsterisk SecurityRuleProtocol = "*"
1065	// SecurityRuleProtocolTCP ...
1066	SecurityRuleProtocolTCP SecurityRuleProtocol = "Tcp"
1067	// SecurityRuleProtocolUDP ...
1068	SecurityRuleProtocolUDP SecurityRuleProtocol = "Udp"
1069)
1070
1071// PossibleSecurityRuleProtocolValues returns an array of possible values for the SecurityRuleProtocol const type.
1072func PossibleSecurityRuleProtocolValues() []SecurityRuleProtocol {
1073	return []SecurityRuleProtocol{SecurityRuleProtocolAsterisk, SecurityRuleProtocolTCP, SecurityRuleProtocolUDP}
1074}
1075
1076// ServiceProviderProvisioningState enumerates the values for service provider provisioning state.
1077type ServiceProviderProvisioningState string
1078
1079const (
1080	// Deprovisioning ...
1081	Deprovisioning ServiceProviderProvisioningState = "Deprovisioning"
1082	// NotProvisioned ...
1083	NotProvisioned ServiceProviderProvisioningState = "NotProvisioned"
1084	// Provisioned ...
1085	Provisioned ServiceProviderProvisioningState = "Provisioned"
1086	// Provisioning ...
1087	Provisioning ServiceProviderProvisioningState = "Provisioning"
1088)
1089
1090// PossibleServiceProviderProvisioningStateValues returns an array of possible values for the ServiceProviderProvisioningState const type.
1091func PossibleServiceProviderProvisioningStateValues() []ServiceProviderProvisioningState {
1092	return []ServiceProviderProvisioningState{Deprovisioning, NotProvisioned, Provisioned, Provisioning}
1093}
1094
1095// Severity enumerates the values for severity.
1096type Severity string
1097
1098const (
1099	// SeverityError ...
1100	SeverityError Severity = "Error"
1101	// SeverityWarning ...
1102	SeverityWarning Severity = "Warning"
1103)
1104
1105// PossibleSeverityValues returns an array of possible values for the Severity const type.
1106func PossibleSeverityValues() []Severity {
1107	return []Severity{SeverityError, SeverityWarning}
1108}
1109
1110// TransportProtocol enumerates the values for transport protocol.
1111type TransportProtocol string
1112
1113const (
1114	// TransportProtocolAll ...
1115	TransportProtocolAll TransportProtocol = "All"
1116	// TransportProtocolTCP ...
1117	TransportProtocolTCP TransportProtocol = "Tcp"
1118	// TransportProtocolUDP ...
1119	TransportProtocolUDP TransportProtocol = "Udp"
1120)
1121
1122// PossibleTransportProtocolValues returns an array of possible values for the TransportProtocol const type.
1123func PossibleTransportProtocolValues() []TransportProtocol {
1124	return []TransportProtocol{TransportProtocolAll, TransportProtocolTCP, TransportProtocolUDP}
1125}
1126
1127// VirtualNetworkGatewayConnectionStatus enumerates the values for virtual network gateway connection status.
1128type VirtualNetworkGatewayConnectionStatus string
1129
1130const (
1131	// VirtualNetworkGatewayConnectionStatusConnected ...
1132	VirtualNetworkGatewayConnectionStatusConnected VirtualNetworkGatewayConnectionStatus = "Connected"
1133	// VirtualNetworkGatewayConnectionStatusConnecting ...
1134	VirtualNetworkGatewayConnectionStatusConnecting VirtualNetworkGatewayConnectionStatus = "Connecting"
1135	// VirtualNetworkGatewayConnectionStatusNotConnected ...
1136	VirtualNetworkGatewayConnectionStatusNotConnected VirtualNetworkGatewayConnectionStatus = "NotConnected"
1137	// VirtualNetworkGatewayConnectionStatusUnknown ...
1138	VirtualNetworkGatewayConnectionStatusUnknown VirtualNetworkGatewayConnectionStatus = "Unknown"
1139)
1140
1141// PossibleVirtualNetworkGatewayConnectionStatusValues returns an array of possible values for the VirtualNetworkGatewayConnectionStatus const type.
1142func PossibleVirtualNetworkGatewayConnectionStatusValues() []VirtualNetworkGatewayConnectionStatus {
1143	return []VirtualNetworkGatewayConnectionStatus{VirtualNetworkGatewayConnectionStatusConnected, VirtualNetworkGatewayConnectionStatusConnecting, VirtualNetworkGatewayConnectionStatusNotConnected, VirtualNetworkGatewayConnectionStatusUnknown}
1144}
1145
1146// VirtualNetworkGatewayConnectionType enumerates the values for virtual network gateway connection type.
1147type VirtualNetworkGatewayConnectionType string
1148
1149const (
1150	// ExpressRoute ...
1151	ExpressRoute VirtualNetworkGatewayConnectionType = "ExpressRoute"
1152	// IPsec ...
1153	IPsec VirtualNetworkGatewayConnectionType = "IPsec"
1154	// Vnet2Vnet ...
1155	Vnet2Vnet VirtualNetworkGatewayConnectionType = "Vnet2Vnet"
1156	// VPNClient ...
1157	VPNClient VirtualNetworkGatewayConnectionType = "VPNClient"
1158)
1159
1160// PossibleVirtualNetworkGatewayConnectionTypeValues returns an array of possible values for the VirtualNetworkGatewayConnectionType const type.
1161func PossibleVirtualNetworkGatewayConnectionTypeValues() []VirtualNetworkGatewayConnectionType {
1162	return []VirtualNetworkGatewayConnectionType{ExpressRoute, IPsec, Vnet2Vnet, VPNClient}
1163}
1164
1165// VirtualNetworkGatewaySkuName enumerates the values for virtual network gateway sku name.
1166type VirtualNetworkGatewaySkuName string
1167
1168const (
1169	// VirtualNetworkGatewaySkuNameBasic ...
1170	VirtualNetworkGatewaySkuNameBasic VirtualNetworkGatewaySkuName = "Basic"
1171	// VirtualNetworkGatewaySkuNameHighPerformance ...
1172	VirtualNetworkGatewaySkuNameHighPerformance VirtualNetworkGatewaySkuName = "HighPerformance"
1173	// VirtualNetworkGatewaySkuNameStandard ...
1174	VirtualNetworkGatewaySkuNameStandard VirtualNetworkGatewaySkuName = "Standard"
1175	// VirtualNetworkGatewaySkuNameUltraPerformance ...
1176	VirtualNetworkGatewaySkuNameUltraPerformance VirtualNetworkGatewaySkuName = "UltraPerformance"
1177	// VirtualNetworkGatewaySkuNameVpnGw1 ...
1178	VirtualNetworkGatewaySkuNameVpnGw1 VirtualNetworkGatewaySkuName = "VpnGw1"
1179	// VirtualNetworkGatewaySkuNameVpnGw2 ...
1180	VirtualNetworkGatewaySkuNameVpnGw2 VirtualNetworkGatewaySkuName = "VpnGw2"
1181	// VirtualNetworkGatewaySkuNameVpnGw3 ...
1182	VirtualNetworkGatewaySkuNameVpnGw3 VirtualNetworkGatewaySkuName = "VpnGw3"
1183)
1184
1185// PossibleVirtualNetworkGatewaySkuNameValues returns an array of possible values for the VirtualNetworkGatewaySkuName const type.
1186func PossibleVirtualNetworkGatewaySkuNameValues() []VirtualNetworkGatewaySkuName {
1187	return []VirtualNetworkGatewaySkuName{VirtualNetworkGatewaySkuNameBasic, VirtualNetworkGatewaySkuNameHighPerformance, VirtualNetworkGatewaySkuNameStandard, VirtualNetworkGatewaySkuNameUltraPerformance, VirtualNetworkGatewaySkuNameVpnGw1, VirtualNetworkGatewaySkuNameVpnGw2, VirtualNetworkGatewaySkuNameVpnGw3}
1188}
1189
1190// VirtualNetworkGatewaySkuTier enumerates the values for virtual network gateway sku tier.
1191type VirtualNetworkGatewaySkuTier string
1192
1193const (
1194	// VirtualNetworkGatewaySkuTierBasic ...
1195	VirtualNetworkGatewaySkuTierBasic VirtualNetworkGatewaySkuTier = "Basic"
1196	// VirtualNetworkGatewaySkuTierHighPerformance ...
1197	VirtualNetworkGatewaySkuTierHighPerformance VirtualNetworkGatewaySkuTier = "HighPerformance"
1198	// VirtualNetworkGatewaySkuTierStandard ...
1199	VirtualNetworkGatewaySkuTierStandard VirtualNetworkGatewaySkuTier = "Standard"
1200	// VirtualNetworkGatewaySkuTierUltraPerformance ...
1201	VirtualNetworkGatewaySkuTierUltraPerformance VirtualNetworkGatewaySkuTier = "UltraPerformance"
1202	// VirtualNetworkGatewaySkuTierVpnGw1 ...
1203	VirtualNetworkGatewaySkuTierVpnGw1 VirtualNetworkGatewaySkuTier = "VpnGw1"
1204	// VirtualNetworkGatewaySkuTierVpnGw2 ...
1205	VirtualNetworkGatewaySkuTierVpnGw2 VirtualNetworkGatewaySkuTier = "VpnGw2"
1206	// VirtualNetworkGatewaySkuTierVpnGw3 ...
1207	VirtualNetworkGatewaySkuTierVpnGw3 VirtualNetworkGatewaySkuTier = "VpnGw3"
1208)
1209
1210// PossibleVirtualNetworkGatewaySkuTierValues returns an array of possible values for the VirtualNetworkGatewaySkuTier const type.
1211func PossibleVirtualNetworkGatewaySkuTierValues() []VirtualNetworkGatewaySkuTier {
1212	return []VirtualNetworkGatewaySkuTier{VirtualNetworkGatewaySkuTierBasic, VirtualNetworkGatewaySkuTierHighPerformance, VirtualNetworkGatewaySkuTierStandard, VirtualNetworkGatewaySkuTierUltraPerformance, VirtualNetworkGatewaySkuTierVpnGw1, VirtualNetworkGatewaySkuTierVpnGw2, VirtualNetworkGatewaySkuTierVpnGw3}
1213}
1214
1215// VirtualNetworkGatewayType enumerates the values for virtual network gateway type.
1216type VirtualNetworkGatewayType string
1217
1218const (
1219	// VirtualNetworkGatewayTypeExpressRoute ...
1220	VirtualNetworkGatewayTypeExpressRoute VirtualNetworkGatewayType = "ExpressRoute"
1221	// VirtualNetworkGatewayTypeVpn ...
1222	VirtualNetworkGatewayTypeVpn VirtualNetworkGatewayType = "Vpn"
1223)
1224
1225// PossibleVirtualNetworkGatewayTypeValues returns an array of possible values for the VirtualNetworkGatewayType const type.
1226func PossibleVirtualNetworkGatewayTypeValues() []VirtualNetworkGatewayType {
1227	return []VirtualNetworkGatewayType{VirtualNetworkGatewayTypeExpressRoute, VirtualNetworkGatewayTypeVpn}
1228}
1229
1230// VirtualNetworkPeeringState enumerates the values for virtual network peering state.
1231type VirtualNetworkPeeringState string
1232
1233const (
1234	// Connected ...
1235	Connected VirtualNetworkPeeringState = "Connected"
1236	// Disconnected ...
1237	Disconnected VirtualNetworkPeeringState = "Disconnected"
1238	// Initiated ...
1239	Initiated VirtualNetworkPeeringState = "Initiated"
1240)
1241
1242// PossibleVirtualNetworkPeeringStateValues returns an array of possible values for the VirtualNetworkPeeringState const type.
1243func PossibleVirtualNetworkPeeringStateValues() []VirtualNetworkPeeringState {
1244	return []VirtualNetworkPeeringState{Connected, Disconnected, Initiated}
1245}
1246
1247// VpnClientProtocol enumerates the values for vpn client protocol.
1248type VpnClientProtocol string
1249
1250const (
1251	// IkeV2 ...
1252	IkeV2 VpnClientProtocol = "IkeV2"
1253	// SSTP ...
1254	SSTP VpnClientProtocol = "SSTP"
1255)
1256
1257// PossibleVpnClientProtocolValues returns an array of possible values for the VpnClientProtocol const type.
1258func PossibleVpnClientProtocolValues() []VpnClientProtocol {
1259	return []VpnClientProtocol{IkeV2, SSTP}
1260}
1261
1262// VpnType enumerates the values for vpn type.
1263type VpnType string
1264
1265const (
1266	// PolicyBased ...
1267	PolicyBased VpnType = "PolicyBased"
1268	// RouteBased ...
1269	RouteBased VpnType = "RouteBased"
1270)
1271
1272// PossibleVpnTypeValues returns an array of possible values for the VpnType const type.
1273func PossibleVpnTypeValues() []VpnType {
1274	return []VpnType{PolicyBased, RouteBased}
1275}
1276
1277// AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the virtual
1278// network.
1279type AddressSpace struct {
1280	// AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
1281	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
1282}
1283
1284// ApplicationGateway application gateway resource
1285type ApplicationGateway struct {
1286	autorest.Response                   `json:"-"`
1287	*ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`
1288	// Etag - A unique read-only string that changes whenever the resource is updated.
1289	Etag *string `json:"etag,omitempty"`
1290	// ID - Resource ID.
1291	ID *string `json:"id,omitempty"`
1292	// Name - Resource name.
1293	Name *string `json:"name,omitempty"`
1294	// Type - Resource type.
1295	Type *string `json:"type,omitempty"`
1296	// Location - Resource location.
1297	Location *string `json:"location,omitempty"`
1298	// Tags - Resource tags.
1299	Tags map[string]*string `json:"tags"`
1300}
1301
1302// MarshalJSON is the custom marshaler for ApplicationGateway.
1303func (ag ApplicationGateway) MarshalJSON() ([]byte, error) {
1304	objectMap := make(map[string]interface{})
1305	if ag.ApplicationGatewayPropertiesFormat != nil {
1306		objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat
1307	}
1308	if ag.Etag != nil {
1309		objectMap["etag"] = ag.Etag
1310	}
1311	if ag.ID != nil {
1312		objectMap["id"] = ag.ID
1313	}
1314	if ag.Name != nil {
1315		objectMap["name"] = ag.Name
1316	}
1317	if ag.Type != nil {
1318		objectMap["type"] = ag.Type
1319	}
1320	if ag.Location != nil {
1321		objectMap["location"] = ag.Location
1322	}
1323	if ag.Tags != nil {
1324		objectMap["tags"] = ag.Tags
1325	}
1326	return json.Marshal(objectMap)
1327}
1328
1329// UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct.
1330func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error {
1331	var m map[string]*json.RawMessage
1332	err := json.Unmarshal(body, &m)
1333	if err != nil {
1334		return err
1335	}
1336	for k, v := range m {
1337		switch k {
1338		case "properties":
1339			if v != nil {
1340				var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat
1341				err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat)
1342				if err != nil {
1343					return err
1344				}
1345				ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat
1346			}
1347		case "etag":
1348			if v != nil {
1349				var etag string
1350				err = json.Unmarshal(*v, &etag)
1351				if err != nil {
1352					return err
1353				}
1354				ag.Etag = &etag
1355			}
1356		case "id":
1357			if v != nil {
1358				var ID string
1359				err = json.Unmarshal(*v, &ID)
1360				if err != nil {
1361					return err
1362				}
1363				ag.ID = &ID
1364			}
1365		case "name":
1366			if v != nil {
1367				var name string
1368				err = json.Unmarshal(*v, &name)
1369				if err != nil {
1370					return err
1371				}
1372				ag.Name = &name
1373			}
1374		case "type":
1375			if v != nil {
1376				var typeVar string
1377				err = json.Unmarshal(*v, &typeVar)
1378				if err != nil {
1379					return err
1380				}
1381				ag.Type = &typeVar
1382			}
1383		case "location":
1384			if v != nil {
1385				var location string
1386				err = json.Unmarshal(*v, &location)
1387				if err != nil {
1388					return err
1389				}
1390				ag.Location = &location
1391			}
1392		case "tags":
1393			if v != nil {
1394				var tags map[string]*string
1395				err = json.Unmarshal(*v, &tags)
1396				if err != nil {
1397					return err
1398				}
1399				ag.Tags = tags
1400			}
1401		}
1402	}
1403
1404	return nil
1405}
1406
1407// ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway.
1408type ApplicationGatewayAuthenticationCertificate struct {
1409	*ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
1410	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
1411	Name *string `json:"name,omitempty"`
1412	// Etag - A unique read-only string that changes whenever the resource is updated.
1413	Etag *string `json:"etag,omitempty"`
1414	// Type - Type of the resource.
1415	Type *string `json:"type,omitempty"`
1416	// ID - Resource ID.
1417	ID *string `json:"id,omitempty"`
1418}
1419
1420// MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate.
1421func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) {
1422	objectMap := make(map[string]interface{})
1423	if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil {
1424		objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat
1425	}
1426	if agac.Name != nil {
1427		objectMap["name"] = agac.Name
1428	}
1429	if agac.Etag != nil {
1430		objectMap["etag"] = agac.Etag
1431	}
1432	if agac.Type != nil {
1433		objectMap["type"] = agac.Type
1434	}
1435	if agac.ID != nil {
1436		objectMap["id"] = agac.ID
1437	}
1438	return json.Marshal(objectMap)
1439}
1440
1441// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct.
1442func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error {
1443	var m map[string]*json.RawMessage
1444	err := json.Unmarshal(body, &m)
1445	if err != nil {
1446		return err
1447	}
1448	for k, v := range m {
1449		switch k {
1450		case "properties":
1451			if v != nil {
1452				var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat
1453				err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat)
1454				if err != nil {
1455					return err
1456				}
1457				agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat
1458			}
1459		case "name":
1460			if v != nil {
1461				var name string
1462				err = json.Unmarshal(*v, &name)
1463				if err != nil {
1464					return err
1465				}
1466				agac.Name = &name
1467			}
1468		case "etag":
1469			if v != nil {
1470				var etag string
1471				err = json.Unmarshal(*v, &etag)
1472				if err != nil {
1473					return err
1474				}
1475				agac.Etag = &etag
1476			}
1477		case "type":
1478			if v != nil {
1479				var typeVar string
1480				err = json.Unmarshal(*v, &typeVar)
1481				if err != nil {
1482					return err
1483				}
1484				agac.Type = &typeVar
1485			}
1486		case "id":
1487			if v != nil {
1488				var ID string
1489				err = json.Unmarshal(*v, &ID)
1490				if err != nil {
1491					return err
1492				}
1493				agac.ID = &ID
1494			}
1495		}
1496	}
1497
1498	return nil
1499}
1500
1501// ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an
1502// application gateway.
1503type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
1504	// Data - Certificate public data.
1505	Data *string `json:"data,omitempty"`
1506	// ProvisioningState - Provisioning state of the authentication certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
1507	ProvisioningState *string `json:"provisioningState,omitempty"`
1508}
1509
1510// ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service call.
1511type ApplicationGatewayAvailableSslOptions struct {
1512	autorest.Response                                      `json:"-"`
1513	*ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"`
1514	// ID - Resource ID.
1515	ID *string `json:"id,omitempty"`
1516	// Name - Resource name.
1517	Name *string `json:"name,omitempty"`
1518	// Type - Resource type.
1519	Type *string `json:"type,omitempty"`
1520	// Location - Resource location.
1521	Location *string `json:"location,omitempty"`
1522	// Tags - Resource tags.
1523	Tags map[string]*string `json:"tags"`
1524}
1525
1526// MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions.
1527func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) {
1528	objectMap := make(map[string]interface{})
1529	if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil {
1530		objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat
1531	}
1532	if agaso.ID != nil {
1533		objectMap["id"] = agaso.ID
1534	}
1535	if agaso.Name != nil {
1536		objectMap["name"] = agaso.Name
1537	}
1538	if agaso.Type != nil {
1539		objectMap["type"] = agaso.Type
1540	}
1541	if agaso.Location != nil {
1542		objectMap["location"] = agaso.Location
1543	}
1544	if agaso.Tags != nil {
1545		objectMap["tags"] = agaso.Tags
1546	}
1547	return json.Marshal(objectMap)
1548}
1549
1550// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct.
1551func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error {
1552	var m map[string]*json.RawMessage
1553	err := json.Unmarshal(body, &m)
1554	if err != nil {
1555		return err
1556	}
1557	for k, v := range m {
1558		switch k {
1559		case "properties":
1560			if v != nil {
1561				var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat
1562				err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat)
1563				if err != nil {
1564					return err
1565				}
1566				agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat
1567			}
1568		case "id":
1569			if v != nil {
1570				var ID string
1571				err = json.Unmarshal(*v, &ID)
1572				if err != nil {
1573					return err
1574				}
1575				agaso.ID = &ID
1576			}
1577		case "name":
1578			if v != nil {
1579				var name string
1580				err = json.Unmarshal(*v, &name)
1581				if err != nil {
1582					return err
1583				}
1584				agaso.Name = &name
1585			}
1586		case "type":
1587			if v != nil {
1588				var typeVar string
1589				err = json.Unmarshal(*v, &typeVar)
1590				if err != nil {
1591					return err
1592				}
1593				agaso.Type = &typeVar
1594			}
1595		case "location":
1596			if v != nil {
1597				var location string
1598				err = json.Unmarshal(*v, &location)
1599				if err != nil {
1600					return err
1601				}
1602				agaso.Location = &location
1603			}
1604		case "tags":
1605			if v != nil {
1606				var tags map[string]*string
1607				err = json.Unmarshal(*v, &tags)
1608				if err != nil {
1609					return err
1610				}
1611				agaso.Tags = tags
1612			}
1613		}
1614	}
1615
1616	return nil
1617}
1618
1619// ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of ApplicationGatewayAvailableSslOptions
1620type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct {
1621	// PredefinedPolicies - List of available Ssl predefined policy.
1622	PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"`
1623	// DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
1624	DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"`
1625	// AvailableCipherSuites - List of available Ssl cipher suites.
1626	AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"`
1627	// AvailableProtocols - List of available Ssl protocols.
1628	AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"`
1629}
1630
1631// ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API service
1632// call.
1633type ApplicationGatewayAvailableSslPredefinedPolicies struct {
1634	autorest.Response `json:"-"`
1635	// Value - List of available Ssl predefined policy.
1636	Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"`
1637	// NextLink - URL to get the next set of results.
1638	NextLink *string `json:"nextLink,omitempty"`
1639}
1640
1641// ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of
1642// ApplicationGatewaySslPredefinedPolicy values.
1643type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct {
1644	i    int
1645	page ApplicationGatewayAvailableSslPredefinedPoliciesPage
1646}
1647
1648// Next advances to the next value.  If there was an error making
1649// the request the iterator does not advance and the error is returned.
1650func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error {
1651	iter.i++
1652	if iter.i < len(iter.page.Values()) {
1653		return nil
1654	}
1655	err := iter.page.Next()
1656	if err != nil {
1657		iter.i--
1658		return err
1659	}
1660	iter.i = 0
1661	return nil
1662}
1663
1664// NotDone returns true if the enumeration should be started or is not yet complete.
1665func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool {
1666	return iter.page.NotDone() && iter.i < len(iter.page.Values())
1667}
1668
1669// Response returns the raw server response from the last page request.
1670func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
1671	return iter.page.Response()
1672}
1673
1674// Value returns the current value or a zero-initialized value if the
1675// iterator has advanced beyond the end of the collection.
1676func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy {
1677	if !iter.page.NotDone() {
1678		return ApplicationGatewaySslPredefinedPolicy{}
1679	}
1680	return iter.page.Values()[iter.i]
1681}
1682
1683// IsEmpty returns true if the ListResult contains no values.
1684func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool {
1685	return agaspp.Value == nil || len(*agaspp.Value) == 0
1686}
1687
1688// applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results.
1689// It returns nil if no more results exist.
1690func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer() (*http.Request, error) {
1691	if agaspp.NextLink == nil || len(to.String(agaspp.NextLink)) < 1 {
1692		return nil, nil
1693	}
1694	return autorest.Prepare(&http.Request{},
1695		autorest.AsJSON(),
1696		autorest.AsGet(),
1697		autorest.WithBaseURL(to.String(agaspp.NextLink)))
1698}
1699
1700// ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of ApplicationGatewaySslPredefinedPolicy
1701// values.
1702type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct {
1703	fn     func(ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)
1704	agaspp ApplicationGatewayAvailableSslPredefinedPolicies
1705}
1706
1707// Next advances to the next page of values.  If there was an error making
1708// the request the page does not advance and the error is returned.
1709func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error {
1710	next, err := page.fn(page.agaspp)
1711	if err != nil {
1712		return err
1713	}
1714	page.agaspp = next
1715	return nil
1716}
1717
1718// NotDone returns true if the page enumeration should be started or is not yet complete.
1719func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool {
1720	return !page.agaspp.IsEmpty()
1721}
1722
1723// Response returns the raw server response from the last page request.
1724func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
1725	return page.agaspp
1726}
1727
1728// Values returns the slice of values for the current page or nil if there are no values.
1729func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy {
1730	if page.agaspp.IsEmpty() {
1731		return nil
1732	}
1733	return *page.agaspp.Value
1734}
1735
1736// ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API service
1737// call.
1738type ApplicationGatewayAvailableWafRuleSetsResult struct {
1739	autorest.Response `json:"-"`
1740	// Value - The list of application gateway rule sets.
1741	Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"`
1742}
1743
1744// ApplicationGatewayBackendAddress backend address of an application gateway.
1745type ApplicationGatewayBackendAddress struct {
1746	// Fqdn - Fully qualified domain name (FQDN).
1747	Fqdn *string `json:"fqdn,omitempty"`
1748	// IPAddress - IP address
1749	IPAddress *string `json:"ipAddress,omitempty"`
1750}
1751
1752// ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway.
1753type ApplicationGatewayBackendAddressPool struct {
1754	*ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
1755	// Name - Resource that is unique within a resource group. This name can be used to access the resource.
1756	Name *string `json:"name,omitempty"`
1757	// Etag - A unique read-only string that changes whenever the resource is updated.
1758	Etag *string `json:"etag,omitempty"`
1759	// Type - Type of the resource.
1760	Type *string `json:"type,omitempty"`
1761	// ID - Resource ID.
1762	ID *string `json:"id,omitempty"`
1763}
1764
1765// MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool.
1766func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) {
1767	objectMap := make(map[string]interface{})
1768	if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil {
1769		objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat
1770	}
1771	if agbap.Name != nil {
1772		objectMap["name"] = agbap.Name
1773	}
1774	if agbap.Etag != nil {
1775		objectMap["etag"] = agbap.Etag
1776	}
1777	if agbap.Type != nil {
1778		objectMap["type"] = agbap.Type
1779	}
1780	if agbap.ID != nil {
1781		objectMap["id"] = agbap.ID
1782	}
1783	return json.Marshal(objectMap)
1784}
1785
1786// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct.
1787func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error {
1788	var m map[string]*json.RawMessage
1789	err := json.Unmarshal(body, &m)
1790	if err != nil {
1791		return err
1792	}
1793	for k, v := range m {
1794		switch k {
1795		case "properties":
1796			if v != nil {
1797				var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat
1798				err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat)
1799				if err != nil {
1800					return err
1801				}
1802				agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat
1803			}
1804		case "name":
1805			if v != nil {
1806				var name string
1807				err = json.Unmarshal(*v, &name)
1808				if err != nil {
1809					return err
1810				}
1811				agbap.Name = &name
1812			}
1813		case "etag":
1814			if v != nil {
1815				var etag string
1816				err = json.Unmarshal(*v, &etag)
1817				if err != nil {
1818					return err
1819				}
1820				agbap.Etag = &etag
1821			}
1822		case "type":
1823			if v != nil {
1824				var typeVar string
1825				err = json.Unmarshal(*v, &typeVar)
1826				if err != nil {
1827					return err
1828				}
1829				agbap.Type = &typeVar
1830			}
1831		case "id":
1832			if v != nil {
1833				var ID string
1834				err = json.Unmarshal(*v, &ID)
1835				if err != nil {
1836					return err
1837				}
1838				agbap.ID = &ID
1839			}
1840		}
1841	}
1842
1843	return nil
1844}
1845
1846// ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an application
1847// gateway.
1848type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
1849	// BackendIPConfigurations - Collection of references to IPs defined in network interfaces.
1850	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
1851	// BackendAddresses - Backend addresses
1852	BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
1853	// ProvisioningState - Provisioning state of the backend address pool resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
1854	ProvisioningState *string `json:"provisioningState,omitempty"`
1855}
1856
1857// ApplicationGatewayBackendHealth list of ApplicationGatewayBackendHealthPool resources.
1858type ApplicationGatewayBackendHealth struct {
1859	autorest.Response   `json:"-"`
1860	BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"`
1861}
1862
1863// ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings.
1864type ApplicationGatewayBackendHealthHTTPSettings struct {
1865	// BackendHTTPSettings - Reference of an ApplicationGatewayBackendHttpSettings resource.
1866	BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"`
1867	// Servers - List of ApplicationGatewayBackendHealthServer resources.
1868	Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"`
1869}
1870
1871// ApplicationGatewayBackendHealthPool application gateway BackendHealth pool.
1872type ApplicationGatewayBackendHealthPool struct {
1873	// BackendAddressPool - Reference of an ApplicationGatewayBackendAddressPool resource.
1874	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
1875	// BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources.
1876	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
1877}
1878
1879// ApplicationGatewayBackendHealthServer application gateway backendhealth http settings.
1880type ApplicationGatewayBackendHealthServer struct {
1881	// Address - IP address or FQDN of backend server.
1882	Address *string `json:"address,omitempty"`
1883	// IPConfiguration - Reference of IP configuration of backend server.
1884	IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"`
1885	// Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
1886	Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"`
1887}
1888
1889// ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway.
1890type ApplicationGatewayBackendHTTPSettings struct {
1891	*ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"`
1892	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
1893	Name *string `json:"name,omitempty"`
1894	// Etag - A unique read-only string that changes whenever the resource is updated.
1895	Etag *string `json:"etag,omitempty"`
1896	// Type - Type of the resource.
1897	Type *string `json:"type,omitempty"`
1898	// ID - Resource ID.
1899	ID *string `json:"id,omitempty"`
1900}
1901
1902// MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings.
1903func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) {
1904	objectMap := make(map[string]interface{})
1905	if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil {
1906		objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat
1907	}
1908	if agbhs.Name != nil {
1909		objectMap["name"] = agbhs.Name
1910	}
1911	if agbhs.Etag != nil {
1912		objectMap["etag"] = agbhs.Etag
1913	}
1914	if agbhs.Type != nil {
1915		objectMap["type"] = agbhs.Type
1916	}
1917	if agbhs.ID != nil {
1918		objectMap["id"] = agbhs.ID
1919	}
1920	return json.Marshal(objectMap)
1921}
1922
1923// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct.
1924func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error {
1925	var m map[string]*json.RawMessage
1926	err := json.Unmarshal(body, &m)
1927	if err != nil {
1928		return err
1929	}
1930	for k, v := range m {
1931		switch k {
1932		case "properties":
1933			if v != nil {
1934				var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat
1935				err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat)
1936				if err != nil {
1937					return err
1938				}
1939				agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat
1940			}
1941		case "name":
1942			if v != nil {
1943				var name string
1944				err = json.Unmarshal(*v, &name)
1945				if err != nil {
1946					return err
1947				}
1948				agbhs.Name = &name
1949			}
1950		case "etag":
1951			if v != nil {
1952				var etag string
1953				err = json.Unmarshal(*v, &etag)
1954				if err != nil {
1955					return err
1956				}
1957				agbhs.Etag = &etag
1958			}
1959		case "type":
1960			if v != nil {
1961				var typeVar string
1962				err = json.Unmarshal(*v, &typeVar)
1963				if err != nil {
1964					return err
1965				}
1966				agbhs.Type = &typeVar
1967			}
1968		case "id":
1969			if v != nil {
1970				var ID string
1971				err = json.Unmarshal(*v, &ID)
1972				if err != nil {
1973					return err
1974				}
1975				agbhs.ID = &ID
1976			}
1977		}
1978	}
1979
1980	return nil
1981}
1982
1983// ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an
1984// application gateway.
1985type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct {
1986	// Port - Port
1987	Port *int32 `json:"port,omitempty"`
1988	// Protocol - Protocol. Possible values include: 'HTTP', 'HTTPS'
1989	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
1990	// CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled'
1991	CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`
1992	// 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.
1993	RequestTimeout *int32 `json:"requestTimeout,omitempty"`
1994	// Probe - Probe resource of an application gateway.
1995	Probe *SubResource `json:"probe,omitempty"`
1996	// AuthenticationCertificates - Array of references to application gateway authentication certificates.
1997	AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"`
1998	// ConnectionDraining - Connection draining of the backend http settings resource.
1999	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`
2000	// HostName - Host header to be sent to the backend servers.
2001	HostName *string `json:"hostName,omitempty"`
2002	// PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false.
2003	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`
2004	// AffinityCookieName - Cookie name to use for the affinity cookie.
2005	AffinityCookieName *string `json:"affinityCookieName,omitempty"`
2006	// ProbeEnabled - Whether the probe is enabled. Default value is false.
2007	ProbeEnabled *bool `json:"probeEnabled,omitempty"`
2008	// Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null.
2009	Path *string `json:"path,omitempty"`
2010	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2011	ProvisioningState *string `json:"provisioningState,omitempty"`
2012}
2013
2014// ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to be
2015// active for a specified time after the backend server got removed from the configuration.
2016type ApplicationGatewayConnectionDraining struct {
2017	// Enabled - Whether connection draining is enabled or not.
2018	Enabled *bool `json:"enabled,omitempty"`
2019	// DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds.
2020	DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"`
2021}
2022
2023// ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire rule group.
2024type ApplicationGatewayFirewallDisabledRuleGroup struct {
2025	// RuleGroupName - The name of the rule group that will be disabled.
2026	RuleGroupName *string `json:"ruleGroupName,omitempty"`
2027	// Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
2028	Rules *[]int32 `json:"rules,omitempty"`
2029}
2030
2031// ApplicationGatewayFirewallRule a web application firewall rule.
2032type ApplicationGatewayFirewallRule struct {
2033	// RuleID - The identifier of the web application firewall rule.
2034	RuleID *int32 `json:"ruleId,omitempty"`
2035	// Description - The description of the web application firewall rule.
2036	Description *string `json:"description,omitempty"`
2037}
2038
2039// ApplicationGatewayFirewallRuleGroup a web application firewall rule group.
2040type ApplicationGatewayFirewallRuleGroup struct {
2041	// RuleGroupName - The name of the web application firewall rule group.
2042	RuleGroupName *string `json:"ruleGroupName,omitempty"`
2043	// Description - The description of the web application firewall rule group.
2044	Description *string `json:"description,omitempty"`
2045	// Rules - The rules of the web application firewall rule group.
2046	Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"`
2047}
2048
2049// ApplicationGatewayFirewallRuleSet a web application firewall rule set.
2050type ApplicationGatewayFirewallRuleSet struct {
2051	*ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"`
2052	// ID - Resource ID.
2053	ID *string `json:"id,omitempty"`
2054	// Name - Resource name.
2055	Name *string `json:"name,omitempty"`
2056	// Type - Resource type.
2057	Type *string `json:"type,omitempty"`
2058	// Location - Resource location.
2059	Location *string `json:"location,omitempty"`
2060	// Tags - Resource tags.
2061	Tags map[string]*string `json:"tags"`
2062}
2063
2064// MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet.
2065func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) {
2066	objectMap := make(map[string]interface{})
2067	if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil {
2068		objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat
2069	}
2070	if agfrs.ID != nil {
2071		objectMap["id"] = agfrs.ID
2072	}
2073	if agfrs.Name != nil {
2074		objectMap["name"] = agfrs.Name
2075	}
2076	if agfrs.Type != nil {
2077		objectMap["type"] = agfrs.Type
2078	}
2079	if agfrs.Location != nil {
2080		objectMap["location"] = agfrs.Location
2081	}
2082	if agfrs.Tags != nil {
2083		objectMap["tags"] = agfrs.Tags
2084	}
2085	return json.Marshal(objectMap)
2086}
2087
2088// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct.
2089func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error {
2090	var m map[string]*json.RawMessage
2091	err := json.Unmarshal(body, &m)
2092	if err != nil {
2093		return err
2094	}
2095	for k, v := range m {
2096		switch k {
2097		case "properties":
2098			if v != nil {
2099				var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat
2100				err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat)
2101				if err != nil {
2102					return err
2103				}
2104				agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat
2105			}
2106		case "id":
2107			if v != nil {
2108				var ID string
2109				err = json.Unmarshal(*v, &ID)
2110				if err != nil {
2111					return err
2112				}
2113				agfrs.ID = &ID
2114			}
2115		case "name":
2116			if v != nil {
2117				var name string
2118				err = json.Unmarshal(*v, &name)
2119				if err != nil {
2120					return err
2121				}
2122				agfrs.Name = &name
2123			}
2124		case "type":
2125			if v != nil {
2126				var typeVar string
2127				err = json.Unmarshal(*v, &typeVar)
2128				if err != nil {
2129					return err
2130				}
2131				agfrs.Type = &typeVar
2132			}
2133		case "location":
2134			if v != nil {
2135				var location string
2136				err = json.Unmarshal(*v, &location)
2137				if err != nil {
2138					return err
2139				}
2140				agfrs.Location = &location
2141			}
2142		case "tags":
2143			if v != nil {
2144				var tags map[string]*string
2145				err = json.Unmarshal(*v, &tags)
2146				if err != nil {
2147					return err
2148				}
2149				agfrs.Tags = tags
2150			}
2151		}
2152	}
2153
2154	return nil
2155}
2156
2157// ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set.
2158type ApplicationGatewayFirewallRuleSetPropertiesFormat struct {
2159	// ProvisioningState - The provisioning state of the web application firewall rule set.
2160	ProvisioningState *string `json:"provisioningState,omitempty"`
2161	// RuleSetType - The type of the web application firewall rule set.
2162	RuleSetType *string `json:"ruleSetType,omitempty"`
2163	// RuleSetVersion - The version of the web application firewall rule set type.
2164	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
2165	// RuleGroups - The rule groups of the web application firewall rule set.
2166	RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"`
2167}
2168
2169// ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway.
2170type ApplicationGatewayFrontendIPConfiguration struct {
2171	*ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
2172	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2173	Name *string `json:"name,omitempty"`
2174	// Etag - A unique read-only string that changes whenever the resource is updated.
2175	Etag *string `json:"etag,omitempty"`
2176	// Type - Type of the resource.
2177	Type *string `json:"type,omitempty"`
2178	// ID - Resource ID.
2179	ID *string `json:"id,omitempty"`
2180}
2181
2182// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration.
2183func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) {
2184	objectMap := make(map[string]interface{})
2185	if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil {
2186		objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat
2187	}
2188	if agfic.Name != nil {
2189		objectMap["name"] = agfic.Name
2190	}
2191	if agfic.Etag != nil {
2192		objectMap["etag"] = agfic.Etag
2193	}
2194	if agfic.Type != nil {
2195		objectMap["type"] = agfic.Type
2196	}
2197	if agfic.ID != nil {
2198		objectMap["id"] = agfic.ID
2199	}
2200	return json.Marshal(objectMap)
2201}
2202
2203// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct.
2204func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error {
2205	var m map[string]*json.RawMessage
2206	err := json.Unmarshal(body, &m)
2207	if err != nil {
2208		return err
2209	}
2210	for k, v := range m {
2211		switch k {
2212		case "properties":
2213			if v != nil {
2214				var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat
2215				err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat)
2216				if err != nil {
2217					return err
2218				}
2219				agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat
2220			}
2221		case "name":
2222			if v != nil {
2223				var name string
2224				err = json.Unmarshal(*v, &name)
2225				if err != nil {
2226					return err
2227				}
2228				agfic.Name = &name
2229			}
2230		case "etag":
2231			if v != nil {
2232				var etag string
2233				err = json.Unmarshal(*v, &etag)
2234				if err != nil {
2235					return err
2236				}
2237				agfic.Etag = &etag
2238			}
2239		case "type":
2240			if v != nil {
2241				var typeVar string
2242				err = json.Unmarshal(*v, &typeVar)
2243				if err != nil {
2244					return err
2245				}
2246				agfic.Type = &typeVar
2247			}
2248		case "id":
2249			if v != nil {
2250				var ID string
2251				err = json.Unmarshal(*v, &ID)
2252				if err != nil {
2253					return err
2254				}
2255				agfic.ID = &ID
2256			}
2257		}
2258	}
2259
2260	return nil
2261}
2262
2263// ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an
2264// application gateway.
2265type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
2266	// PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration.
2267	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
2268	// PrivateIPAllocationMethod - PrivateIP allocation method. Possible values include: 'Static', 'Dynamic'
2269	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
2270	// Subnet - Reference of the subnet resource.
2271	Subnet *SubResource `json:"subnet,omitempty"`
2272	// PublicIPAddress - Reference of the PublicIP resource.
2273	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
2274	// ProvisioningState - Provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2275	ProvisioningState *string `json:"provisioningState,omitempty"`
2276}
2277
2278// ApplicationGatewayFrontendPort frontend port of an application gateway.
2279type ApplicationGatewayFrontendPort struct {
2280	*ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
2281	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2282	Name *string `json:"name,omitempty"`
2283	// Etag - A unique read-only string that changes whenever the resource is updated.
2284	Etag *string `json:"etag,omitempty"`
2285	// Type - Type of the resource.
2286	Type *string `json:"type,omitempty"`
2287	// ID - Resource ID.
2288	ID *string `json:"id,omitempty"`
2289}
2290
2291// MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort.
2292func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) {
2293	objectMap := make(map[string]interface{})
2294	if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil {
2295		objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat
2296	}
2297	if agfp.Name != nil {
2298		objectMap["name"] = agfp.Name
2299	}
2300	if agfp.Etag != nil {
2301		objectMap["etag"] = agfp.Etag
2302	}
2303	if agfp.Type != nil {
2304		objectMap["type"] = agfp.Type
2305	}
2306	if agfp.ID != nil {
2307		objectMap["id"] = agfp.ID
2308	}
2309	return json.Marshal(objectMap)
2310}
2311
2312// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct.
2313func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error {
2314	var m map[string]*json.RawMessage
2315	err := json.Unmarshal(body, &m)
2316	if err != nil {
2317		return err
2318	}
2319	for k, v := range m {
2320		switch k {
2321		case "properties":
2322			if v != nil {
2323				var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat
2324				err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat)
2325				if err != nil {
2326					return err
2327				}
2328				agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat
2329			}
2330		case "name":
2331			if v != nil {
2332				var name string
2333				err = json.Unmarshal(*v, &name)
2334				if err != nil {
2335					return err
2336				}
2337				agfp.Name = &name
2338			}
2339		case "etag":
2340			if v != nil {
2341				var etag string
2342				err = json.Unmarshal(*v, &etag)
2343				if err != nil {
2344					return err
2345				}
2346				agfp.Etag = &etag
2347			}
2348		case "type":
2349			if v != nil {
2350				var typeVar string
2351				err = json.Unmarshal(*v, &typeVar)
2352				if err != nil {
2353					return err
2354				}
2355				agfp.Type = &typeVar
2356			}
2357		case "id":
2358			if v != nil {
2359				var ID string
2360				err = json.Unmarshal(*v, &ID)
2361				if err != nil {
2362					return err
2363				}
2364				agfp.ID = &ID
2365			}
2366		}
2367	}
2368
2369	return nil
2370}
2371
2372// ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway.
2373type ApplicationGatewayFrontendPortPropertiesFormat struct {
2374	// Port - Frontend port
2375	Port *int32 `json:"port,omitempty"`
2376	// ProvisioningState - Provisioning state of the frontend port resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2377	ProvisioningState *string `json:"provisioningState,omitempty"`
2378}
2379
2380// ApplicationGatewayHTTPListener http listener of an application gateway.
2381type ApplicationGatewayHTTPListener struct {
2382	*ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"`
2383	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2384	Name *string `json:"name,omitempty"`
2385	// Etag - A unique read-only string that changes whenever the resource is updated.
2386	Etag *string `json:"etag,omitempty"`
2387	// Type - Type of the resource.
2388	Type *string `json:"type,omitempty"`
2389	// ID - Resource ID.
2390	ID *string `json:"id,omitempty"`
2391}
2392
2393// MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener.
2394func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) {
2395	objectMap := make(map[string]interface{})
2396	if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil {
2397		objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat
2398	}
2399	if aghl.Name != nil {
2400		objectMap["name"] = aghl.Name
2401	}
2402	if aghl.Etag != nil {
2403		objectMap["etag"] = aghl.Etag
2404	}
2405	if aghl.Type != nil {
2406		objectMap["type"] = aghl.Type
2407	}
2408	if aghl.ID != nil {
2409		objectMap["id"] = aghl.ID
2410	}
2411	return json.Marshal(objectMap)
2412}
2413
2414// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct.
2415func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error {
2416	var m map[string]*json.RawMessage
2417	err := json.Unmarshal(body, &m)
2418	if err != nil {
2419		return err
2420	}
2421	for k, v := range m {
2422		switch k {
2423		case "properties":
2424			if v != nil {
2425				var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat
2426				err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat)
2427				if err != nil {
2428					return err
2429				}
2430				aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat
2431			}
2432		case "name":
2433			if v != nil {
2434				var name string
2435				err = json.Unmarshal(*v, &name)
2436				if err != nil {
2437					return err
2438				}
2439				aghl.Name = &name
2440			}
2441		case "etag":
2442			if v != nil {
2443				var etag string
2444				err = json.Unmarshal(*v, &etag)
2445				if err != nil {
2446					return err
2447				}
2448				aghl.Etag = &etag
2449			}
2450		case "type":
2451			if v != nil {
2452				var typeVar string
2453				err = json.Unmarshal(*v, &typeVar)
2454				if err != nil {
2455					return err
2456				}
2457				aghl.Type = &typeVar
2458			}
2459		case "id":
2460			if v != nil {
2461				var ID string
2462				err = json.Unmarshal(*v, &ID)
2463				if err != nil {
2464					return err
2465				}
2466				aghl.ID = &ID
2467			}
2468		}
2469	}
2470
2471	return nil
2472}
2473
2474// ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway.
2475type ApplicationGatewayHTTPListenerPropertiesFormat struct {
2476	// FrontendIPConfiguration - Frontend IP configuration resource of an application gateway.
2477	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
2478	// FrontendPort - Frontend port resource of an application gateway.
2479	FrontendPort *SubResource `json:"frontendPort,omitempty"`
2480	// Protocol - Protocol. Possible values include: 'HTTP', 'HTTPS'
2481	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
2482	// HostName - Host name of HTTP listener.
2483	HostName *string `json:"hostName,omitempty"`
2484	// SslCertificate - SSL certificate resource of an application gateway.
2485	SslCertificate *SubResource `json:"sslCertificate,omitempty"`
2486	// RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting.
2487	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`
2488	// ProvisioningState - Provisioning state of the HTTP listener resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2489	ProvisioningState *string `json:"provisioningState,omitempty"`
2490}
2491
2492// ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1 private
2493// IP configuration is allowed.
2494type ApplicationGatewayIPConfiguration struct {
2495	*ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
2496	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2497	Name *string `json:"name,omitempty"`
2498	// Etag - A unique read-only string that changes whenever the resource is updated.
2499	Etag *string `json:"etag,omitempty"`
2500	// Type - Type of the resource.
2501	Type *string `json:"type,omitempty"`
2502	// ID - Resource ID.
2503	ID *string `json:"id,omitempty"`
2504}
2505
2506// MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration.
2507func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
2508	objectMap := make(map[string]interface{})
2509	if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil {
2510		objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat
2511	}
2512	if agic.Name != nil {
2513		objectMap["name"] = agic.Name
2514	}
2515	if agic.Etag != nil {
2516		objectMap["etag"] = agic.Etag
2517	}
2518	if agic.Type != nil {
2519		objectMap["type"] = agic.Type
2520	}
2521	if agic.ID != nil {
2522		objectMap["id"] = agic.ID
2523	}
2524	return json.Marshal(objectMap)
2525}
2526
2527// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayIPConfiguration struct.
2528func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
2529	var m map[string]*json.RawMessage
2530	err := json.Unmarshal(body, &m)
2531	if err != nil {
2532		return err
2533	}
2534	for k, v := range m {
2535		switch k {
2536		case "properties":
2537			if v != nil {
2538				var applicationGatewayIPConfigurationPropertiesFormat ApplicationGatewayIPConfigurationPropertiesFormat
2539				err = json.Unmarshal(*v, &applicationGatewayIPConfigurationPropertiesFormat)
2540				if err != nil {
2541					return err
2542				}
2543				agic.ApplicationGatewayIPConfigurationPropertiesFormat = &applicationGatewayIPConfigurationPropertiesFormat
2544			}
2545		case "name":
2546			if v != nil {
2547				var name string
2548				err = json.Unmarshal(*v, &name)
2549				if err != nil {
2550					return err
2551				}
2552				agic.Name = &name
2553			}
2554		case "etag":
2555			if v != nil {
2556				var etag string
2557				err = json.Unmarshal(*v, &etag)
2558				if err != nil {
2559					return err
2560				}
2561				agic.Etag = &etag
2562			}
2563		case "type":
2564			if v != nil {
2565				var typeVar string
2566				err = json.Unmarshal(*v, &typeVar)
2567				if err != nil {
2568					return err
2569				}
2570				agic.Type = &typeVar
2571			}
2572		case "id":
2573			if v != nil {
2574				var ID string
2575				err = json.Unmarshal(*v, &ID)
2576				if err != nil {
2577					return err
2578				}
2579				agic.ID = &ID
2580			}
2581		}
2582	}
2583
2584	return nil
2585}
2586
2587// ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application gateway.
2588type ApplicationGatewayIPConfigurationPropertiesFormat struct {
2589	// Subnet - Reference of the subnet resource. A subnet from where application gateway gets its private address.
2590	Subnet *SubResource `json:"subnet,omitempty"`
2591	// ProvisioningState - Provisioning state of the application gateway subnet resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2592	ProvisioningState *string `json:"provisioningState,omitempty"`
2593}
2594
2595// ApplicationGatewayListResult response for ListApplicationGateways API service call.
2596type ApplicationGatewayListResult struct {
2597	autorest.Response `json:"-"`
2598	// Value - List of an application gateways in a resource group.
2599	Value *[]ApplicationGateway `json:"value,omitempty"`
2600	// NextLink - URL to get the next set of results.
2601	NextLink *string `json:"nextLink,omitempty"`
2602}
2603
2604// ApplicationGatewayListResultIterator provides access to a complete listing of ApplicationGateway values.
2605type ApplicationGatewayListResultIterator struct {
2606	i    int
2607	page ApplicationGatewayListResultPage
2608}
2609
2610// Next advances to the next value.  If there was an error making
2611// the request the iterator does not advance and the error is returned.
2612func (iter *ApplicationGatewayListResultIterator) Next() error {
2613	iter.i++
2614	if iter.i < len(iter.page.Values()) {
2615		return nil
2616	}
2617	err := iter.page.Next()
2618	if err != nil {
2619		iter.i--
2620		return err
2621	}
2622	iter.i = 0
2623	return nil
2624}
2625
2626// NotDone returns true if the enumeration should be started or is not yet complete.
2627func (iter ApplicationGatewayListResultIterator) NotDone() bool {
2628	return iter.page.NotDone() && iter.i < len(iter.page.Values())
2629}
2630
2631// Response returns the raw server response from the last page request.
2632func (iter ApplicationGatewayListResultIterator) Response() ApplicationGatewayListResult {
2633	return iter.page.Response()
2634}
2635
2636// Value returns the current value or a zero-initialized value if the
2637// iterator has advanced beyond the end of the collection.
2638func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway {
2639	if !iter.page.NotDone() {
2640		return ApplicationGateway{}
2641	}
2642	return iter.page.Values()[iter.i]
2643}
2644
2645// IsEmpty returns true if the ListResult contains no values.
2646func (aglr ApplicationGatewayListResult) IsEmpty() bool {
2647	return aglr.Value == nil || len(*aglr.Value) == 0
2648}
2649
2650// applicationGatewayListResultPreparer prepares a request to retrieve the next set of results.
2651// It returns nil if no more results exist.
2652func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer() (*http.Request, error) {
2653	if aglr.NextLink == nil || len(to.String(aglr.NextLink)) < 1 {
2654		return nil, nil
2655	}
2656	return autorest.Prepare(&http.Request{},
2657		autorest.AsJSON(),
2658		autorest.AsGet(),
2659		autorest.WithBaseURL(to.String(aglr.NextLink)))
2660}
2661
2662// ApplicationGatewayListResultPage contains a page of ApplicationGateway values.
2663type ApplicationGatewayListResultPage struct {
2664	fn   func(ApplicationGatewayListResult) (ApplicationGatewayListResult, error)
2665	aglr ApplicationGatewayListResult
2666}
2667
2668// Next advances to the next page of values.  If there was an error making
2669// the request the page does not advance and the error is returned.
2670func (page *ApplicationGatewayListResultPage) Next() error {
2671	next, err := page.fn(page.aglr)
2672	if err != nil {
2673		return err
2674	}
2675	page.aglr = next
2676	return nil
2677}
2678
2679// NotDone returns true if the page enumeration should be started or is not yet complete.
2680func (page ApplicationGatewayListResultPage) NotDone() bool {
2681	return !page.aglr.IsEmpty()
2682}
2683
2684// Response returns the raw server response from the last page request.
2685func (page ApplicationGatewayListResultPage) Response() ApplicationGatewayListResult {
2686	return page.aglr
2687}
2688
2689// Values returns the slice of values for the current page or nil if there are no values.
2690func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway {
2691	if page.aglr.IsEmpty() {
2692		return nil
2693	}
2694	return *page.aglr.Value
2695}
2696
2697// ApplicationGatewayPathRule path rule of URL path map of an application gateway.
2698type ApplicationGatewayPathRule struct {
2699	*ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
2700	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2701	Name *string `json:"name,omitempty"`
2702	// Etag - A unique read-only string that changes whenever the resource is updated.
2703	Etag *string `json:"etag,omitempty"`
2704	// Type - Type of the resource.
2705	Type *string `json:"type,omitempty"`
2706	// ID - Resource ID.
2707	ID *string `json:"id,omitempty"`
2708}
2709
2710// MarshalJSON is the custom marshaler for ApplicationGatewayPathRule.
2711func (agpr ApplicationGatewayPathRule) MarshalJSON() ([]byte, error) {
2712	objectMap := make(map[string]interface{})
2713	if agpr.ApplicationGatewayPathRulePropertiesFormat != nil {
2714		objectMap["properties"] = agpr.ApplicationGatewayPathRulePropertiesFormat
2715	}
2716	if agpr.Name != nil {
2717		objectMap["name"] = agpr.Name
2718	}
2719	if agpr.Etag != nil {
2720		objectMap["etag"] = agpr.Etag
2721	}
2722	if agpr.Type != nil {
2723		objectMap["type"] = agpr.Type
2724	}
2725	if agpr.ID != nil {
2726		objectMap["id"] = agpr.ID
2727	}
2728	return json.Marshal(objectMap)
2729}
2730
2731// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPathRule struct.
2732func (agpr *ApplicationGatewayPathRule) UnmarshalJSON(body []byte) error {
2733	var m map[string]*json.RawMessage
2734	err := json.Unmarshal(body, &m)
2735	if err != nil {
2736		return err
2737	}
2738	for k, v := range m {
2739		switch k {
2740		case "properties":
2741			if v != nil {
2742				var applicationGatewayPathRulePropertiesFormat ApplicationGatewayPathRulePropertiesFormat
2743				err = json.Unmarshal(*v, &applicationGatewayPathRulePropertiesFormat)
2744				if err != nil {
2745					return err
2746				}
2747				agpr.ApplicationGatewayPathRulePropertiesFormat = &applicationGatewayPathRulePropertiesFormat
2748			}
2749		case "name":
2750			if v != nil {
2751				var name string
2752				err = json.Unmarshal(*v, &name)
2753				if err != nil {
2754					return err
2755				}
2756				agpr.Name = &name
2757			}
2758		case "etag":
2759			if v != nil {
2760				var etag string
2761				err = json.Unmarshal(*v, &etag)
2762				if err != nil {
2763					return err
2764				}
2765				agpr.Etag = &etag
2766			}
2767		case "type":
2768			if v != nil {
2769				var typeVar string
2770				err = json.Unmarshal(*v, &typeVar)
2771				if err != nil {
2772					return err
2773				}
2774				agpr.Type = &typeVar
2775			}
2776		case "id":
2777			if v != nil {
2778				var ID string
2779				err = json.Unmarshal(*v, &ID)
2780				if err != nil {
2781					return err
2782				}
2783				agpr.ID = &ID
2784			}
2785		}
2786	}
2787
2788	return nil
2789}
2790
2791// ApplicationGatewayPathRulePropertiesFormat properties of path rule of an application gateway.
2792type ApplicationGatewayPathRulePropertiesFormat struct {
2793	// Paths - Path rules of URL path map.
2794	Paths *[]string `json:"paths,omitempty"`
2795	// BackendAddressPool - Backend address pool resource of URL path map path rule.
2796	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
2797	// BackendHTTPSettings - Backend http settings resource of URL path map path rule.
2798	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
2799	// RedirectConfiguration - Redirect configuration resource of URL path map path rule.
2800	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
2801	// ProvisioningState - Path rule of URL path map resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2802	ProvisioningState *string `json:"provisioningState,omitempty"`
2803}
2804
2805// ApplicationGatewayProbe probe of the application gateway.
2806type ApplicationGatewayProbe struct {
2807	*ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
2808	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2809	Name *string `json:"name,omitempty"`
2810	// Etag - A unique read-only string that changes whenever the resource is updated.
2811	Etag *string `json:"etag,omitempty"`
2812	// Type - Type of the resource.
2813	Type *string `json:"type,omitempty"`
2814	// ID - Resource ID.
2815	ID *string `json:"id,omitempty"`
2816}
2817
2818// MarshalJSON is the custom marshaler for ApplicationGatewayProbe.
2819func (agp ApplicationGatewayProbe) MarshalJSON() ([]byte, error) {
2820	objectMap := make(map[string]interface{})
2821	if agp.ApplicationGatewayProbePropertiesFormat != nil {
2822		objectMap["properties"] = agp.ApplicationGatewayProbePropertiesFormat
2823	}
2824	if agp.Name != nil {
2825		objectMap["name"] = agp.Name
2826	}
2827	if agp.Etag != nil {
2828		objectMap["etag"] = agp.Etag
2829	}
2830	if agp.Type != nil {
2831		objectMap["type"] = agp.Type
2832	}
2833	if agp.ID != nil {
2834		objectMap["id"] = agp.ID
2835	}
2836	return json.Marshal(objectMap)
2837}
2838
2839// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayProbe struct.
2840func (agp *ApplicationGatewayProbe) UnmarshalJSON(body []byte) error {
2841	var m map[string]*json.RawMessage
2842	err := json.Unmarshal(body, &m)
2843	if err != nil {
2844		return err
2845	}
2846	for k, v := range m {
2847		switch k {
2848		case "properties":
2849			if v != nil {
2850				var applicationGatewayProbePropertiesFormat ApplicationGatewayProbePropertiesFormat
2851				err = json.Unmarshal(*v, &applicationGatewayProbePropertiesFormat)
2852				if err != nil {
2853					return err
2854				}
2855				agp.ApplicationGatewayProbePropertiesFormat = &applicationGatewayProbePropertiesFormat
2856			}
2857		case "name":
2858			if v != nil {
2859				var name string
2860				err = json.Unmarshal(*v, &name)
2861				if err != nil {
2862					return err
2863				}
2864				agp.Name = &name
2865			}
2866		case "etag":
2867			if v != nil {
2868				var etag string
2869				err = json.Unmarshal(*v, &etag)
2870				if err != nil {
2871					return err
2872				}
2873				agp.Etag = &etag
2874			}
2875		case "type":
2876			if v != nil {
2877				var typeVar string
2878				err = json.Unmarshal(*v, &typeVar)
2879				if err != nil {
2880					return err
2881				}
2882				agp.Type = &typeVar
2883			}
2884		case "id":
2885			if v != nil {
2886				var ID string
2887				err = json.Unmarshal(*v, &ID)
2888				if err != nil {
2889					return err
2890				}
2891				agp.ID = &ID
2892			}
2893		}
2894	}
2895
2896	return nil
2897}
2898
2899// ApplicationGatewayProbeHealthResponseMatch application gateway probe health response match
2900type ApplicationGatewayProbeHealthResponseMatch struct {
2901	// Body - Body that must be contained in the health response. Default value is empty.
2902	Body *string `json:"body,omitempty"`
2903	// StatusCodes - Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
2904	StatusCodes *[]string `json:"statusCodes,omitempty"`
2905}
2906
2907// ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway.
2908type ApplicationGatewayProbePropertiesFormat struct {
2909	// Protocol - Protocol. Possible values include: 'HTTP', 'HTTPS'
2910	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
2911	// Host - Host name to send the probe to.
2912	Host *string `json:"host,omitempty"`
2913	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>
2914	Path *string `json:"path,omitempty"`
2915	// Interval - The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values are from 1 second to 86400 seconds.
2916	Interval *int32 `json:"interval,omitempty"`
2917	// 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.
2918	Timeout *int32 `json:"timeout,omitempty"`
2919	// 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.
2920	UnhealthyThreshold *int32 `json:"unhealthyThreshold,omitempty"`
2921	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
2922	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
2923	// MinServers - Minimum number of servers that are always marked healthy. Default value is 0.
2924	MinServers *int32 `json:"minServers,omitempty"`
2925	// Match - Criterion for classifying a healthy probe response.
2926	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
2927	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2928	ProvisioningState *string `json:"provisioningState,omitempty"`
2929}
2930
2931// ApplicationGatewayPropertiesFormat properties of the application gateway.
2932type ApplicationGatewayPropertiesFormat struct {
2933	// Sku - SKU of the application gateway resource.
2934	Sku *ApplicationGatewaySku `json:"sku,omitempty"`
2935	// SslPolicy - SSL policy of the application gateway resource.
2936	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`
2937	// OperationalState - Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping'
2938	OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"`
2939	// GatewayIPConfigurations - Subnets of application the gateway resource.
2940	GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"`
2941	// AuthenticationCertificates - Authentication certificates of the application gateway resource.
2942	AuthenticationCertificates *[]ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`
2943	// SslCertificates - SSL certificates of the application gateway resource.
2944	SslCertificates *[]ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`
2945	// FrontendIPConfigurations - Frontend IP addresses of the application gateway resource.
2946	FrontendIPConfigurations *[]ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
2947	// FrontendPorts - Frontend ports of the application gateway resource.
2948	FrontendPorts *[]ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`
2949	// Probes - Probes of the application gateway resource.
2950	Probes *[]ApplicationGatewayProbe `json:"probes,omitempty"`
2951	// BackendAddressPools - Backend address pool of the application gateway resource.
2952	BackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`
2953	// BackendHTTPSettingsCollection - Backend http settings of the application gateway resource.
2954	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
2955	// HTTPListeners - Http listeners of the application gateway resource.
2956	HTTPListeners *[]ApplicationGatewayHTTPListener `json:"httpListeners,omitempty"`
2957	// URLPathMaps - URL path map of the application gateway resource.
2958	URLPathMaps *[]ApplicationGatewayURLPathMap `json:"urlPathMaps,omitempty"`
2959	// RequestRoutingRules - Request routing rules of the application gateway resource.
2960	RequestRoutingRules *[]ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`
2961	// RedirectConfigurations - Redirect configurations of the application gateway resource.
2962	RedirectConfigurations *[]ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`
2963	// WebApplicationFirewallConfiguration - Web application firewall configuration.
2964	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
2965	// EnableHTTP2 - Whether HTTP2 is enabled on the application gateway resource.
2966	EnableHTTP2 *bool `json:"enableHttp2,omitempty"`
2967	// ResourceGUID - Resource GUID property of the application gateway resource.
2968	ResourceGUID *string `json:"resourceGuid,omitempty"`
2969	// ProvisioningState - Provisioning state of the application gateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
2970	ProvisioningState *string `json:"provisioningState,omitempty"`
2971}
2972
2973// ApplicationGatewayRedirectConfiguration redirect configuration of an application gateway.
2974type ApplicationGatewayRedirectConfiguration struct {
2975	*ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
2976	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
2977	Name *string `json:"name,omitempty"`
2978	// Etag - A unique read-only string that changes whenever the resource is updated.
2979	Etag *string `json:"etag,omitempty"`
2980	// Type - Type of the resource.
2981	Type *string `json:"type,omitempty"`
2982	// ID - Resource ID.
2983	ID *string `json:"id,omitempty"`
2984}
2985
2986// MarshalJSON is the custom marshaler for ApplicationGatewayRedirectConfiguration.
2987func (agrc ApplicationGatewayRedirectConfiguration) MarshalJSON() ([]byte, error) {
2988	objectMap := make(map[string]interface{})
2989	if agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat != nil {
2990		objectMap["properties"] = agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat
2991	}
2992	if agrc.Name != nil {
2993		objectMap["name"] = agrc.Name
2994	}
2995	if agrc.Etag != nil {
2996		objectMap["etag"] = agrc.Etag
2997	}
2998	if agrc.Type != nil {
2999		objectMap["type"] = agrc.Type
3000	}
3001	if agrc.ID != nil {
3002		objectMap["id"] = agrc.ID
3003	}
3004	return json.Marshal(objectMap)
3005}
3006
3007// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRedirectConfiguration struct.
3008func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) error {
3009	var m map[string]*json.RawMessage
3010	err := json.Unmarshal(body, &m)
3011	if err != nil {
3012		return err
3013	}
3014	for k, v := range m {
3015		switch k {
3016		case "properties":
3017			if v != nil {
3018				var applicationGatewayRedirectConfigurationPropertiesFormat ApplicationGatewayRedirectConfigurationPropertiesFormat
3019				err = json.Unmarshal(*v, &applicationGatewayRedirectConfigurationPropertiesFormat)
3020				if err != nil {
3021					return err
3022				}
3023				agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat = &applicationGatewayRedirectConfigurationPropertiesFormat
3024			}
3025		case "name":
3026			if v != nil {
3027				var name string
3028				err = json.Unmarshal(*v, &name)
3029				if err != nil {
3030					return err
3031				}
3032				agrc.Name = &name
3033			}
3034		case "etag":
3035			if v != nil {
3036				var etag string
3037				err = json.Unmarshal(*v, &etag)
3038				if err != nil {
3039					return err
3040				}
3041				agrc.Etag = &etag
3042			}
3043		case "type":
3044			if v != nil {
3045				var typeVar string
3046				err = json.Unmarshal(*v, &typeVar)
3047				if err != nil {
3048					return err
3049				}
3050				agrc.Type = &typeVar
3051			}
3052		case "id":
3053			if v != nil {
3054				var ID string
3055				err = json.Unmarshal(*v, &ID)
3056				if err != nil {
3057					return err
3058				}
3059				agrc.ID = &ID
3060			}
3061		}
3062	}
3063
3064	return nil
3065}
3066
3067// ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the application
3068// gateway.
3069type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
3070	// RedirectType - Supported http redirection types - Permanent, Temporary, Found, SeeOther. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary'
3071	RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"`
3072	// TargetListener - Reference to a listener to redirect the request to.
3073	TargetListener *SubResource `json:"targetListener,omitempty"`
3074	// TargetURL - Url to redirect the request to.
3075	TargetURL *string `json:"targetUrl,omitempty"`
3076	// IncludePath - Include path in the redirected url.
3077	IncludePath *bool `json:"includePath,omitempty"`
3078	// IncludeQueryString - Include query string in the redirected url.
3079	IncludeQueryString *bool `json:"includeQueryString,omitempty"`
3080	// RequestRoutingRules - Request routing specifying redirect configuration.
3081	RequestRoutingRules *[]SubResource `json:"requestRoutingRules,omitempty"`
3082	// URLPathMaps - Url path maps specifying default redirect configuration.
3083	URLPathMaps *[]SubResource `json:"urlPathMaps,omitempty"`
3084	// PathRules - Path rules specifying redirect configuration.
3085	PathRules *[]SubResource `json:"pathRules,omitempty"`
3086}
3087
3088// ApplicationGatewayRequestRoutingRule request routing rule of an application gateway.
3089type ApplicationGatewayRequestRoutingRule struct {
3090	*ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
3091	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
3092	Name *string `json:"name,omitempty"`
3093	// Etag - A unique read-only string that changes whenever the resource is updated.
3094	Etag *string `json:"etag,omitempty"`
3095	// Type - Type of the resource.
3096	Type *string `json:"type,omitempty"`
3097	// ID - Resource ID.
3098	ID *string `json:"id,omitempty"`
3099}
3100
3101// MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRule.
3102func (agrrr ApplicationGatewayRequestRoutingRule) MarshalJSON() ([]byte, error) {
3103	objectMap := make(map[string]interface{})
3104	if agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat != nil {
3105		objectMap["properties"] = agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat
3106	}
3107	if agrrr.Name != nil {
3108		objectMap["name"] = agrrr.Name
3109	}
3110	if agrrr.Etag != nil {
3111		objectMap["etag"] = agrrr.Etag
3112	}
3113	if agrrr.Type != nil {
3114		objectMap["type"] = agrrr.Type
3115	}
3116	if agrrr.ID != nil {
3117		objectMap["id"] = agrrr.ID
3118	}
3119	return json.Marshal(objectMap)
3120}
3121
3122// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRequestRoutingRule struct.
3123func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) error {
3124	var m map[string]*json.RawMessage
3125	err := json.Unmarshal(body, &m)
3126	if err != nil {
3127		return err
3128	}
3129	for k, v := range m {
3130		switch k {
3131		case "properties":
3132			if v != nil {
3133				var applicationGatewayRequestRoutingRulePropertiesFormat ApplicationGatewayRequestRoutingRulePropertiesFormat
3134				err = json.Unmarshal(*v, &applicationGatewayRequestRoutingRulePropertiesFormat)
3135				if err != nil {
3136					return err
3137				}
3138				agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat = &applicationGatewayRequestRoutingRulePropertiesFormat
3139			}
3140		case "name":
3141			if v != nil {
3142				var name string
3143				err = json.Unmarshal(*v, &name)
3144				if err != nil {
3145					return err
3146				}
3147				agrrr.Name = &name
3148			}
3149		case "etag":
3150			if v != nil {
3151				var etag string
3152				err = json.Unmarshal(*v, &etag)
3153				if err != nil {
3154					return err
3155				}
3156				agrrr.Etag = &etag
3157			}
3158		case "type":
3159			if v != nil {
3160				var typeVar string
3161				err = json.Unmarshal(*v, &typeVar)
3162				if err != nil {
3163					return err
3164				}
3165				agrrr.Type = &typeVar
3166			}
3167		case "id":
3168			if v != nil {
3169				var ID string
3170				err = json.Unmarshal(*v, &ID)
3171				if err != nil {
3172					return err
3173				}
3174				agrrr.ID = &ID
3175			}
3176		}
3177	}
3178
3179	return nil
3180}
3181
3182// ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the application
3183// gateway.
3184type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
3185	// RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting'
3186	RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"`
3187	// BackendAddressPool - Backend address pool resource of the application gateway.
3188	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
3189	// BackendHTTPSettings - Frontend port resource of the application gateway.
3190	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
3191	// HTTPListener - Http listener resource of the application gateway.
3192	HTTPListener *SubResource `json:"httpListener,omitempty"`
3193	// URLPathMap - URL path map resource of the application gateway.
3194	URLPathMap *SubResource `json:"urlPathMap,omitempty"`
3195	// RedirectConfiguration - Redirect configuration resource of the application gateway.
3196	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
3197	// ProvisioningState - Provisioning state of the request routing rule resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3198	ProvisioningState *string `json:"provisioningState,omitempty"`
3199}
3200
3201// ApplicationGatewaysBackendHealthFuture an abstraction for monitoring and retrieving the results of a
3202// long-running operation.
3203type ApplicationGatewaysBackendHealthFuture struct {
3204	azure.Future
3205}
3206
3207// Result returns the result of the asynchronous operation.
3208// If the operation has not completed it will return an error.
3209func (future *ApplicationGatewaysBackendHealthFuture) Result(client ApplicationGatewaysClient) (agbh ApplicationGatewayBackendHealth, err error) {
3210	var done bool
3211	done, err = future.Done(client)
3212	if err != nil {
3213		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", future.Response(), "Polling failure")
3214		return
3215	}
3216	if !done {
3217		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthFuture")
3218		return
3219	}
3220	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
3221	if agbh.Response.Response, err = future.GetResult(sender); err == nil && agbh.Response.Response.StatusCode != http.StatusNoContent {
3222		agbh, err = client.BackendHealthResponder(agbh.Response.Response)
3223		if err != nil {
3224			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", agbh.Response.Response, "Failure responding to request")
3225		}
3226	}
3227	return
3228}
3229
3230// ApplicationGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
3231// long-running operation.
3232type ApplicationGatewaysCreateOrUpdateFuture struct {
3233	azure.Future
3234}
3235
3236// Result returns the result of the asynchronous operation.
3237// If the operation has not completed it will return an error.
3238func (future *ApplicationGatewaysCreateOrUpdateFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
3239	var done bool
3240	done, err = future.Done(client)
3241	if err != nil {
3242		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
3243		return
3244	}
3245	if !done {
3246		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture")
3247		return
3248	}
3249	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
3250	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
3251		ag, err = client.CreateOrUpdateResponder(ag.Response.Response)
3252		if err != nil {
3253			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request")
3254		}
3255	}
3256	return
3257}
3258
3259// ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
3260// operation.
3261type ApplicationGatewaysDeleteFuture struct {
3262	azure.Future
3263}
3264
3265// Result returns the result of the asynchronous operation.
3266// If the operation has not completed it will return an error.
3267func (future *ApplicationGatewaysDeleteFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
3268	var done bool
3269	done, err = future.Done(client)
3270	if err != nil {
3271		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
3272		return
3273	}
3274	if !done {
3275		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture")
3276		return
3277	}
3278	ar.Response = future.Response()
3279	return
3280}
3281
3282// ApplicationGatewaySku SKU of an application gateway
3283type ApplicationGatewaySku struct {
3284	// Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge'
3285	Name ApplicationGatewaySkuName `json:"name,omitempty"`
3286	// Tier - Tier of an application gateway. Possible values include: 'Standard', 'WAF'
3287	Tier ApplicationGatewayTier `json:"tier,omitempty"`
3288	// Capacity - Capacity (instance count) of an application gateway.
3289	Capacity *int32 `json:"capacity,omitempty"`
3290}
3291
3292// ApplicationGatewaySslCertificate SSL certificates of an application gateway.
3293type ApplicationGatewaySslCertificate struct {
3294	*ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
3295	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
3296	Name *string `json:"name,omitempty"`
3297	// Etag - A unique read-only string that changes whenever the resource is updated.
3298	Etag *string `json:"etag,omitempty"`
3299	// Type - Type of the resource.
3300	Type *string `json:"type,omitempty"`
3301	// ID - Resource ID.
3302	ID *string `json:"id,omitempty"`
3303}
3304
3305// MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificate.
3306func (agsc ApplicationGatewaySslCertificate) MarshalJSON() ([]byte, error) {
3307	objectMap := make(map[string]interface{})
3308	if agsc.ApplicationGatewaySslCertificatePropertiesFormat != nil {
3309		objectMap["properties"] = agsc.ApplicationGatewaySslCertificatePropertiesFormat
3310	}
3311	if agsc.Name != nil {
3312		objectMap["name"] = agsc.Name
3313	}
3314	if agsc.Etag != nil {
3315		objectMap["etag"] = agsc.Etag
3316	}
3317	if agsc.Type != nil {
3318		objectMap["type"] = agsc.Type
3319	}
3320	if agsc.ID != nil {
3321		objectMap["id"] = agsc.ID
3322	}
3323	return json.Marshal(objectMap)
3324}
3325
3326// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslCertificate struct.
3327func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error {
3328	var m map[string]*json.RawMessage
3329	err := json.Unmarshal(body, &m)
3330	if err != nil {
3331		return err
3332	}
3333	for k, v := range m {
3334		switch k {
3335		case "properties":
3336			if v != nil {
3337				var applicationGatewaySslCertificatePropertiesFormat ApplicationGatewaySslCertificatePropertiesFormat
3338				err = json.Unmarshal(*v, &applicationGatewaySslCertificatePropertiesFormat)
3339				if err != nil {
3340					return err
3341				}
3342				agsc.ApplicationGatewaySslCertificatePropertiesFormat = &applicationGatewaySslCertificatePropertiesFormat
3343			}
3344		case "name":
3345			if v != nil {
3346				var name string
3347				err = json.Unmarshal(*v, &name)
3348				if err != nil {
3349					return err
3350				}
3351				agsc.Name = &name
3352			}
3353		case "etag":
3354			if v != nil {
3355				var etag string
3356				err = json.Unmarshal(*v, &etag)
3357				if err != nil {
3358					return err
3359				}
3360				agsc.Etag = &etag
3361			}
3362		case "type":
3363			if v != nil {
3364				var typeVar string
3365				err = json.Unmarshal(*v, &typeVar)
3366				if err != nil {
3367					return err
3368				}
3369				agsc.Type = &typeVar
3370			}
3371		case "id":
3372			if v != nil {
3373				var ID string
3374				err = json.Unmarshal(*v, &ID)
3375				if err != nil {
3376					return err
3377				}
3378				agsc.ID = &ID
3379			}
3380		}
3381	}
3382
3383	return nil
3384}
3385
3386// ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application gateway.
3387type ApplicationGatewaySslCertificatePropertiesFormat struct {
3388	// Data - Base-64 encoded pfx certificate. Only applicable in PUT Request.
3389	Data *string `json:"data,omitempty"`
3390	// Password - Password for the pfx file specified in data. Only applicable in PUT request.
3391	Password *string `json:"password,omitempty"`
3392	// PublicCertData - Base-64 encoded Public cert data corresponding to pfx specified in data. Only applicable in GET request.
3393	PublicCertData *string `json:"publicCertData,omitempty"`
3394	// ProvisioningState - Provisioning state of the SSL certificate resource Possible values are: 'Updating', 'Deleting', and 'Failed'.
3395	ProvisioningState *string `json:"provisioningState,omitempty"`
3396}
3397
3398// ApplicationGatewaySslPolicy application Gateway Ssl policy.
3399type ApplicationGatewaySslPolicy struct {
3400	// DisabledSslProtocols - Ssl protocols to be disabled on application gateway.
3401	DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"`
3402	// PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom'
3403	PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"`
3404	// PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
3405	PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"`
3406	// CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway.
3407	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
3408	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
3409	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
3410}
3411
3412// ApplicationGatewaySslPredefinedPolicy an Ssl predefined policy
3413type ApplicationGatewaySslPredefinedPolicy struct {
3414	autorest.Response `json:"-"`
3415	// Name - Name of Ssl predefined policy.
3416	Name                                                   *string `json:"name,omitempty"`
3417	*ApplicationGatewaySslPredefinedPolicyPropertiesFormat `json:"properties,omitempty"`
3418	// ID - Resource ID.
3419	ID *string `json:"id,omitempty"`
3420}
3421
3422// MarshalJSON is the custom marshaler for ApplicationGatewaySslPredefinedPolicy.
3423func (agspp ApplicationGatewaySslPredefinedPolicy) MarshalJSON() ([]byte, error) {
3424	objectMap := make(map[string]interface{})
3425	if agspp.Name != nil {
3426		objectMap["name"] = agspp.Name
3427	}
3428	if agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat != nil {
3429		objectMap["properties"] = agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat
3430	}
3431	if agspp.ID != nil {
3432		objectMap["id"] = agspp.ID
3433	}
3434	return json.Marshal(objectMap)
3435}
3436
3437// UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslPredefinedPolicy struct.
3438func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) error {
3439	var m map[string]*json.RawMessage
3440	err := json.Unmarshal(body, &m)
3441	if err != nil {
3442		return err
3443	}
3444	for k, v := range m {
3445		switch k {
3446		case "name":
3447			if v != nil {
3448				var name string
3449				err = json.Unmarshal(*v, &name)
3450				if err != nil {
3451					return err
3452				}
3453				agspp.Name = &name
3454			}
3455		case "properties":
3456			if v != nil {
3457				var applicationGatewaySslPredefinedPolicyPropertiesFormat ApplicationGatewaySslPredefinedPolicyPropertiesFormat
3458				err = json.Unmarshal(*v, &applicationGatewaySslPredefinedPolicyPropertiesFormat)
3459				if err != nil {
3460					return err
3461				}
3462				agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat = &applicationGatewaySslPredefinedPolicyPropertiesFormat
3463			}
3464		case "id":
3465			if v != nil {
3466				var ID string
3467				err = json.Unmarshal(*v, &ID)
3468				if err != nil {
3469					return err
3470				}
3471				agspp.ID = &ID
3472			}
3473		}
3474	}
3475
3476	return nil
3477}
3478
3479// ApplicationGatewaySslPredefinedPolicyPropertiesFormat properties of ApplicationGatewaySslPredefinedPolicy
3480type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct {
3481	// CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway.
3482	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
3483	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
3484	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
3485}
3486
3487// ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a long-running
3488// operation.
3489type ApplicationGatewaysStartFuture struct {
3490	azure.Future
3491}
3492
3493// Result returns the result of the asynchronous operation.
3494// If the operation has not completed it will return an error.
3495func (future *ApplicationGatewaysStartFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
3496	var done bool
3497	done, err = future.Done(client)
3498	if err != nil {
3499		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure")
3500		return
3501	}
3502	if !done {
3503		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture")
3504		return
3505	}
3506	ar.Response = future.Response()
3507	return
3508}
3509
3510// ApplicationGatewaysStopFuture an abstraction for monitoring and retrieving the results of a long-running
3511// operation.
3512type ApplicationGatewaysStopFuture struct {
3513	azure.Future
3514}
3515
3516// Result returns the result of the asynchronous operation.
3517// If the operation has not completed it will return an error.
3518func (future *ApplicationGatewaysStopFuture) Result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
3519	var done bool
3520	done, err = future.Done(client)
3521	if err != nil {
3522		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure")
3523		return
3524	}
3525	if !done {
3526		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture")
3527		return
3528	}
3529	ar.Response = future.Response()
3530	return
3531}
3532
3533// ApplicationGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
3534// operation.
3535type ApplicationGatewaysUpdateTagsFuture struct {
3536	azure.Future
3537}
3538
3539// Result returns the result of the asynchronous operation.
3540// If the operation has not completed it will return an error.
3541func (future *ApplicationGatewaysUpdateTagsFuture) Result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
3542	var done bool
3543	done, err = future.Done(client)
3544	if err != nil {
3545		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
3546		return
3547	}
3548	if !done {
3549		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysUpdateTagsFuture")
3550		return
3551	}
3552	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
3553	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
3554		ag, err = client.UpdateTagsResponder(ag.Response.Response)
3555		if err != nil {
3556			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysUpdateTagsFuture", "Result", ag.Response.Response, "Failure responding to request")
3557		}
3558	}
3559	return
3560}
3561
3562// ApplicationGatewayURLPathMap urlPathMaps give a url path to the backend mapping information for
3563// PathBasedRouting.
3564type ApplicationGatewayURLPathMap struct {
3565	*ApplicationGatewayURLPathMapPropertiesFormat `json:"properties,omitempty"`
3566	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
3567	Name *string `json:"name,omitempty"`
3568	// Etag - A unique read-only string that changes whenever the resource is updated.
3569	Etag *string `json:"etag,omitempty"`
3570	// Type - Type of the resource.
3571	Type *string `json:"type,omitempty"`
3572	// ID - Resource ID.
3573	ID *string `json:"id,omitempty"`
3574}
3575
3576// MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMap.
3577func (agupm ApplicationGatewayURLPathMap) MarshalJSON() ([]byte, error) {
3578	objectMap := make(map[string]interface{})
3579	if agupm.ApplicationGatewayURLPathMapPropertiesFormat != nil {
3580		objectMap["properties"] = agupm.ApplicationGatewayURLPathMapPropertiesFormat
3581	}
3582	if agupm.Name != nil {
3583		objectMap["name"] = agupm.Name
3584	}
3585	if agupm.Etag != nil {
3586		objectMap["etag"] = agupm.Etag
3587	}
3588	if agupm.Type != nil {
3589		objectMap["type"] = agupm.Type
3590	}
3591	if agupm.ID != nil {
3592		objectMap["id"] = agupm.ID
3593	}
3594	return json.Marshal(objectMap)
3595}
3596
3597// UnmarshalJSON is the custom unmarshaler for ApplicationGatewayURLPathMap struct.
3598func (agupm *ApplicationGatewayURLPathMap) UnmarshalJSON(body []byte) error {
3599	var m map[string]*json.RawMessage
3600	err := json.Unmarshal(body, &m)
3601	if err != nil {
3602		return err
3603	}
3604	for k, v := range m {
3605		switch k {
3606		case "properties":
3607			if v != nil {
3608				var applicationGatewayURLPathMapPropertiesFormat ApplicationGatewayURLPathMapPropertiesFormat
3609				err = json.Unmarshal(*v, &applicationGatewayURLPathMapPropertiesFormat)
3610				if err != nil {
3611					return err
3612				}
3613				agupm.ApplicationGatewayURLPathMapPropertiesFormat = &applicationGatewayURLPathMapPropertiesFormat
3614			}
3615		case "name":
3616			if v != nil {
3617				var name string
3618				err = json.Unmarshal(*v, &name)
3619				if err != nil {
3620					return err
3621				}
3622				agupm.Name = &name
3623			}
3624		case "etag":
3625			if v != nil {
3626				var etag string
3627				err = json.Unmarshal(*v, &etag)
3628				if err != nil {
3629					return err
3630				}
3631				agupm.Etag = &etag
3632			}
3633		case "type":
3634			if v != nil {
3635				var typeVar string
3636				err = json.Unmarshal(*v, &typeVar)
3637				if err != nil {
3638					return err
3639				}
3640				agupm.Type = &typeVar
3641			}
3642		case "id":
3643			if v != nil {
3644				var ID string
3645				err = json.Unmarshal(*v, &ID)
3646				if err != nil {
3647					return err
3648				}
3649				agupm.ID = &ID
3650			}
3651		}
3652	}
3653
3654	return nil
3655}
3656
3657// ApplicationGatewayURLPathMapPropertiesFormat properties of UrlPathMap of the application gateway.
3658type ApplicationGatewayURLPathMapPropertiesFormat struct {
3659	// DefaultBackendAddressPool - Default backend address pool resource of URL path map.
3660	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`
3661	// DefaultBackendHTTPSettings - Default backend http settings resource of URL path map.
3662	DefaultBackendHTTPSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`
3663	// DefaultRedirectConfiguration - Default redirect configuration resource of URL path map.
3664	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`
3665	// PathRules - Path rule of URL path map resource.
3666	PathRules *[]ApplicationGatewayPathRule `json:"pathRules,omitempty"`
3667	// ProvisioningState - Provisioning state of the backend http settings resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
3668	ProvisioningState *string `json:"provisioningState,omitempty"`
3669}
3670
3671// ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall
3672// configuration.
3673type ApplicationGatewayWebApplicationFirewallConfiguration struct {
3674	// Enabled - Whether the web application firewall is enabled or not.
3675	Enabled *bool `json:"enabled,omitempty"`
3676	// FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention'
3677	FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"`
3678	// RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'.
3679	RuleSetType *string `json:"ruleSetType,omitempty"`
3680	// RuleSetVersion - The version of the rule set type.
3681	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
3682	// DisabledRuleGroups - The disabled rule groups.
3683	DisabledRuleGroups *[]ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`
3684	// RequestBodyCheck - Whether allow WAF to check request Body.
3685	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
3686	// MaxRequestBodySize - Maxium request body size for WAF.
3687	MaxRequestBodySize *int32 `json:"maxRequestBodySize,omitempty"`
3688}
3689
3690// ApplicationSecurityGroup an application security group in a resource group.
3691type ApplicationSecurityGroup struct {
3692	autorest.Response `json:"-"`
3693	// ApplicationSecurityGroupPropertiesFormat - Properties of the application security group.
3694	*ApplicationSecurityGroupPropertiesFormat `json:"properties,omitempty"`
3695	// Etag - A unique read-only string that changes whenever the resource is updated.
3696	Etag *string `json:"etag,omitempty"`
3697	// ID - Resource ID.
3698	ID *string `json:"id,omitempty"`
3699	// Name - Resource name.
3700	Name *string `json:"name,omitempty"`
3701	// Type - Resource type.
3702	Type *string `json:"type,omitempty"`
3703	// Location - Resource location.
3704	Location *string `json:"location,omitempty"`
3705	// Tags - Resource tags.
3706	Tags map[string]*string `json:"tags"`
3707}
3708
3709// MarshalJSON is the custom marshaler for ApplicationSecurityGroup.
3710func (asg ApplicationSecurityGroup) MarshalJSON() ([]byte, error) {
3711	objectMap := make(map[string]interface{})
3712	if asg.ApplicationSecurityGroupPropertiesFormat != nil {
3713		objectMap["properties"] = asg.ApplicationSecurityGroupPropertiesFormat
3714	}
3715	if asg.Etag != nil {
3716		objectMap["etag"] = asg.Etag
3717	}
3718	if asg.ID != nil {
3719		objectMap["id"] = asg.ID
3720	}
3721	if asg.Name != nil {
3722		objectMap["name"] = asg.Name
3723	}
3724	if asg.Type != nil {
3725		objectMap["type"] = asg.Type
3726	}
3727	if asg.Location != nil {
3728		objectMap["location"] = asg.Location
3729	}
3730	if asg.Tags != nil {
3731		objectMap["tags"] = asg.Tags
3732	}
3733	return json.Marshal(objectMap)
3734}
3735
3736// UnmarshalJSON is the custom unmarshaler for ApplicationSecurityGroup struct.
3737func (asg *ApplicationSecurityGroup) UnmarshalJSON(body []byte) error {
3738	var m map[string]*json.RawMessage
3739	err := json.Unmarshal(body, &m)
3740	if err != nil {
3741		return err
3742	}
3743	for k, v := range m {
3744		switch k {
3745		case "properties":
3746			if v != nil {
3747				var applicationSecurityGroupPropertiesFormat ApplicationSecurityGroupPropertiesFormat
3748				err = json.Unmarshal(*v, &applicationSecurityGroupPropertiesFormat)
3749				if err != nil {
3750					return err
3751				}
3752				asg.ApplicationSecurityGroupPropertiesFormat = &applicationSecurityGroupPropertiesFormat
3753			}
3754		case "etag":
3755			if v != nil {
3756				var etag string
3757				err = json.Unmarshal(*v, &etag)
3758				if err != nil {
3759					return err
3760				}
3761				asg.Etag = &etag
3762			}
3763		case "id":
3764			if v != nil {
3765				var ID string
3766				err = json.Unmarshal(*v, &ID)
3767				if err != nil {
3768					return err
3769				}
3770				asg.ID = &ID
3771			}
3772		case "name":
3773			if v != nil {
3774				var name string
3775				err = json.Unmarshal(*v, &name)
3776				if err != nil {
3777					return err
3778				}
3779				asg.Name = &name
3780			}
3781		case "type":
3782			if v != nil {
3783				var typeVar string
3784				err = json.Unmarshal(*v, &typeVar)
3785				if err != nil {
3786					return err
3787				}
3788				asg.Type = &typeVar
3789			}
3790		case "location":
3791			if v != nil {
3792				var location string
3793				err = json.Unmarshal(*v, &location)
3794				if err != nil {
3795					return err
3796				}
3797				asg.Location = &location
3798			}
3799		case "tags":
3800			if v != nil {
3801				var tags map[string]*string
3802				err = json.Unmarshal(*v, &tags)
3803				if err != nil {
3804					return err
3805				}
3806				asg.Tags = tags
3807			}
3808		}
3809	}
3810
3811	return nil
3812}
3813
3814// ApplicationSecurityGroupListResult a list of application security groups.
3815type ApplicationSecurityGroupListResult struct {
3816	autorest.Response `json:"-"`
3817	// Value - A list of application security groups.
3818	Value *[]ApplicationSecurityGroup `json:"value,omitempty"`
3819	// NextLink - The URL to get the next set of results.
3820	NextLink *string `json:"nextLink,omitempty"`
3821}
3822
3823// ApplicationSecurityGroupListResultIterator provides access to a complete listing of ApplicationSecurityGroup
3824// values.
3825type ApplicationSecurityGroupListResultIterator struct {
3826	i    int
3827	page ApplicationSecurityGroupListResultPage
3828}
3829
3830// Next advances to the next value.  If there was an error making
3831// the request the iterator does not advance and the error is returned.
3832func (iter *ApplicationSecurityGroupListResultIterator) Next() error {
3833	iter.i++
3834	if iter.i < len(iter.page.Values()) {
3835		return nil
3836	}
3837	err := iter.page.Next()
3838	if err != nil {
3839		iter.i--
3840		return err
3841	}
3842	iter.i = 0
3843	return nil
3844}
3845
3846// NotDone returns true if the enumeration should be started or is not yet complete.
3847func (iter ApplicationSecurityGroupListResultIterator) NotDone() bool {
3848	return iter.page.NotDone() && iter.i < len(iter.page.Values())
3849}
3850
3851// Response returns the raw server response from the last page request.
3852func (iter ApplicationSecurityGroupListResultIterator) Response() ApplicationSecurityGroupListResult {
3853	return iter.page.Response()
3854}
3855
3856// Value returns the current value or a zero-initialized value if the
3857// iterator has advanced beyond the end of the collection.
3858func (iter ApplicationSecurityGroupListResultIterator) Value() ApplicationSecurityGroup {
3859	if !iter.page.NotDone() {
3860		return ApplicationSecurityGroup{}
3861	}
3862	return iter.page.Values()[iter.i]
3863}
3864
3865// IsEmpty returns true if the ListResult contains no values.
3866func (asglr ApplicationSecurityGroupListResult) IsEmpty() bool {
3867	return asglr.Value == nil || len(*asglr.Value) == 0
3868}
3869
3870// applicationSecurityGroupListResultPreparer prepares a request to retrieve the next set of results.
3871// It returns nil if no more results exist.
3872func (asglr ApplicationSecurityGroupListResult) applicationSecurityGroupListResultPreparer() (*http.Request, error) {
3873	if asglr.NextLink == nil || len(to.String(asglr.NextLink)) < 1 {
3874		return nil, nil
3875	}
3876	return autorest.Prepare(&http.Request{},
3877		autorest.AsJSON(),
3878		autorest.AsGet(),
3879		autorest.WithBaseURL(to.String(asglr.NextLink)))
3880}
3881
3882// ApplicationSecurityGroupListResultPage contains a page of ApplicationSecurityGroup values.
3883type ApplicationSecurityGroupListResultPage struct {
3884	fn    func(ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)
3885	asglr ApplicationSecurityGroupListResult
3886}
3887
3888// Next advances to the next page of values.  If there was an error making
3889// the request the page does not advance and the error is returned.
3890func (page *ApplicationSecurityGroupListResultPage) Next() error {
3891	next, err := page.fn(page.asglr)
3892	if err != nil {
3893		return err
3894	}
3895	page.asglr = next
3896	return nil
3897}
3898
3899// NotDone returns true if the page enumeration should be started or is not yet complete.
3900func (page ApplicationSecurityGroupListResultPage) NotDone() bool {
3901	return !page.asglr.IsEmpty()
3902}
3903
3904// Response returns the raw server response from the last page request.
3905func (page ApplicationSecurityGroupListResultPage) Response() ApplicationSecurityGroupListResult {
3906	return page.asglr
3907}
3908
3909// Values returns the slice of values for the current page or nil if there are no values.
3910func (page ApplicationSecurityGroupListResultPage) Values() []ApplicationSecurityGroup {
3911	if page.asglr.IsEmpty() {
3912		return nil
3913	}
3914	return *page.asglr.Value
3915}
3916
3917// ApplicationSecurityGroupPropertiesFormat application security group properties.
3918type ApplicationSecurityGroupPropertiesFormat struct {
3919	// ResourceGUID - 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.
3920	ResourceGUID *string `json:"resourceGuid,omitempty"`
3921	// ProvisioningState - The provisioning state of the application security group resource. Possible values are: 'Succeeded', 'Updating', 'Deleting', and 'Failed'.
3922	ProvisioningState *string `json:"provisioningState,omitempty"`
3923}
3924
3925// ApplicationSecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
3926// long-running operation.
3927type ApplicationSecurityGroupsCreateOrUpdateFuture struct {
3928	azure.Future
3929}
3930
3931// Result returns the result of the asynchronous operation.
3932// If the operation has not completed it will return an error.
3933func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) Result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
3934	var done bool
3935	done, err = future.Done(client)
3936	if err != nil {
3937		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
3938		return
3939	}
3940	if !done {
3941		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsCreateOrUpdateFuture")
3942		return
3943	}
3944	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
3945	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
3946		asg, err = client.CreateOrUpdateResponder(asg.Response.Response)
3947		if err != nil {
3948			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", asg.Response.Response, "Failure responding to request")
3949		}
3950	}
3951	return
3952}
3953
3954// ApplicationSecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
3955// operation.
3956type ApplicationSecurityGroupsDeleteFuture struct {
3957	azure.Future
3958}
3959
3960// Result returns the result of the asynchronous operation.
3961// If the operation has not completed it will return an error.
3962func (future *ApplicationSecurityGroupsDeleteFuture) Result(client ApplicationSecurityGroupsClient) (ar autorest.Response, err error) {
3963	var done bool
3964	done, err = future.Done(client)
3965	if err != nil {
3966		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
3967		return
3968	}
3969	if !done {
3970		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsDeleteFuture")
3971		return
3972	}
3973	ar.Response = future.Response()
3974	return
3975}
3976
3977// AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations that
3978// belongs to an ExpressRouteCircuit.
3979type AuthorizationListResult struct {
3980	autorest.Response `json:"-"`
3981	// Value - The authorizations in an ExpressRoute Circuit.
3982	Value *[]ExpressRouteCircuitAuthorization `json:"value,omitempty"`
3983	// NextLink - The URL to get the next set of results.
3984	NextLink *string `json:"nextLink,omitempty"`
3985}
3986
3987// AuthorizationListResultIterator provides access to a complete listing of ExpressRouteCircuitAuthorization
3988// values.
3989type AuthorizationListResultIterator struct {
3990	i    int
3991	page AuthorizationListResultPage
3992}
3993
3994// Next advances to the next value.  If there was an error making
3995// the request the iterator does not advance and the error is returned.
3996func (iter *AuthorizationListResultIterator) Next() error {
3997	iter.i++
3998	if iter.i < len(iter.page.Values()) {
3999		return nil
4000	}
4001	err := iter.page.Next()
4002	if err != nil {
4003		iter.i--
4004		return err
4005	}
4006	iter.i = 0
4007	return nil
4008}
4009
4010// NotDone returns true if the enumeration should be started or is not yet complete.
4011func (iter AuthorizationListResultIterator) NotDone() bool {
4012	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4013}
4014
4015// Response returns the raw server response from the last page request.
4016func (iter AuthorizationListResultIterator) Response() AuthorizationListResult {
4017	return iter.page.Response()
4018}
4019
4020// Value returns the current value or a zero-initialized value if the
4021// iterator has advanced beyond the end of the collection.
4022func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthorization {
4023	if !iter.page.NotDone() {
4024		return ExpressRouteCircuitAuthorization{}
4025	}
4026	return iter.page.Values()[iter.i]
4027}
4028
4029// IsEmpty returns true if the ListResult contains no values.
4030func (alr AuthorizationListResult) IsEmpty() bool {
4031	return alr.Value == nil || len(*alr.Value) == 0
4032}
4033
4034// authorizationListResultPreparer prepares a request to retrieve the next set of results.
4035// It returns nil if no more results exist.
4036func (alr AuthorizationListResult) authorizationListResultPreparer() (*http.Request, error) {
4037	if alr.NextLink == nil || len(to.String(alr.NextLink)) < 1 {
4038		return nil, nil
4039	}
4040	return autorest.Prepare(&http.Request{},
4041		autorest.AsJSON(),
4042		autorest.AsGet(),
4043		autorest.WithBaseURL(to.String(alr.NextLink)))
4044}
4045
4046// AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values.
4047type AuthorizationListResultPage struct {
4048	fn  func(AuthorizationListResult) (AuthorizationListResult, error)
4049	alr AuthorizationListResult
4050}
4051
4052// Next advances to the next page of values.  If there was an error making
4053// the request the page does not advance and the error is returned.
4054func (page *AuthorizationListResultPage) Next() error {
4055	next, err := page.fn(page.alr)
4056	if err != nil {
4057		return err
4058	}
4059	page.alr = next
4060	return nil
4061}
4062
4063// NotDone returns true if the page enumeration should be started or is not yet complete.
4064func (page AuthorizationListResultPage) NotDone() bool {
4065	return !page.alr.IsEmpty()
4066}
4067
4068// Response returns the raw server response from the last page request.
4069func (page AuthorizationListResultPage) Response() AuthorizationListResult {
4070	return page.alr
4071}
4072
4073// Values returns the slice of values for the current page or nil if there are no values.
4074func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorization {
4075	if page.alr.IsEmpty() {
4076		return nil
4077	}
4078	return *page.alr.Value
4079}
4080
4081// AuthorizationPropertiesFormat ...
4082type AuthorizationPropertiesFormat struct {
4083	// AuthorizationKey - The authorization key.
4084	AuthorizationKey *string `json:"authorizationKey,omitempty"`
4085	// AuthorizationUseStatus - AuthorizationUseStatus. Possible values are: 'Available' and 'InUse'. Possible values include: 'Available', 'InUse'
4086	AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"`
4087	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4088	ProvisioningState *string `json:"provisioningState,omitempty"`
4089}
4090
4091// Availability availability of the metric.
4092type Availability struct {
4093	// TimeGrain - The time grain of the availability.
4094	TimeGrain *string `json:"timeGrain,omitempty"`
4095	// Retention - The retention of the availability.
4096	Retention *string `json:"retention,omitempty"`
4097	// BlobDuration - Duration of the availability blob.
4098	BlobDuration *string `json:"blobDuration,omitempty"`
4099}
4100
4101// AvailableProvidersList list of available countries with details.
4102type AvailableProvidersList struct {
4103	autorest.Response `json:"-"`
4104	// Countries - List of available countries.
4105	Countries *[]AvailableProvidersListCountry `json:"countries,omitempty"`
4106}
4107
4108// AvailableProvidersListCity city or town details.
4109type AvailableProvidersListCity struct {
4110	// CityName - The city or town name.
4111	CityName *string `json:"cityName,omitempty"`
4112	// Providers - A list of Internet service providers.
4113	Providers *[]string `json:"providers,omitempty"`
4114}
4115
4116// AvailableProvidersListCountry country details.
4117type AvailableProvidersListCountry struct {
4118	// CountryName - The country name.
4119	CountryName *string `json:"countryName,omitempty"`
4120	// Providers - A list of Internet service providers.
4121	Providers *[]string `json:"providers,omitempty"`
4122	// States - List of available states in the country.
4123	States *[]AvailableProvidersListState `json:"states,omitempty"`
4124}
4125
4126// AvailableProvidersListParameters constraints that determine the list of available Internet service providers.
4127type AvailableProvidersListParameters struct {
4128	// AzureLocations - A list of Azure regions.
4129	AzureLocations *[]string `json:"azureLocations,omitempty"`
4130	// Country - The country for available providers list.
4131	Country *string `json:"country,omitempty"`
4132	// State - The state for available providers list.
4133	State *string `json:"state,omitempty"`
4134	// City - The city or town for available providers list.
4135	City *string `json:"city,omitempty"`
4136}
4137
4138// AvailableProvidersListState state details.
4139type AvailableProvidersListState struct {
4140	// StateName - The state name.
4141	StateName *string `json:"stateName,omitempty"`
4142	// Providers - A list of Internet service providers.
4143	Providers *[]string `json:"providers,omitempty"`
4144	// Cities - List of available cities or towns in the state.
4145	Cities *[]AvailableProvidersListCity `json:"cities,omitempty"`
4146}
4147
4148// AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation,
4149// indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct from the
4150// HTTP status code returned for the Get Operation Status operation itself. If the asynchronous operation
4151// succeeded, the response body includes the HTTP status code for the successful request. If the asynchronous
4152// operation failed, the response body includes the HTTP status code for the failed request and error information
4153// regarding the failure.
4154type AzureAsyncOperationResult struct {
4155	// Status - Status of the Azure async operation. Possible values are: 'InProgress', 'Succeeded', and 'Failed'. Possible values include: 'OperationStatusInProgress', 'OperationStatusSucceeded', 'OperationStatusFailed'
4156	Status OperationStatus `json:"status,omitempty"`
4157	Error  *Error          `json:"error,omitempty"`
4158}
4159
4160// AzureReachabilityReport azure reachability report details.
4161type AzureReachabilityReport struct {
4162	autorest.Response `json:"-"`
4163	// AggregationLevel - The aggregation level of Azure reachability report. Can be Country, State or City.
4164	AggregationLevel *string                          `json:"aggregationLevel,omitempty"`
4165	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
4166	// ReachabilityReport - List of Azure reachability report items.
4167	ReachabilityReport *[]AzureReachabilityReportItem `json:"reachabilityReport,omitempty"`
4168}
4169
4170// AzureReachabilityReportItem azure reachability report details for a given provider location.
4171type AzureReachabilityReportItem struct {
4172	// Provider - The Internet service provider.
4173	Provider *string `json:"provider,omitempty"`
4174	// AzureLocation - The Azure region.
4175	AzureLocation *string `json:"azureLocation,omitempty"`
4176	// Latencies - List of latency details for each of the time series.
4177	Latencies *[]AzureReachabilityReportLatencyInfo `json:"latencies,omitempty"`
4178}
4179
4180// AzureReachabilityReportLatencyInfo details on latency for a time series.
4181type AzureReachabilityReportLatencyInfo struct {
4182	// TimeStamp - The time stamp.
4183	TimeStamp *date.Time `json:"timeStamp,omitempty"`
4184	// Score - The relative latency score between 1 and 100, higher values indicating a faster connection.
4185	Score *int32 `json:"score,omitempty"`
4186}
4187
4188// AzureReachabilityReportLocation parameters that define a geographic location.
4189type AzureReachabilityReportLocation struct {
4190	// Country - The name of the country.
4191	Country *string `json:"country,omitempty"`
4192	// State - The name of the state.
4193	State *string `json:"state,omitempty"`
4194	// City - The name of the city or town.
4195	City *string `json:"city,omitempty"`
4196}
4197
4198// AzureReachabilityReportParameters geographic and time constraints for Azure reachability report.
4199type AzureReachabilityReportParameters struct {
4200	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
4201	// Providers - List of Internet service providers.
4202	Providers *[]string `json:"providers,omitempty"`
4203	// AzureLocations - Optional Azure regions to scope the query to.
4204	AzureLocations *[]string `json:"azureLocations,omitempty"`
4205	// StartTime - The start time for the Azure reachability report.
4206	StartTime *date.Time `json:"startTime,omitempty"`
4207	// EndTime - The end time for the Azure reachability report.
4208	EndTime *date.Time `json:"endTime,omitempty"`
4209}
4210
4211// BackendAddressPool pool of backend IP addresses.
4212type BackendAddressPool struct {
4213	autorest.Response `json:"-"`
4214	// BackendAddressPoolPropertiesFormat - Properties of load balancer backend address pool.
4215	*BackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
4216	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
4217	Name *string `json:"name,omitempty"`
4218	// Etag - A unique read-only string that changes whenever the resource is updated.
4219	Etag *string `json:"etag,omitempty"`
4220	// ID - Resource ID.
4221	ID *string `json:"id,omitempty"`
4222}
4223
4224// MarshalJSON is the custom marshaler for BackendAddressPool.
4225func (bap BackendAddressPool) MarshalJSON() ([]byte, error) {
4226	objectMap := make(map[string]interface{})
4227	if bap.BackendAddressPoolPropertiesFormat != nil {
4228		objectMap["properties"] = bap.BackendAddressPoolPropertiesFormat
4229	}
4230	if bap.Name != nil {
4231		objectMap["name"] = bap.Name
4232	}
4233	if bap.Etag != nil {
4234		objectMap["etag"] = bap.Etag
4235	}
4236	if bap.ID != nil {
4237		objectMap["id"] = bap.ID
4238	}
4239	return json.Marshal(objectMap)
4240}
4241
4242// UnmarshalJSON is the custom unmarshaler for BackendAddressPool struct.
4243func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error {
4244	var m map[string]*json.RawMessage
4245	err := json.Unmarshal(body, &m)
4246	if err != nil {
4247		return err
4248	}
4249	for k, v := range m {
4250		switch k {
4251		case "properties":
4252			if v != nil {
4253				var backendAddressPoolPropertiesFormat BackendAddressPoolPropertiesFormat
4254				err = json.Unmarshal(*v, &backendAddressPoolPropertiesFormat)
4255				if err != nil {
4256					return err
4257				}
4258				bap.BackendAddressPoolPropertiesFormat = &backendAddressPoolPropertiesFormat
4259			}
4260		case "name":
4261			if v != nil {
4262				var name string
4263				err = json.Unmarshal(*v, &name)
4264				if err != nil {
4265					return err
4266				}
4267				bap.Name = &name
4268			}
4269		case "etag":
4270			if v != nil {
4271				var etag string
4272				err = json.Unmarshal(*v, &etag)
4273				if err != nil {
4274					return err
4275				}
4276				bap.Etag = &etag
4277			}
4278		case "id":
4279			if v != nil {
4280				var ID string
4281				err = json.Unmarshal(*v, &ID)
4282				if err != nil {
4283					return err
4284				}
4285				bap.ID = &ID
4286			}
4287		}
4288	}
4289
4290	return nil
4291}
4292
4293// BackendAddressPoolPropertiesFormat properties of the backend address pool.
4294type BackendAddressPoolPropertiesFormat struct {
4295	// BackendIPConfigurations - Gets collection of references to IP addresses defined in network interfaces.
4296	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
4297	// LoadBalancingRules - Gets load balancing rules that use this backend address pool.
4298	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
4299	// OutboundNatRule - Gets outbound rules that use this backend address pool.
4300	OutboundNatRule *SubResource `json:"outboundNatRule,omitempty"`
4301	// ProvisioningState - Get provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
4302	ProvisioningState *string `json:"provisioningState,omitempty"`
4303}
4304
4305// BGPCommunity contains bgp community information offered in Service Community resources.
4306type BGPCommunity struct {
4307	// ServiceSupportedRegion - The region which the service support. e.g. For O365, region is Global.
4308	ServiceSupportedRegion *string `json:"serviceSupportedRegion,omitempty"`
4309	// CommunityName - The name of the bgp community. e.g. Skype.
4310	CommunityName *string `json:"communityName,omitempty"`
4311	// CommunityValue - The value of the bgp community. For more information: https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
4312	CommunityValue *string `json:"communityValue,omitempty"`
4313	// CommunityPrefixes - The prefixes that the bgp community contains.
4314	CommunityPrefixes *[]string `json:"communityPrefixes,omitempty"`
4315	// IsAuthorizedToUse - Customer is authorized to use bgp community or not.
4316	IsAuthorizedToUse *bool `json:"isAuthorizedToUse,omitempty"`
4317	// ServiceGroup - The service group of the bgp community contains.
4318	ServiceGroup *string `json:"serviceGroup,omitempty"`
4319}
4320
4321// BgpPeerStatus BGP peer status details
4322type BgpPeerStatus struct {
4323	// LocalAddress - The virtual network gateway's local address
4324	LocalAddress *string `json:"localAddress,omitempty"`
4325	// Neighbor - The remote BGP peer
4326	Neighbor *string `json:"neighbor,omitempty"`
4327	// Asn - The autonomous system number of the remote BGP peer
4328	Asn *int32 `json:"asn,omitempty"`
4329	// State - The BGP peer state. Possible values include: 'BgpPeerStateUnknown', 'BgpPeerStateStopped', 'BgpPeerStateIdle', 'BgpPeerStateConnecting', 'BgpPeerStateConnected'
4330	State BgpPeerState `json:"state,omitempty"`
4331	// ConnectedDuration - For how long the peering has been up
4332	ConnectedDuration *string `json:"connectedDuration,omitempty"`
4333	// RoutesReceived - The number of routes learned from this peer
4334	RoutesReceived *int64 `json:"routesReceived,omitempty"`
4335	// MessagesSent - The number of BGP messages sent
4336	MessagesSent *int64 `json:"messagesSent,omitempty"`
4337	// MessagesReceived - The number of BGP messages received
4338	MessagesReceived *int64 `json:"messagesReceived,omitempty"`
4339}
4340
4341// BgpPeerStatusListResult response for list BGP peer status API service call
4342type BgpPeerStatusListResult struct {
4343	autorest.Response `json:"-"`
4344	// Value - List of BGP peers
4345	Value *[]BgpPeerStatus `json:"value,omitempty"`
4346}
4347
4348// BgpServiceCommunity service Community Properties.
4349type BgpServiceCommunity struct {
4350	*BgpServiceCommunityPropertiesFormat `json:"properties,omitempty"`
4351	// ID - Resource ID.
4352	ID *string `json:"id,omitempty"`
4353	// Name - Resource name.
4354	Name *string `json:"name,omitempty"`
4355	// Type - Resource type.
4356	Type *string `json:"type,omitempty"`
4357	// Location - Resource location.
4358	Location *string `json:"location,omitempty"`
4359	// Tags - Resource tags.
4360	Tags map[string]*string `json:"tags"`
4361}
4362
4363// MarshalJSON is the custom marshaler for BgpServiceCommunity.
4364func (bsc BgpServiceCommunity) MarshalJSON() ([]byte, error) {
4365	objectMap := make(map[string]interface{})
4366	if bsc.BgpServiceCommunityPropertiesFormat != nil {
4367		objectMap["properties"] = bsc.BgpServiceCommunityPropertiesFormat
4368	}
4369	if bsc.ID != nil {
4370		objectMap["id"] = bsc.ID
4371	}
4372	if bsc.Name != nil {
4373		objectMap["name"] = bsc.Name
4374	}
4375	if bsc.Type != nil {
4376		objectMap["type"] = bsc.Type
4377	}
4378	if bsc.Location != nil {
4379		objectMap["location"] = bsc.Location
4380	}
4381	if bsc.Tags != nil {
4382		objectMap["tags"] = bsc.Tags
4383	}
4384	return json.Marshal(objectMap)
4385}
4386
4387// UnmarshalJSON is the custom unmarshaler for BgpServiceCommunity struct.
4388func (bsc *BgpServiceCommunity) UnmarshalJSON(body []byte) error {
4389	var m map[string]*json.RawMessage
4390	err := json.Unmarshal(body, &m)
4391	if err != nil {
4392		return err
4393	}
4394	for k, v := range m {
4395		switch k {
4396		case "properties":
4397			if v != nil {
4398				var bgpServiceCommunityPropertiesFormat BgpServiceCommunityPropertiesFormat
4399				err = json.Unmarshal(*v, &bgpServiceCommunityPropertiesFormat)
4400				if err != nil {
4401					return err
4402				}
4403				bsc.BgpServiceCommunityPropertiesFormat = &bgpServiceCommunityPropertiesFormat
4404			}
4405		case "id":
4406			if v != nil {
4407				var ID string
4408				err = json.Unmarshal(*v, &ID)
4409				if err != nil {
4410					return err
4411				}
4412				bsc.ID = &ID
4413			}
4414		case "name":
4415			if v != nil {
4416				var name string
4417				err = json.Unmarshal(*v, &name)
4418				if err != nil {
4419					return err
4420				}
4421				bsc.Name = &name
4422			}
4423		case "type":
4424			if v != nil {
4425				var typeVar string
4426				err = json.Unmarshal(*v, &typeVar)
4427				if err != nil {
4428					return err
4429				}
4430				bsc.Type = &typeVar
4431			}
4432		case "location":
4433			if v != nil {
4434				var location string
4435				err = json.Unmarshal(*v, &location)
4436				if err != nil {
4437					return err
4438				}
4439				bsc.Location = &location
4440			}
4441		case "tags":
4442			if v != nil {
4443				var tags map[string]*string
4444				err = json.Unmarshal(*v, &tags)
4445				if err != nil {
4446					return err
4447				}
4448				bsc.Tags = tags
4449			}
4450		}
4451	}
4452
4453	return nil
4454}
4455
4456// BgpServiceCommunityListResult response for the ListServiceCommunity API service call.
4457type BgpServiceCommunityListResult struct {
4458	autorest.Response `json:"-"`
4459	// Value - A list of service community resources.
4460	Value *[]BgpServiceCommunity `json:"value,omitempty"`
4461	// NextLink - The URL to get the next set of results.
4462	NextLink *string `json:"nextLink,omitempty"`
4463}
4464
4465// BgpServiceCommunityListResultIterator provides access to a complete listing of BgpServiceCommunity values.
4466type BgpServiceCommunityListResultIterator struct {
4467	i    int
4468	page BgpServiceCommunityListResultPage
4469}
4470
4471// Next advances to the next value.  If there was an error making
4472// the request the iterator does not advance and the error is returned.
4473func (iter *BgpServiceCommunityListResultIterator) Next() error {
4474	iter.i++
4475	if iter.i < len(iter.page.Values()) {
4476		return nil
4477	}
4478	err := iter.page.Next()
4479	if err != nil {
4480		iter.i--
4481		return err
4482	}
4483	iter.i = 0
4484	return nil
4485}
4486
4487// NotDone returns true if the enumeration should be started or is not yet complete.
4488func (iter BgpServiceCommunityListResultIterator) NotDone() bool {
4489	return iter.page.NotDone() && iter.i < len(iter.page.Values())
4490}
4491
4492// Response returns the raw server response from the last page request.
4493func (iter BgpServiceCommunityListResultIterator) Response() BgpServiceCommunityListResult {
4494	return iter.page.Response()
4495}
4496
4497// Value returns the current value or a zero-initialized value if the
4498// iterator has advanced beyond the end of the collection.
4499func (iter BgpServiceCommunityListResultIterator) Value() BgpServiceCommunity {
4500	if !iter.page.NotDone() {
4501		return BgpServiceCommunity{}
4502	}
4503	return iter.page.Values()[iter.i]
4504}
4505
4506// IsEmpty returns true if the ListResult contains no values.
4507func (bsclr BgpServiceCommunityListResult) IsEmpty() bool {
4508	return bsclr.Value == nil || len(*bsclr.Value) == 0
4509}
4510
4511// bgpServiceCommunityListResultPreparer prepares a request to retrieve the next set of results.
4512// It returns nil if no more results exist.
4513func (bsclr BgpServiceCommunityListResult) bgpServiceCommunityListResultPreparer() (*http.Request, error) {
4514	if bsclr.NextLink == nil || len(to.String(bsclr.NextLink)) < 1 {
4515		return nil, nil
4516	}
4517	return autorest.Prepare(&http.Request{},
4518		autorest.AsJSON(),
4519		autorest.AsGet(),
4520		autorest.WithBaseURL(to.String(bsclr.NextLink)))
4521}
4522
4523// BgpServiceCommunityListResultPage contains a page of BgpServiceCommunity values.
4524type BgpServiceCommunityListResultPage struct {
4525	fn    func(BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)
4526	bsclr BgpServiceCommunityListResult
4527}
4528
4529// Next advances to the next page of values.  If there was an error making
4530// the request the page does not advance and the error is returned.
4531func (page *BgpServiceCommunityListResultPage) Next() error {
4532	next, err := page.fn(page.bsclr)
4533	if err != nil {
4534		return err
4535	}
4536	page.bsclr = next
4537	return nil
4538}
4539
4540// NotDone returns true if the page enumeration should be started or is not yet complete.
4541func (page BgpServiceCommunityListResultPage) NotDone() bool {
4542	return !page.bsclr.IsEmpty()
4543}
4544
4545// Response returns the raw server response from the last page request.
4546func (page BgpServiceCommunityListResultPage) Response() BgpServiceCommunityListResult {
4547	return page.bsclr
4548}
4549
4550// Values returns the slice of values for the current page or nil if there are no values.
4551func (page BgpServiceCommunityListResultPage) Values() []BgpServiceCommunity {
4552	if page.bsclr.IsEmpty() {
4553		return nil
4554	}
4555	return *page.bsclr.Value
4556}
4557
4558// BgpServiceCommunityPropertiesFormat properties of Service Community.
4559type BgpServiceCommunityPropertiesFormat struct {
4560	// ServiceName - The name of the bgp community. e.g. Skype.
4561	ServiceName *string `json:"serviceName,omitempty"`
4562	// BgpCommunities - Get a list of bgp communities.
4563	BgpCommunities *[]BGPCommunity `json:"bgpCommunities,omitempty"`
4564}
4565
4566// BgpSettings BGP settings details
4567type BgpSettings struct {
4568	// Asn - The BGP speaker's ASN.
4569	Asn *int64 `json:"asn,omitempty"`
4570	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
4571	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
4572	// PeerWeight - The weight added to routes learned from this BGP speaker.
4573	PeerWeight *int32 `json:"peerWeight,omitempty"`
4574}
4575
4576// ConnectionMonitor parameters that define the operation to create a connection monitor.
4577type ConnectionMonitor struct {
4578	// Location - Connection monitor location.
4579	Location *string `json:"location,omitempty"`
4580	// Tags - Connection monitor tags.
4581	Tags                         map[string]*string `json:"tags"`
4582	*ConnectionMonitorParameters `json:"properties,omitempty"`
4583}
4584
4585// MarshalJSON is the custom marshaler for ConnectionMonitor.
4586func (cm ConnectionMonitor) MarshalJSON() ([]byte, error) {
4587	objectMap := make(map[string]interface{})
4588	if cm.Location != nil {
4589		objectMap["location"] = cm.Location
4590	}
4591	if cm.Tags != nil {
4592		objectMap["tags"] = cm.Tags
4593	}
4594	if cm.ConnectionMonitorParameters != nil {
4595		objectMap["properties"] = cm.ConnectionMonitorParameters
4596	}
4597	return json.Marshal(objectMap)
4598}
4599
4600// UnmarshalJSON is the custom unmarshaler for ConnectionMonitor struct.
4601func (cm *ConnectionMonitor) UnmarshalJSON(body []byte) error {
4602	var m map[string]*json.RawMessage
4603	err := json.Unmarshal(body, &m)
4604	if err != nil {
4605		return err
4606	}
4607	for k, v := range m {
4608		switch k {
4609		case "location":
4610			if v != nil {
4611				var location string
4612				err = json.Unmarshal(*v, &location)
4613				if err != nil {
4614					return err
4615				}
4616				cm.Location = &location
4617			}
4618		case "tags":
4619			if v != nil {
4620				var tags map[string]*string
4621				err = json.Unmarshal(*v, &tags)
4622				if err != nil {
4623					return err
4624				}
4625				cm.Tags = tags
4626			}
4627		case "properties":
4628			if v != nil {
4629				var connectionMonitorParameters ConnectionMonitorParameters
4630				err = json.Unmarshal(*v, &connectionMonitorParameters)
4631				if err != nil {
4632					return err
4633				}
4634				cm.ConnectionMonitorParameters = &connectionMonitorParameters
4635			}
4636		}
4637	}
4638
4639	return nil
4640}
4641
4642// ConnectionMonitorDestination describes the destination of connection monitor.
4643type ConnectionMonitorDestination struct {
4644	// ResourceID - The ID of the resource used as the destination by connection monitor.
4645	ResourceID *string `json:"resourceId,omitempty"`
4646	// Address - Address of the connection monitor destination (IP or domain name).
4647	Address *string `json:"address,omitempty"`
4648	// Port - The destination port used by connection monitor.
4649	Port *int32 `json:"port,omitempty"`
4650}
4651
4652// ConnectionMonitorListResult list of connection monitors.
4653type ConnectionMonitorListResult struct {
4654	autorest.Response `json:"-"`
4655	// Value - Information about connection monitors.
4656	Value *[]ConnectionMonitorResult `json:"value,omitempty"`
4657}
4658
4659// ConnectionMonitorParameters parameters that define the operation to create a connection monitor.
4660type ConnectionMonitorParameters struct {
4661	Source      *ConnectionMonitorSource      `json:"source,omitempty"`
4662	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
4663	// AutoStart - Determines if the connection monitor will start automatically once created.
4664	AutoStart *bool `json:"autoStart,omitempty"`
4665	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
4666	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
4667}
4668
4669// ConnectionMonitorQueryResult list of connection states snaphots.
4670type ConnectionMonitorQueryResult struct {
4671	autorest.Response `json:"-"`
4672	// States - Information about connection states.
4673	States *[]ConnectionStateSnapshot `json:"states,omitempty"`
4674}
4675
4676// ConnectionMonitorResult information about the connection monitor.
4677type ConnectionMonitorResult struct {
4678	autorest.Response `json:"-"`
4679	// Name - Name of the connection monitor.
4680	Name *string `json:"name,omitempty"`
4681	// ID - ID of the connection monitor.
4682	ID   *string `json:"id,omitempty"`
4683	Etag *string `json:"etag,omitempty"`
4684	// Type - Connection monitor type.
4685	Type *string `json:"type,omitempty"`
4686	// Location - Connection monitor location.
4687	Location *string `json:"location,omitempty"`
4688	// Tags - Connection monitor tags.
4689	Tags                               map[string]*string `json:"tags"`
4690	*ConnectionMonitorResultProperties `json:"properties,omitempty"`
4691}
4692
4693// MarshalJSON is the custom marshaler for ConnectionMonitorResult.
4694func (cmr ConnectionMonitorResult) MarshalJSON() ([]byte, error) {
4695	objectMap := make(map[string]interface{})
4696	if cmr.Name != nil {
4697		objectMap["name"] = cmr.Name
4698	}
4699	if cmr.ID != nil {
4700		objectMap["id"] = cmr.ID
4701	}
4702	if cmr.Etag != nil {
4703		objectMap["etag"] = cmr.Etag
4704	}
4705	if cmr.Type != nil {
4706		objectMap["type"] = cmr.Type
4707	}
4708	if cmr.Location != nil {
4709		objectMap["location"] = cmr.Location
4710	}
4711	if cmr.Tags != nil {
4712		objectMap["tags"] = cmr.Tags
4713	}
4714	if cmr.ConnectionMonitorResultProperties != nil {
4715		objectMap["properties"] = cmr.ConnectionMonitorResultProperties
4716	}
4717	return json.Marshal(objectMap)
4718}
4719
4720// UnmarshalJSON is the custom unmarshaler for ConnectionMonitorResult struct.
4721func (cmr *ConnectionMonitorResult) UnmarshalJSON(body []byte) error {
4722	var m map[string]*json.RawMessage
4723	err := json.Unmarshal(body, &m)
4724	if err != nil {
4725		return err
4726	}
4727	for k, v := range m {
4728		switch k {
4729		case "name":
4730			if v != nil {
4731				var name string
4732				err = json.Unmarshal(*v, &name)
4733				if err != nil {
4734					return err
4735				}
4736				cmr.Name = &name
4737			}
4738		case "id":
4739			if v != nil {
4740				var ID string
4741				err = json.Unmarshal(*v, &ID)
4742				if err != nil {
4743					return err
4744				}
4745				cmr.ID = &ID
4746			}
4747		case "etag":
4748			if v != nil {
4749				var etag string
4750				err = json.Unmarshal(*v, &etag)
4751				if err != nil {
4752					return err
4753				}
4754				cmr.Etag = &etag
4755			}
4756		case "type":
4757			if v != nil {
4758				var typeVar string
4759				err = json.Unmarshal(*v, &typeVar)
4760				if err != nil {
4761					return err
4762				}
4763				cmr.Type = &typeVar
4764			}
4765		case "location":
4766			if v != nil {
4767				var location string
4768				err = json.Unmarshal(*v, &location)
4769				if err != nil {
4770					return err
4771				}
4772				cmr.Location = &location
4773			}
4774		case "tags":
4775			if v != nil {
4776				var tags map[string]*string
4777				err = json.Unmarshal(*v, &tags)
4778				if err != nil {
4779					return err
4780				}
4781				cmr.Tags = tags
4782			}
4783		case "properties":
4784			if v != nil {
4785				var connectionMonitorResultProperties ConnectionMonitorResultProperties
4786				err = json.Unmarshal(*v, &connectionMonitorResultProperties)
4787				if err != nil {
4788					return err
4789				}
4790				cmr.ConnectionMonitorResultProperties = &connectionMonitorResultProperties
4791			}
4792		}
4793	}
4794
4795	return nil
4796}
4797
4798// ConnectionMonitorResultProperties describes the properties of a connection monitor.
4799type ConnectionMonitorResultProperties struct {
4800	// ProvisioningState - The provisioning state of the connection monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
4801	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
4802	// StartTime - The date and time when the connection monitor was started.
4803	StartTime *date.Time `json:"startTime,omitempty"`
4804	// MonitoringStatus - The monitoring status of the connection monitor.
4805	MonitoringStatus *string                       `json:"monitoringStatus,omitempty"`
4806	Source           *ConnectionMonitorSource      `json:"source,omitempty"`
4807	Destination      *ConnectionMonitorDestination `json:"destination,omitempty"`
4808	// AutoStart - Determines if the connection monitor will start automatically once created.
4809	AutoStart *bool `json:"autoStart,omitempty"`
4810	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
4811	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
4812}
4813
4814// ConnectionMonitorsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
4815// long-running operation.
4816type ConnectionMonitorsCreateOrUpdateFuture struct {
4817	azure.Future
4818}
4819
4820// Result returns the result of the asynchronous operation.
4821// If the operation has not completed it will return an error.
4822func (future *ConnectionMonitorsCreateOrUpdateFuture) Result(client ConnectionMonitorsClient) (cmr ConnectionMonitorResult, err error) {
4823	var done bool
4824	done, err = future.Done(client)
4825	if err != nil {
4826		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
4827		return
4828	}
4829	if !done {
4830		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsCreateOrUpdateFuture")
4831		return
4832	}
4833	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4834	if cmr.Response.Response, err = future.GetResult(sender); err == nil && cmr.Response.Response.StatusCode != http.StatusNoContent {
4835		cmr, err = client.CreateOrUpdateResponder(cmr.Response.Response)
4836		if err != nil {
4837			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", cmr.Response.Response, "Failure responding to request")
4838		}
4839	}
4840	return
4841}
4842
4843// ConnectionMonitorsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
4844// operation.
4845type ConnectionMonitorsDeleteFuture struct {
4846	azure.Future
4847}
4848
4849// Result returns the result of the asynchronous operation.
4850// If the operation has not completed it will return an error.
4851func (future *ConnectionMonitorsDeleteFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
4852	var done bool
4853	done, err = future.Done(client)
4854	if err != nil {
4855		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsDeleteFuture", "Result", future.Response(), "Polling failure")
4856		return
4857	}
4858	if !done {
4859		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsDeleteFuture")
4860		return
4861	}
4862	ar.Response = future.Response()
4863	return
4864}
4865
4866// ConnectionMonitorSource describes the source of connection monitor.
4867type ConnectionMonitorSource struct {
4868	// ResourceID - The ID of the resource used as the source by connection monitor.
4869	ResourceID *string `json:"resourceId,omitempty"`
4870	// Port - The source port used by connection monitor.
4871	Port *int32 `json:"port,omitempty"`
4872}
4873
4874// ConnectionMonitorsQueryFuture an abstraction for monitoring and retrieving the results of a long-running
4875// operation.
4876type ConnectionMonitorsQueryFuture struct {
4877	azure.Future
4878}
4879
4880// Result returns the result of the asynchronous operation.
4881// If the operation has not completed it will return an error.
4882func (future *ConnectionMonitorsQueryFuture) Result(client ConnectionMonitorsClient) (cmqr ConnectionMonitorQueryResult, err error) {
4883	var done bool
4884	done, err = future.Done(client)
4885	if err != nil {
4886		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", future.Response(), "Polling failure")
4887		return
4888	}
4889	if !done {
4890		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsQueryFuture")
4891		return
4892	}
4893	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
4894	if cmqr.Response.Response, err = future.GetResult(sender); err == nil && cmqr.Response.Response.StatusCode != http.StatusNoContent {
4895		cmqr, err = client.QueryResponder(cmqr.Response.Response)
4896		if err != nil {
4897			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", cmqr.Response.Response, "Failure responding to request")
4898		}
4899	}
4900	return
4901}
4902
4903// ConnectionMonitorsStartFuture an abstraction for monitoring and retrieving the results of a long-running
4904// operation.
4905type ConnectionMonitorsStartFuture struct {
4906	azure.Future
4907}
4908
4909// Result returns the result of the asynchronous operation.
4910// If the operation has not completed it will return an error.
4911func (future *ConnectionMonitorsStartFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
4912	var done bool
4913	done, err = future.Done(client)
4914	if err != nil {
4915		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStartFuture", "Result", future.Response(), "Polling failure")
4916		return
4917	}
4918	if !done {
4919		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStartFuture")
4920		return
4921	}
4922	ar.Response = future.Response()
4923	return
4924}
4925
4926// ConnectionMonitorsStopFuture an abstraction for monitoring and retrieving the results of a long-running
4927// operation.
4928type ConnectionMonitorsStopFuture struct {
4929	azure.Future
4930}
4931
4932// Result returns the result of the asynchronous operation.
4933// If the operation has not completed it will return an error.
4934func (future *ConnectionMonitorsStopFuture) Result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
4935	var done bool
4936	done, err = future.Done(client)
4937	if err != nil {
4938		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStopFuture", "Result", future.Response(), "Polling failure")
4939		return
4940	}
4941	if !done {
4942		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStopFuture")
4943		return
4944	}
4945	ar.Response = future.Response()
4946	return
4947}
4948
4949// ConnectionResetSharedKey the virtual network connection reset shared key
4950type ConnectionResetSharedKey struct {
4951	autorest.Response `json:"-"`
4952	// KeyLength - The virtual network connection reset shared key length, should between 1 and 128.
4953	KeyLength *int32 `json:"keyLength,omitempty"`
4954}
4955
4956// ConnectionSharedKey response for GetConnectionSharedKey API service call
4957type ConnectionSharedKey struct {
4958	autorest.Response `json:"-"`
4959	// Value - The virtual network connection shared key value.
4960	Value *string `json:"value,omitempty"`
4961}
4962
4963// ConnectionStateSnapshot connection state snapshot.
4964type ConnectionStateSnapshot struct {
4965	// ConnectionState - The connection state. Possible values include: 'ConnectionStateReachable', 'ConnectionStateUnreachable', 'ConnectionStateUnknown'
4966	ConnectionState ConnectionState `json:"connectionState,omitempty"`
4967	// StartTime - The start time of the connection snapshot.
4968	StartTime *date.Time `json:"startTime,omitempty"`
4969	// EndTime - The end time of the connection snapshot.
4970	EndTime *date.Time `json:"endTime,omitempty"`
4971	// EvaluationState - Connectivity analysis evaluation state. Possible values include: 'NotStarted', 'InProgress', 'Completed'
4972	EvaluationState EvaluationState `json:"evaluationState,omitempty"`
4973	// Hops - List of hops between the source and the destination.
4974	Hops *[]ConnectivityHop `json:"hops,omitempty"`
4975}
4976
4977// ConnectivityDestination parameters that define destination of connection.
4978type ConnectivityDestination struct {
4979	// ResourceID - The ID of the resource to which a connection attempt will be made.
4980	ResourceID *string `json:"resourceId,omitempty"`
4981	// Address - The IP address or URI the resource to which a connection attempt will be made.
4982	Address *string `json:"address,omitempty"`
4983	// Port - Port on which check connectivity will be performed.
4984	Port *int32 `json:"port,omitempty"`
4985}
4986
4987// ConnectivityHop information about a hop between the source and the destination.
4988type ConnectivityHop struct {
4989	// Type - The type of the hop.
4990	Type *string `json:"type,omitempty"`
4991	// ID - The ID of the hop.
4992	ID *string `json:"id,omitempty"`
4993	// Address - The IP address of the hop.
4994	Address *string `json:"address,omitempty"`
4995	// ResourceID - The ID of the resource corresponding to this hop.
4996	ResourceID *string `json:"resourceId,omitempty"`
4997	// NextHopIds - List of next hop identifiers.
4998	NextHopIds *[]string `json:"nextHopIds,omitempty"`
4999	// Issues - List of issues.
5000	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
5001}
5002
5003// ConnectivityInformation information on the connectivity status.
5004type ConnectivityInformation struct {
5005	autorest.Response `json:"-"`
5006	// Hops - List of hops between the source and the destination.
5007	Hops *[]ConnectivityHop `json:"hops,omitempty"`
5008	// ConnectionStatus - The connection status. Possible values include: 'ConnectionStatusUnknown', 'ConnectionStatusConnected', 'ConnectionStatusDisconnected', 'ConnectionStatusDegraded'
5009	ConnectionStatus ConnectionStatus `json:"connectionStatus,omitempty"`
5010	// AvgLatencyInMs - Average latency in milliseconds.
5011	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
5012	// MinLatencyInMs - Minimum latency in milliseconds.
5013	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
5014	// MaxLatencyInMs - Maximum latency in milliseconds.
5015	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
5016	// ProbesSent - Total number of probes sent.
5017	ProbesSent *int32 `json:"probesSent,omitempty"`
5018	// ProbesFailed - Number of failed probes.
5019	ProbesFailed *int32 `json:"probesFailed,omitempty"`
5020}
5021
5022// ConnectivityIssue information about an issue encountered in the process of checking for connectivity.
5023type ConnectivityIssue struct {
5024	// Origin - The origin of the issue. Possible values include: 'OriginLocal', 'OriginInbound', 'OriginOutbound'
5025	Origin Origin `json:"origin,omitempty"`
5026	// Severity - The severity of the issue. Possible values include: 'SeverityError', 'SeverityWarning'
5027	Severity Severity `json:"severity,omitempty"`
5028	// Type - The type of issue. Possible values include: 'IssueTypeUnknown', 'IssueTypeAgentStopped', 'IssueTypeGuestFirewall', 'IssueTypeDNSResolution', 'IssueTypeSocketBind', 'IssueTypeNetworkSecurityRule', 'IssueTypeUserDefinedRoute', 'IssueTypePortThrottled', 'IssueTypePlatform'
5029	Type IssueType `json:"type,omitempty"`
5030	// Context - Provides additional context on the issue.
5031	Context *[]map[string]*string `json:"context,omitempty"`
5032}
5033
5034// ConnectivityParameters parameters that determine how the connectivity check will be performed.
5035type ConnectivityParameters struct {
5036	Source      *ConnectivitySource      `json:"source,omitempty"`
5037	Destination *ConnectivityDestination `json:"destination,omitempty"`
5038}
5039
5040// ConnectivitySource parameters that define the source of the connection.
5041type ConnectivitySource struct {
5042	// ResourceID - The ID of the resource from which a connectivity check will be initiated.
5043	ResourceID *string `json:"resourceId,omitempty"`
5044	// Port - The source port from which a connectivity check will be performed.
5045	Port *int32 `json:"port,omitempty"`
5046}
5047
5048// DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual network.
5049// Standard DHCP option for a subnet overrides VNET DHCP options.
5050type DhcpOptions struct {
5051	// DNSServers - The list of DNS servers IP addresses.
5052	DNSServers *[]string `json:"dnsServers,omitempty"`
5053}
5054
5055// Dimension dimension of the metric.
5056type Dimension struct {
5057	// Name - The name of the dimension.
5058	Name *string `json:"name,omitempty"`
5059	// DisplayName - The display name of the dimension.
5060	DisplayName *string `json:"displayName,omitempty"`
5061	// InternalName - The internal name of the dimension.
5062	InternalName *string `json:"internalName,omitempty"`
5063}
5064
5065// DNSNameAvailabilityResult response for the CheckDnsNameAvailability API service call.
5066type DNSNameAvailabilityResult struct {
5067	autorest.Response `json:"-"`
5068	// Available - Domain availability (True/False).
5069	Available *bool `json:"available,omitempty"`
5070}
5071
5072// EffectiveNetworkSecurityGroup effective network security group.
5073type EffectiveNetworkSecurityGroup struct {
5074	// NetworkSecurityGroup - The ID of network security group that is applied.
5075	NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"`
5076	// Association - Associated resources.
5077	Association *EffectiveNetworkSecurityGroupAssociation `json:"association,omitempty"`
5078	// EffectiveSecurityRules - A collection of effective security rules.
5079	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
5080	// TagMap - Mapping of tags to list of IP Addresses included within the tag.
5081	TagMap map[string][]string `json:"tagMap"`
5082}
5083
5084// MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroup.
5085func (ensg EffectiveNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
5086	objectMap := make(map[string]interface{})
5087	if ensg.NetworkSecurityGroup != nil {
5088		objectMap["networkSecurityGroup"] = ensg.NetworkSecurityGroup
5089	}
5090	if ensg.Association != nil {
5091		objectMap["association"] = ensg.Association
5092	}
5093	if ensg.EffectiveSecurityRules != nil {
5094		objectMap["effectiveSecurityRules"] = ensg.EffectiveSecurityRules
5095	}
5096	if ensg.TagMap != nil {
5097		objectMap["tagMap"] = ensg.TagMap
5098	}
5099	return json.Marshal(objectMap)
5100}
5101
5102// EffectiveNetworkSecurityGroupAssociation the effective network security group association.
5103type EffectiveNetworkSecurityGroupAssociation struct {
5104	// Subnet - The ID of the subnet if assigned.
5105	Subnet *SubResource `json:"subnet,omitempty"`
5106	// NetworkInterface - The ID of the network interface if assigned.
5107	NetworkInterface *SubResource `json:"networkInterface,omitempty"`
5108}
5109
5110// EffectiveNetworkSecurityGroupListResult response for list effective network security groups API service call.
5111type EffectiveNetworkSecurityGroupListResult struct {
5112	autorest.Response `json:"-"`
5113	// Value - A list of effective network security groups.
5114	Value *[]EffectiveNetworkSecurityGroup `json:"value,omitempty"`
5115	// NextLink - The URL to get the next set of results.
5116	NextLink *string `json:"nextLink,omitempty"`
5117}
5118
5119// EffectiveNetworkSecurityRule effective network security rules.
5120type EffectiveNetworkSecurityRule struct {
5121	// Name - The name of the security rule specified by the user (if created by the user).
5122	Name *string `json:"name,omitempty"`
5123	// Protocol - The network protocol this rule applies to. Possible values are: 'Tcp', 'Udp', and 'All'. Possible values include: 'TCP', 'UDP', 'All'
5124	Protocol EffectiveSecurityRuleProtocol `json:"protocol,omitempty"`
5125	// SourcePortRange - The source port or range.
5126	SourcePortRange *string `json:"sourcePortRange,omitempty"`
5127	// DestinationPortRange - The destination port or range.
5128	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
5129	// SourcePortRanges - The source port ranges. Expected values include a single integer between 0 and 65535, a range using '-' as seperator (e.g. 100-400), or an asterix (*)
5130	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
5131	// DestinationPortRanges - The destination port ranges. Expected values include a single integer between 0 and 65535, a range using '-' as seperator (e.g. 100-400), or an asterix (*)
5132	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
5133	// SourceAddressPrefix - The source address prefix.
5134	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
5135	// DestinationAddressPrefix - The destination address prefix.
5136	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
5137	// SourceAddressPrefixes - The source address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AureLoadBalancer, Internet), System Tags, and the asterix (*).
5138	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
5139	// DestinationAddressPrefixes - The destination address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AureLoadBalancer, Internet), System Tags, and the asterix (*).
5140	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
5141	// ExpandedSourceAddressPrefix - The expanded source address prefix.
5142	ExpandedSourceAddressPrefix *[]string `json:"expandedSourceAddressPrefix,omitempty"`
5143	// ExpandedDestinationAddressPrefix - Expanded destination address prefix.
5144	ExpandedDestinationAddressPrefix *[]string `json:"expandedDestinationAddressPrefix,omitempty"`
5145	// Access - Whether network traffic is allowed or denied. Possible values are: 'Allow' and 'Deny'. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
5146	Access SecurityRuleAccess `json:"access,omitempty"`
5147	// Priority - The priority of the rule.
5148	Priority *int32 `json:"priority,omitempty"`
5149	// Direction - The direction of the rule. Possible values are: 'Inbound and Outbound'. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
5150	Direction SecurityRuleDirection `json:"direction,omitempty"`
5151}
5152
5153// EffectiveRoute effective Route
5154type EffectiveRoute struct {
5155	// Name - The name of the user defined route. This is optional.
5156	Name *string `json:"name,omitempty"`
5157	// Source - Who created the route. Possible values are: 'Unknown', 'User', 'VirtualNetworkGateway', and 'Default'. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault'
5158	Source EffectiveRouteSource `json:"source,omitempty"`
5159	// State - The value of effective route. Possible values are: 'Active' and 'Invalid'. Possible values include: 'Active', 'Invalid'
5160	State EffectiveRouteState `json:"state,omitempty"`
5161	// AddressPrefix - The address prefixes of the effective routes in CIDR notation.
5162	AddressPrefix *[]string `json:"addressPrefix,omitempty"`
5163	// NextHopIPAddress - The IP address of the next hop of the effective route.
5164	NextHopIPAddress *[]string `json:"nextHopIpAddress,omitempty"`
5165	// 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'
5166	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
5167}
5168
5169// EffectiveRouteListResult response for list effective route API service call.
5170type EffectiveRouteListResult struct {
5171	autorest.Response `json:"-"`
5172	// Value - A list of effective routes.
5173	Value *[]EffectiveRoute `json:"value,omitempty"`
5174	// NextLink - The URL to get the next set of results.
5175	NextLink *string `json:"nextLink,omitempty"`
5176}
5177
5178// EndpointServiceResult endpoint service.
5179type EndpointServiceResult struct {
5180	// Name - Name of the endpoint service.
5181	Name *string `json:"name,omitempty"`
5182	// Type - Type of the endpoint service.
5183	Type *string `json:"type,omitempty"`
5184	// ID - Resource ID.
5185	ID *string `json:"id,omitempty"`
5186}
5187
5188// EndpointServicesListResult response for the ListAvailableEndpointServices API service call.
5189type EndpointServicesListResult struct {
5190	autorest.Response `json:"-"`
5191	// Value - List of available endpoint services in a region.
5192	Value *[]EndpointServiceResult `json:"value,omitempty"`
5193	// NextLink - The URL to get the next set of results.
5194	NextLink *string `json:"nextLink,omitempty"`
5195}
5196
5197// EndpointServicesListResultIterator provides access to a complete listing of EndpointServiceResult values.
5198type EndpointServicesListResultIterator struct {
5199	i    int
5200	page EndpointServicesListResultPage
5201}
5202
5203// Next advances to the next value.  If there was an error making
5204// the request the iterator does not advance and the error is returned.
5205func (iter *EndpointServicesListResultIterator) Next() error {
5206	iter.i++
5207	if iter.i < len(iter.page.Values()) {
5208		return nil
5209	}
5210	err := iter.page.Next()
5211	if err != nil {
5212		iter.i--
5213		return err
5214	}
5215	iter.i = 0
5216	return nil
5217}
5218
5219// NotDone returns true if the enumeration should be started or is not yet complete.
5220func (iter EndpointServicesListResultIterator) NotDone() bool {
5221	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5222}
5223
5224// Response returns the raw server response from the last page request.
5225func (iter EndpointServicesListResultIterator) Response() EndpointServicesListResult {
5226	return iter.page.Response()
5227}
5228
5229// Value returns the current value or a zero-initialized value if the
5230// iterator has advanced beyond the end of the collection.
5231func (iter EndpointServicesListResultIterator) Value() EndpointServiceResult {
5232	if !iter.page.NotDone() {
5233		return EndpointServiceResult{}
5234	}
5235	return iter.page.Values()[iter.i]
5236}
5237
5238// IsEmpty returns true if the ListResult contains no values.
5239func (eslr EndpointServicesListResult) IsEmpty() bool {
5240	return eslr.Value == nil || len(*eslr.Value) == 0
5241}
5242
5243// endpointServicesListResultPreparer prepares a request to retrieve the next set of results.
5244// It returns nil if no more results exist.
5245func (eslr EndpointServicesListResult) endpointServicesListResultPreparer() (*http.Request, error) {
5246	if eslr.NextLink == nil || len(to.String(eslr.NextLink)) < 1 {
5247		return nil, nil
5248	}
5249	return autorest.Prepare(&http.Request{},
5250		autorest.AsJSON(),
5251		autorest.AsGet(),
5252		autorest.WithBaseURL(to.String(eslr.NextLink)))
5253}
5254
5255// EndpointServicesListResultPage contains a page of EndpointServiceResult values.
5256type EndpointServicesListResultPage struct {
5257	fn   func(EndpointServicesListResult) (EndpointServicesListResult, error)
5258	eslr EndpointServicesListResult
5259}
5260
5261// Next advances to the next page of values.  If there was an error making
5262// the request the page does not advance and the error is returned.
5263func (page *EndpointServicesListResultPage) Next() error {
5264	next, err := page.fn(page.eslr)
5265	if err != nil {
5266		return err
5267	}
5268	page.eslr = next
5269	return nil
5270}
5271
5272// NotDone returns true if the page enumeration should be started or is not yet complete.
5273func (page EndpointServicesListResultPage) NotDone() bool {
5274	return !page.eslr.IsEmpty()
5275}
5276
5277// Response returns the raw server response from the last page request.
5278func (page EndpointServicesListResultPage) Response() EndpointServicesListResult {
5279	return page.eslr
5280}
5281
5282// Values returns the slice of values for the current page or nil if there are no values.
5283func (page EndpointServicesListResultPage) Values() []EndpointServiceResult {
5284	if page.eslr.IsEmpty() {
5285		return nil
5286	}
5287	return *page.eslr.Value
5288}
5289
5290// Error ...
5291type Error struct {
5292	Code       *string         `json:"code,omitempty"`
5293	Message    *string         `json:"message,omitempty"`
5294	Target     *string         `json:"target,omitempty"`
5295	Details    *[]ErrorDetails `json:"details,omitempty"`
5296	InnerError *string         `json:"innerError,omitempty"`
5297}
5298
5299// ErrorDetails ...
5300type ErrorDetails struct {
5301	Code    *string `json:"code,omitempty"`
5302	Target  *string `json:"target,omitempty"`
5303	Message *string `json:"message,omitempty"`
5304}
5305
5306// ExpressRouteCircuit expressRouteCircuit resource
5307type ExpressRouteCircuit struct {
5308	autorest.Response `json:"-"`
5309	// Sku - The SKU.
5310	Sku                                  *ExpressRouteCircuitSku `json:"sku,omitempty"`
5311	*ExpressRouteCircuitPropertiesFormat `json:"properties,omitempty"`
5312	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
5313	Etag *string `json:"etag,omitempty"`
5314	// ID - Resource ID.
5315	ID *string `json:"id,omitempty"`
5316	// Name - Resource name.
5317	Name *string `json:"name,omitempty"`
5318	// Type - Resource type.
5319	Type *string `json:"type,omitempty"`
5320	// Location - Resource location.
5321	Location *string `json:"location,omitempty"`
5322	// Tags - Resource tags.
5323	Tags map[string]*string `json:"tags"`
5324}
5325
5326// MarshalJSON is the custom marshaler for ExpressRouteCircuit.
5327func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) {
5328	objectMap := make(map[string]interface{})
5329	if erc.Sku != nil {
5330		objectMap["sku"] = erc.Sku
5331	}
5332	if erc.ExpressRouteCircuitPropertiesFormat != nil {
5333		objectMap["properties"] = erc.ExpressRouteCircuitPropertiesFormat
5334	}
5335	if erc.Etag != nil {
5336		objectMap["etag"] = erc.Etag
5337	}
5338	if erc.ID != nil {
5339		objectMap["id"] = erc.ID
5340	}
5341	if erc.Name != nil {
5342		objectMap["name"] = erc.Name
5343	}
5344	if erc.Type != nil {
5345		objectMap["type"] = erc.Type
5346	}
5347	if erc.Location != nil {
5348		objectMap["location"] = erc.Location
5349	}
5350	if erc.Tags != nil {
5351		objectMap["tags"] = erc.Tags
5352	}
5353	return json.Marshal(objectMap)
5354}
5355
5356// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuit struct.
5357func (erc *ExpressRouteCircuit) UnmarshalJSON(body []byte) error {
5358	var m map[string]*json.RawMessage
5359	err := json.Unmarshal(body, &m)
5360	if err != nil {
5361		return err
5362	}
5363	for k, v := range m {
5364		switch k {
5365		case "sku":
5366			if v != nil {
5367				var sku ExpressRouteCircuitSku
5368				err = json.Unmarshal(*v, &sku)
5369				if err != nil {
5370					return err
5371				}
5372				erc.Sku = &sku
5373			}
5374		case "properties":
5375			if v != nil {
5376				var expressRouteCircuitPropertiesFormat ExpressRouteCircuitPropertiesFormat
5377				err = json.Unmarshal(*v, &expressRouteCircuitPropertiesFormat)
5378				if err != nil {
5379					return err
5380				}
5381				erc.ExpressRouteCircuitPropertiesFormat = &expressRouteCircuitPropertiesFormat
5382			}
5383		case "etag":
5384			if v != nil {
5385				var etag string
5386				err = json.Unmarshal(*v, &etag)
5387				if err != nil {
5388					return err
5389				}
5390				erc.Etag = &etag
5391			}
5392		case "id":
5393			if v != nil {
5394				var ID string
5395				err = json.Unmarshal(*v, &ID)
5396				if err != nil {
5397					return err
5398				}
5399				erc.ID = &ID
5400			}
5401		case "name":
5402			if v != nil {
5403				var name string
5404				err = json.Unmarshal(*v, &name)
5405				if err != nil {
5406					return err
5407				}
5408				erc.Name = &name
5409			}
5410		case "type":
5411			if v != nil {
5412				var typeVar string
5413				err = json.Unmarshal(*v, &typeVar)
5414				if err != nil {
5415					return err
5416				}
5417				erc.Type = &typeVar
5418			}
5419		case "location":
5420			if v != nil {
5421				var location string
5422				err = json.Unmarshal(*v, &location)
5423				if err != nil {
5424					return err
5425				}
5426				erc.Location = &location
5427			}
5428		case "tags":
5429			if v != nil {
5430				var tags map[string]*string
5431				err = json.Unmarshal(*v, &tags)
5432				if err != nil {
5433					return err
5434				}
5435				erc.Tags = tags
5436			}
5437		}
5438	}
5439
5440	return nil
5441}
5442
5443// ExpressRouteCircuitArpTable the ARP table associated with the ExpressRouteCircuit.
5444type ExpressRouteCircuitArpTable struct {
5445	// Age - Age
5446	Age *int32 `json:"age,omitempty"`
5447	// Interface - Interface
5448	Interface *string `json:"interface,omitempty"`
5449	// IPAddress - The IP address.
5450	IPAddress *string `json:"ipAddress,omitempty"`
5451	// MacAddress - The MAC address.
5452	MacAddress *string `json:"macAddress,omitempty"`
5453}
5454
5455// ExpressRouteCircuitAuthorization authorization in an ExpressRouteCircuit resource.
5456type ExpressRouteCircuitAuthorization struct {
5457	autorest.Response              `json:"-"`
5458	*AuthorizationPropertiesFormat `json:"properties,omitempty"`
5459	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
5460	Name *string `json:"name,omitempty"`
5461	// Etag - A unique read-only string that changes whenever the resource is updated.
5462	Etag *string `json:"etag,omitempty"`
5463	// ID - Resource ID.
5464	ID *string `json:"id,omitempty"`
5465}
5466
5467// MarshalJSON is the custom marshaler for ExpressRouteCircuitAuthorization.
5468func (erca ExpressRouteCircuitAuthorization) MarshalJSON() ([]byte, error) {
5469	objectMap := make(map[string]interface{})
5470	if erca.AuthorizationPropertiesFormat != nil {
5471		objectMap["properties"] = erca.AuthorizationPropertiesFormat
5472	}
5473	if erca.Name != nil {
5474		objectMap["name"] = erca.Name
5475	}
5476	if erca.Etag != nil {
5477		objectMap["etag"] = erca.Etag
5478	}
5479	if erca.ID != nil {
5480		objectMap["id"] = erca.ID
5481	}
5482	return json.Marshal(objectMap)
5483}
5484
5485// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitAuthorization struct.
5486func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error {
5487	var m map[string]*json.RawMessage
5488	err := json.Unmarshal(body, &m)
5489	if err != nil {
5490		return err
5491	}
5492	for k, v := range m {
5493		switch k {
5494		case "properties":
5495			if v != nil {
5496				var authorizationPropertiesFormat AuthorizationPropertiesFormat
5497				err = json.Unmarshal(*v, &authorizationPropertiesFormat)
5498				if err != nil {
5499					return err
5500				}
5501				erca.AuthorizationPropertiesFormat = &authorizationPropertiesFormat
5502			}
5503		case "name":
5504			if v != nil {
5505				var name string
5506				err = json.Unmarshal(*v, &name)
5507				if err != nil {
5508					return err
5509				}
5510				erca.Name = &name
5511			}
5512		case "etag":
5513			if v != nil {
5514				var etag string
5515				err = json.Unmarshal(*v, &etag)
5516				if err != nil {
5517					return err
5518				}
5519				erca.Etag = &etag
5520			}
5521		case "id":
5522			if v != nil {
5523				var ID string
5524				err = json.Unmarshal(*v, &ID)
5525				if err != nil {
5526					return err
5527				}
5528				erca.ID = &ID
5529			}
5530		}
5531	}
5532
5533	return nil
5534}
5535
5536// ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
5537// of a long-running operation.
5538type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct {
5539	azure.Future
5540}
5541
5542// Result returns the result of the asynchronous operation.
5543// If the operation has not completed it will return an error.
5544func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) {
5545	var done bool
5546	done, err = future.Done(client)
5547	if err != nil {
5548		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
5549		return
5550	}
5551	if !done {
5552		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture")
5553		return
5554	}
5555	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5556	if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent {
5557		erca, err = client.CreateOrUpdateResponder(erca.Response.Response)
5558		if err != nil {
5559			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request")
5560		}
5561	}
5562	return
5563}
5564
5565// ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results of a
5566// long-running operation.
5567type ExpressRouteCircuitAuthorizationsDeleteFuture struct {
5568	azure.Future
5569}
5570
5571// Result returns the result of the asynchronous operation.
5572// If the operation has not completed it will return an error.
5573func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) Result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) {
5574	var done bool
5575	done, err = future.Done(client)
5576	if err != nil {
5577		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure")
5578		return
5579	}
5580	if !done {
5581		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture")
5582		return
5583	}
5584	ar.Response = future.Response()
5585	return
5586}
5587
5588// ExpressRouteCircuitListResult response for ListExpressRouteCircuit API service call.
5589type ExpressRouteCircuitListResult struct {
5590	autorest.Response `json:"-"`
5591	// Value - A list of ExpressRouteCircuits in a resource group.
5592	Value *[]ExpressRouteCircuit `json:"value,omitempty"`
5593	// NextLink - The URL to get the next set of results.
5594	NextLink *string `json:"nextLink,omitempty"`
5595}
5596
5597// ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit values.
5598type ExpressRouteCircuitListResultIterator struct {
5599	i    int
5600	page ExpressRouteCircuitListResultPage
5601}
5602
5603// Next advances to the next value.  If there was an error making
5604// the request the iterator does not advance and the error is returned.
5605func (iter *ExpressRouteCircuitListResultIterator) Next() error {
5606	iter.i++
5607	if iter.i < len(iter.page.Values()) {
5608		return nil
5609	}
5610	err := iter.page.Next()
5611	if err != nil {
5612		iter.i--
5613		return err
5614	}
5615	iter.i = 0
5616	return nil
5617}
5618
5619// NotDone returns true if the enumeration should be started or is not yet complete.
5620func (iter ExpressRouteCircuitListResultIterator) NotDone() bool {
5621	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5622}
5623
5624// Response returns the raw server response from the last page request.
5625func (iter ExpressRouteCircuitListResultIterator) Response() ExpressRouteCircuitListResult {
5626	return iter.page.Response()
5627}
5628
5629// Value returns the current value or a zero-initialized value if the
5630// iterator has advanced beyond the end of the collection.
5631func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit {
5632	if !iter.page.NotDone() {
5633		return ExpressRouteCircuit{}
5634	}
5635	return iter.page.Values()[iter.i]
5636}
5637
5638// IsEmpty returns true if the ListResult contains no values.
5639func (erclr ExpressRouteCircuitListResult) IsEmpty() bool {
5640	return erclr.Value == nil || len(*erclr.Value) == 0
5641}
5642
5643// expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results.
5644// It returns nil if no more results exist.
5645func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer() (*http.Request, error) {
5646	if erclr.NextLink == nil || len(to.String(erclr.NextLink)) < 1 {
5647		return nil, nil
5648	}
5649	return autorest.Prepare(&http.Request{},
5650		autorest.AsJSON(),
5651		autorest.AsGet(),
5652		autorest.WithBaseURL(to.String(erclr.NextLink)))
5653}
5654
5655// ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values.
5656type ExpressRouteCircuitListResultPage struct {
5657	fn    func(ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)
5658	erclr ExpressRouteCircuitListResult
5659}
5660
5661// Next advances to the next page of values.  If there was an error making
5662// the request the page does not advance and the error is returned.
5663func (page *ExpressRouteCircuitListResultPage) Next() error {
5664	next, err := page.fn(page.erclr)
5665	if err != nil {
5666		return err
5667	}
5668	page.erclr = next
5669	return nil
5670}
5671
5672// NotDone returns true if the page enumeration should be started or is not yet complete.
5673func (page ExpressRouteCircuitListResultPage) NotDone() bool {
5674	return !page.erclr.IsEmpty()
5675}
5676
5677// Response returns the raw server response from the last page request.
5678func (page ExpressRouteCircuitListResultPage) Response() ExpressRouteCircuitListResult {
5679	return page.erclr
5680}
5681
5682// Values returns the slice of values for the current page or nil if there are no values.
5683func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit {
5684	if page.erclr.IsEmpty() {
5685		return nil
5686	}
5687	return *page.erclr.Value
5688}
5689
5690// ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource.
5691type ExpressRouteCircuitPeering struct {
5692	autorest.Response                           `json:"-"`
5693	*ExpressRouteCircuitPeeringPropertiesFormat `json:"properties,omitempty"`
5694	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
5695	Name *string `json:"name,omitempty"`
5696	// Etag - A unique read-only string that changes whenever the resource is updated.
5697	Etag *string `json:"etag,omitempty"`
5698	// ID - Resource ID.
5699	ID *string `json:"id,omitempty"`
5700}
5701
5702// MarshalJSON is the custom marshaler for ExpressRouteCircuitPeering.
5703func (ercp ExpressRouteCircuitPeering) MarshalJSON() ([]byte, error) {
5704	objectMap := make(map[string]interface{})
5705	if ercp.ExpressRouteCircuitPeeringPropertiesFormat != nil {
5706		objectMap["properties"] = ercp.ExpressRouteCircuitPeeringPropertiesFormat
5707	}
5708	if ercp.Name != nil {
5709		objectMap["name"] = ercp.Name
5710	}
5711	if ercp.Etag != nil {
5712		objectMap["etag"] = ercp.Etag
5713	}
5714	if ercp.ID != nil {
5715		objectMap["id"] = ercp.ID
5716	}
5717	return json.Marshal(objectMap)
5718}
5719
5720// UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitPeering struct.
5721func (ercp *ExpressRouteCircuitPeering) UnmarshalJSON(body []byte) error {
5722	var m map[string]*json.RawMessage
5723	err := json.Unmarshal(body, &m)
5724	if err != nil {
5725		return err
5726	}
5727	for k, v := range m {
5728		switch k {
5729		case "properties":
5730			if v != nil {
5731				var expressRouteCircuitPeeringPropertiesFormat ExpressRouteCircuitPeeringPropertiesFormat
5732				err = json.Unmarshal(*v, &expressRouteCircuitPeeringPropertiesFormat)
5733				if err != nil {
5734					return err
5735				}
5736				ercp.ExpressRouteCircuitPeeringPropertiesFormat = &expressRouteCircuitPeeringPropertiesFormat
5737			}
5738		case "name":
5739			if v != nil {
5740				var name string
5741				err = json.Unmarshal(*v, &name)
5742				if err != nil {
5743					return err
5744				}
5745				ercp.Name = &name
5746			}
5747		case "etag":
5748			if v != nil {
5749				var etag string
5750				err = json.Unmarshal(*v, &etag)
5751				if err != nil {
5752					return err
5753				}
5754				ercp.Etag = &etag
5755			}
5756		case "id":
5757			if v != nil {
5758				var ID string
5759				err = json.Unmarshal(*v, &ID)
5760				if err != nil {
5761					return err
5762				}
5763				ercp.ID = &ID
5764			}
5765		}
5766	}
5767
5768	return nil
5769}
5770
5771// ExpressRouteCircuitPeeringConfig specifies the peering configuration.
5772type ExpressRouteCircuitPeeringConfig struct {
5773	// AdvertisedPublicPrefixes - The reference of AdvertisedPublicPrefixes.
5774	AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"`
5775	// AdvertisedCommunities - The communities of bgp peering. Spepcified for microsoft peering
5776	AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"`
5777	// AdvertisedPublicPrefixesState - AdvertisedPublicPrefixState of the Peering resource. Possible values are 'NotConfigured', 'Configuring', 'Configured', and 'ValidationNeeded'. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
5778	AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"`
5779	// LegacyMode - The legacy mode of the peering.
5780	LegacyMode *int32 `json:"legacyMode,omitempty"`
5781	// CustomerASN - The CustomerASN of the peering.
5782	CustomerASN *int32 `json:"customerASN,omitempty"`
5783	// RoutingRegistryName - The RoutingRegistryName of the configuration.
5784	RoutingRegistryName *string `json:"routingRegistryName,omitempty"`
5785}
5786
5787// ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings that
5788// belong to an ExpressRouteCircuit.
5789type ExpressRouteCircuitPeeringListResult struct {
5790	autorest.Response `json:"-"`
5791	// Value - The peerings in an express route circuit.
5792	Value *[]ExpressRouteCircuitPeering `json:"value,omitempty"`
5793	// NextLink - The URL to get the next set of results.
5794	NextLink *string `json:"nextLink,omitempty"`
5795}
5796
5797// ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of ExpressRouteCircuitPeering
5798// values.
5799type ExpressRouteCircuitPeeringListResultIterator struct {
5800	i    int
5801	page ExpressRouteCircuitPeeringListResultPage
5802}
5803
5804// Next advances to the next value.  If there was an error making
5805// the request the iterator does not advance and the error is returned.
5806func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error {
5807	iter.i++
5808	if iter.i < len(iter.page.Values()) {
5809		return nil
5810	}
5811	err := iter.page.Next()
5812	if err != nil {
5813		iter.i--
5814		return err
5815	}
5816	iter.i = 0
5817	return nil
5818}
5819
5820// NotDone returns true if the enumeration should be started or is not yet complete.
5821func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool {
5822	return iter.page.NotDone() && iter.i < len(iter.page.Values())
5823}
5824
5825// Response returns the raw server response from the last page request.
5826func (iter ExpressRouteCircuitPeeringListResultIterator) Response() ExpressRouteCircuitPeeringListResult {
5827	return iter.page.Response()
5828}
5829
5830// Value returns the current value or a zero-initialized value if the
5831// iterator has advanced beyond the end of the collection.
5832func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCircuitPeering {
5833	if !iter.page.NotDone() {
5834		return ExpressRouteCircuitPeering{}
5835	}
5836	return iter.page.Values()[iter.i]
5837}
5838
5839// IsEmpty returns true if the ListResult contains no values.
5840func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool {
5841	return ercplr.Value == nil || len(*ercplr.Value) == 0
5842}
5843
5844// expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results.
5845// It returns nil if no more results exist.
5846func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer() (*http.Request, error) {
5847	if ercplr.NextLink == nil || len(to.String(ercplr.NextLink)) < 1 {
5848		return nil, nil
5849	}
5850	return autorest.Prepare(&http.Request{},
5851		autorest.AsJSON(),
5852		autorest.AsGet(),
5853		autorest.WithBaseURL(to.String(ercplr.NextLink)))
5854}
5855
5856// ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values.
5857type ExpressRouteCircuitPeeringListResultPage struct {
5858	fn     func(ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)
5859	ercplr ExpressRouteCircuitPeeringListResult
5860}
5861
5862// Next advances to the next page of values.  If there was an error making
5863// the request the page does not advance and the error is returned.
5864func (page *ExpressRouteCircuitPeeringListResultPage) Next() error {
5865	next, err := page.fn(page.ercplr)
5866	if err != nil {
5867		return err
5868	}
5869	page.ercplr = next
5870	return nil
5871}
5872
5873// NotDone returns true if the page enumeration should be started or is not yet complete.
5874func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool {
5875	return !page.ercplr.IsEmpty()
5876}
5877
5878// Response returns the raw server response from the last page request.
5879func (page ExpressRouteCircuitPeeringListResultPage) Response() ExpressRouteCircuitPeeringListResult {
5880	return page.ercplr
5881}
5882
5883// Values returns the slice of values for the current page or nil if there are no values.
5884func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCircuitPeering {
5885	if page.ercplr.IsEmpty() {
5886		return nil
5887	}
5888	return *page.ercplr.Value
5889}
5890
5891// ExpressRouteCircuitPeeringPropertiesFormat ...
5892type ExpressRouteCircuitPeeringPropertiesFormat struct {
5893	// PeeringType - The PeeringType. Possible values are: 'AzurePublicPeering', 'AzurePrivatePeering', and 'MicrosoftPeering'. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
5894	PeeringType ExpressRouteCircuitPeeringType `json:"peeringType,omitempty"`
5895	// State - The state of peering. Possible values are: 'Disabled' and 'Enabled'. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
5896	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
5897	// AzureASN - The Azure ASN.
5898	AzureASN *int32 `json:"azureASN,omitempty"`
5899	// PeerASN - The peer ASN.
5900	PeerASN *int64 `json:"peerASN,omitempty"`
5901	// PrimaryPeerAddressPrefix - The primary address prefix.
5902	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
5903	// SecondaryPeerAddressPrefix - The secondary address prefix.
5904	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
5905	// PrimaryAzurePort - The primary port.
5906	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
5907	// SecondaryAzurePort - The secondary port.
5908	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
5909	// SharedKey - The shared key.
5910	SharedKey *string `json:"sharedKey,omitempty"`
5911	// VlanID - The VLAN ID.
5912	VlanID *int32 `json:"vlanId,omitempty"`
5913	// MicrosoftPeeringConfig - The Microsoft peering configuration.
5914	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
5915	// Stats - Gets peering stats.
5916	Stats *ExpressRouteCircuitStats `json:"stats,omitempty"`
5917	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
5918	ProvisioningState *string `json:"provisioningState,omitempty"`
5919	// GatewayManagerEtag - The GatewayManager Etag.
5920	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
5921	// LastModifiedBy - Gets whether the provider or the customer last modified the peering.
5922	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
5923	// RouteFilter - The reference of the RouteFilter resource.
5924	RouteFilter *RouteFilter `json:"routeFilter,omitempty"`
5925	// Ipv6PeeringConfig - The IPv6 peering configuration.
5926	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
5927}
5928
5929// ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
5930// long-running operation.
5931type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct {
5932	azure.Future
5933}
5934
5935// Result returns the result of the asynchronous operation.
5936// If the operation has not completed it will return an error.
5937func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) Result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) {
5938	var done bool
5939	done, err = future.Done(client)
5940	if err != nil {
5941		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
5942		return
5943	}
5944	if !done {
5945		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture")
5946		return
5947	}
5948	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
5949	if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent {
5950		ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response)
5951		if err != nil {
5952			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request")
5953		}
5954	}
5955	return
5956}
5957
5958// ExpressRouteCircuitPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
5959// long-running operation.
5960type ExpressRouteCircuitPeeringsDeleteFuture struct {
5961	azure.Future
5962}
5963
5964// Result returns the result of the asynchronous operation.
5965// If the operation has not completed it will return an error.
5966func (future *ExpressRouteCircuitPeeringsDeleteFuture) Result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) {
5967	var done bool
5968	done, err = future.Done(client)
5969	if err != nil {
5970		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
5971		return
5972	}
5973	if !done {
5974		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture")
5975		return
5976	}
5977	ar.Response = future.Response()
5978	return
5979}
5980
5981// ExpressRouteCircuitPropertiesFormat properties of ExpressRouteCircuit.
5982type ExpressRouteCircuitPropertiesFormat struct {
5983	// AllowClassicOperations - Allow classic operations
5984	AllowClassicOperations *bool `json:"allowClassicOperations,omitempty"`
5985	// CircuitProvisioningState - The CircuitProvisioningState state of the resource.
5986	CircuitProvisioningState *string `json:"circuitProvisioningState,omitempty"`
5987	// ServiceProviderProvisioningState - The ServiceProviderProvisioningState state of the resource. Possible values are 'NotProvisioned', 'Provisioning', 'Provisioned', and 'Deprovisioning'. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
5988	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
5989	// Authorizations - The list of authorizations.
5990	Authorizations *[]ExpressRouteCircuitAuthorization `json:"authorizations,omitempty"`
5991	// Peerings - The list of peerings.
5992	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
5993	// ServiceKey - The ServiceKey.
5994	ServiceKey *string `json:"serviceKey,omitempty"`
5995	// ServiceProviderNotes - The ServiceProviderNotes.
5996	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
5997	// ServiceProviderProperties - The ServiceProviderProperties.
5998	ServiceProviderProperties *ExpressRouteCircuitServiceProviderProperties `json:"serviceProviderProperties,omitempty"`
5999	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
6000	ProvisioningState *string `json:"provisioningState,omitempty"`
6001	// GatewayManagerEtag - The GatewayManager Etag.
6002	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
6003}
6004
6005// ExpressRouteCircuitRoutesTable the routes table associated with the ExpressRouteCircuit
6006type ExpressRouteCircuitRoutesTable struct {
6007	// NetworkProperty - network
6008	NetworkProperty *string `json:"network,omitempty"`
6009	// NextHop - nextHop
6010	NextHop *string `json:"nextHop,omitempty"`
6011	// LocPrf - locPrf
6012	LocPrf *string `json:"locPrf,omitempty"`
6013	// Weight - weight.
6014	Weight *int32 `json:"weight,omitempty"`
6015	// Path - path
6016	Path *string `json:"path,omitempty"`
6017}
6018
6019// ExpressRouteCircuitRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
6020type ExpressRouteCircuitRoutesTableSummary struct {
6021	// Neighbor - Neighbor
6022	Neighbor *string `json:"neighbor,omitempty"`
6023	// V - BGP version number spoken to the neighbor.
6024	V *int32 `json:"v,omitempty"`
6025	// As - Autonomous system number.
6026	As *int32 `json:"as,omitempty"`
6027	// 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.
6028	UpDown *string `json:"upDown,omitempty"`
6029	// StatePfxRcd - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
6030	StatePfxRcd *string `json:"statePfxRcd,omitempty"`
6031}
6032
6033// ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route Circuits API.
6034type ExpressRouteCircuitsArpTableListResult struct {
6035	autorest.Response `json:"-"`
6036	// Value - Gets list of the ARP table.
6037	Value *[]ExpressRouteCircuitArpTable `json:"value,omitempty"`
6038	// NextLink - The URL to get the next set of results.
6039	NextLink *string `json:"nextLink,omitempty"`
6040}
6041
6042// ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
6043// long-running operation.
6044type ExpressRouteCircuitsCreateOrUpdateFuture struct {
6045	azure.Future
6046}
6047
6048// Result returns the result of the asynchronous operation.
6049// If the operation has not completed it will return an error.
6050func (future *ExpressRouteCircuitsCreateOrUpdateFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
6051	var done bool
6052	done, err = future.Done(client)
6053	if err != nil {
6054		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
6055		return
6056	}
6057	if !done {
6058		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture")
6059		return
6060	}
6061	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6062	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
6063		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
6064		if err != nil {
6065			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
6066		}
6067	}
6068	return
6069}
6070
6071// ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
6072// operation.
6073type ExpressRouteCircuitsDeleteFuture struct {
6074	azure.Future
6075}
6076
6077// Result returns the result of the asynchronous operation.
6078// If the operation has not completed it will return an error.
6079func (future *ExpressRouteCircuitsDeleteFuture) Result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) {
6080	var done bool
6081	done, err = future.Done(client)
6082	if err != nil {
6083		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure")
6084		return
6085	}
6086	if !done {
6087		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture")
6088		return
6089	}
6090	ar.Response = future.Response()
6091	return
6092}
6093
6094// ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an ExpressRouteCircuit.
6095type ExpressRouteCircuitServiceProviderProperties struct {
6096	// ServiceProviderName - The serviceProviderName.
6097	ServiceProviderName *string `json:"serviceProviderName,omitempty"`
6098	// PeeringLocation - The peering location.
6099	PeeringLocation *string `json:"peeringLocation,omitempty"`
6100	// BandwidthInMbps - The BandwidthInMbps.
6101	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
6102}
6103
6104// ExpressRouteCircuitSku contains SKU in an ExpressRouteCircuit.
6105type ExpressRouteCircuitSku struct {
6106	// Name - The name of the SKU.
6107	Name *string `json:"name,omitempty"`
6108	// Tier - The tier of the SKU. Possible values are 'Standard' and 'Premium'. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium'
6109	Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"`
6110	// Family - The family of the SKU. Possible values are: 'UnlimitedData' and 'MeteredData'. Possible values include: 'UnlimitedData', 'MeteredData'
6111	Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"`
6112}
6113
6114// ExpressRouteCircuitsListArpTableFuture an abstraction for monitoring and retrieving the results of a
6115// long-running operation.
6116type ExpressRouteCircuitsListArpTableFuture struct {
6117	azure.Future
6118}
6119
6120// Result returns the result of the asynchronous operation.
6121// If the operation has not completed it will return an error.
6122func (future *ExpressRouteCircuitsListArpTableFuture) Result(client ExpressRouteCircuitsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
6123	var done bool
6124	done, err = future.Done(client)
6125	if err != nil {
6126		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", future.Response(), "Polling failure")
6127		return
6128	}
6129	if !done {
6130		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListArpTableFuture")
6131		return
6132	}
6133	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6134	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
6135		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
6136		if err != nil {
6137			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
6138		}
6139	}
6140	return
6141}
6142
6143// ExpressRouteCircuitsListRoutesTableFuture an abstraction for monitoring and retrieving the results of a
6144// long-running operation.
6145type ExpressRouteCircuitsListRoutesTableFuture struct {
6146	azure.Future
6147}
6148
6149// Result returns the result of the asynchronous operation.
6150// If the operation has not completed it will return an error.
6151func (future *ExpressRouteCircuitsListRoutesTableFuture) Result(client ExpressRouteCircuitsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
6152	var done bool
6153	done, err = future.Done(client)
6154	if err != nil {
6155		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
6156		return
6157	}
6158	if !done {
6159		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableFuture")
6160		return
6161	}
6162	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6163	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
6164		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
6165		if err != nil {
6166			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
6167		}
6168	}
6169	return
6170}
6171
6172// ExpressRouteCircuitsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving the results of a
6173// long-running operation.
6174type ExpressRouteCircuitsListRoutesTableSummaryFuture struct {
6175	azure.Future
6176}
6177
6178// Result returns the result of the asynchronous operation.
6179// If the operation has not completed it will return an error.
6180func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) Result(client ExpressRouteCircuitsClient) (ercrtslr ExpressRouteCircuitsRoutesTableSummaryListResult, err error) {
6181	var done bool
6182	done, err = future.Done(client)
6183	if err != nil {
6184		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
6185		return
6186	}
6187	if !done {
6188		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableSummaryFuture")
6189		return
6190	}
6191	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6192	if ercrtslr.Response.Response, err = future.GetResult(sender); err == nil && ercrtslr.Response.Response.StatusCode != http.StatusNoContent {
6193		ercrtslr, err = client.ListRoutesTableSummaryResponder(ercrtslr.Response.Response)
6194		if err != nil {
6195			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", ercrtslr.Response.Response, "Failure responding to request")
6196		}
6197	}
6198	return
6199}
6200
6201// ExpressRouteCircuitsRoutesTableListResult response for ListRoutesTable associated with the Express Route
6202// Circuits API.
6203type ExpressRouteCircuitsRoutesTableListResult struct {
6204	autorest.Response `json:"-"`
6205	// Value - The list of routes table.
6206	Value *[]ExpressRouteCircuitRoutesTable `json:"value,omitempty"`
6207	// NextLink - The URL to get the next set of results.
6208	NextLink *string `json:"nextLink,omitempty"`
6209}
6210
6211// ExpressRouteCircuitsRoutesTableSummaryListResult response for ListRoutesTable associated with the Express Route
6212// Circuits API.
6213type ExpressRouteCircuitsRoutesTableSummaryListResult struct {
6214	autorest.Response `json:"-"`
6215	// Value - A list of the routes table.
6216	Value *[]ExpressRouteCircuitRoutesTableSummary `json:"value,omitempty"`
6217	// NextLink - The URL to get the next set of results.
6218	NextLink *string `json:"nextLink,omitempty"`
6219}
6220
6221// ExpressRouteCircuitStats contains stats associated with the peering.
6222type ExpressRouteCircuitStats struct {
6223	autorest.Response `json:"-"`
6224	// PrimarybytesIn - Gets BytesIn of the peering.
6225	PrimarybytesIn *int64 `json:"primarybytesIn,omitempty"`
6226	// PrimarybytesOut - Gets BytesOut of the peering.
6227	PrimarybytesOut *int64 `json:"primarybytesOut,omitempty"`
6228	// SecondarybytesIn - Gets BytesIn of the peering.
6229	SecondarybytesIn *int64 `json:"secondarybytesIn,omitempty"`
6230	// SecondarybytesOut - Gets BytesOut of the peering.
6231	SecondarybytesOut *int64 `json:"secondarybytesOut,omitempty"`
6232}
6233
6234// ExpressRouteCircuitsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
6235// operation.
6236type ExpressRouteCircuitsUpdateTagsFuture struct {
6237	azure.Future
6238}
6239
6240// Result returns the result of the asynchronous operation.
6241// If the operation has not completed it will return an error.
6242func (future *ExpressRouteCircuitsUpdateTagsFuture) Result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
6243	var done bool
6244	done, err = future.Done(client)
6245	if err != nil {
6246		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
6247		return
6248	}
6249	if !done {
6250		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsUpdateTagsFuture")
6251		return
6252	}
6253	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
6254	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
6255		erc, err = client.UpdateTagsResponder(erc.Response.Response)
6256		if err != nil {
6257			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsUpdateTagsFuture", "Result", erc.Response.Response, "Failure responding to request")
6258		}
6259	}
6260	return
6261}
6262
6263// ExpressRouteServiceProvider a ExpressRouteResourceProvider object.
6264type ExpressRouteServiceProvider struct {
6265	*ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"`
6266	// ID - Resource ID.
6267	ID *string `json:"id,omitempty"`
6268	// Name - Resource name.
6269	Name *string `json:"name,omitempty"`
6270	// Type - Resource type.
6271	Type *string `json:"type,omitempty"`
6272	// Location - Resource location.
6273	Location *string `json:"location,omitempty"`
6274	// Tags - Resource tags.
6275	Tags map[string]*string `json:"tags"`
6276}
6277
6278// MarshalJSON is the custom marshaler for ExpressRouteServiceProvider.
6279func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) {
6280	objectMap := make(map[string]interface{})
6281	if ersp.ExpressRouteServiceProviderPropertiesFormat != nil {
6282		objectMap["properties"] = ersp.ExpressRouteServiceProviderPropertiesFormat
6283	}
6284	if ersp.ID != nil {
6285		objectMap["id"] = ersp.ID
6286	}
6287	if ersp.Name != nil {
6288		objectMap["name"] = ersp.Name
6289	}
6290	if ersp.Type != nil {
6291		objectMap["type"] = ersp.Type
6292	}
6293	if ersp.Location != nil {
6294		objectMap["location"] = ersp.Location
6295	}
6296	if ersp.Tags != nil {
6297		objectMap["tags"] = ersp.Tags
6298	}
6299	return json.Marshal(objectMap)
6300}
6301
6302// UnmarshalJSON is the custom unmarshaler for ExpressRouteServiceProvider struct.
6303func (ersp *ExpressRouteServiceProvider) UnmarshalJSON(body []byte) error {
6304	var m map[string]*json.RawMessage
6305	err := json.Unmarshal(body, &m)
6306	if err != nil {
6307		return err
6308	}
6309	for k, v := range m {
6310		switch k {
6311		case "properties":
6312			if v != nil {
6313				var expressRouteServiceProviderPropertiesFormat ExpressRouteServiceProviderPropertiesFormat
6314				err = json.Unmarshal(*v, &expressRouteServiceProviderPropertiesFormat)
6315				if err != nil {
6316					return err
6317				}
6318				ersp.ExpressRouteServiceProviderPropertiesFormat = &expressRouteServiceProviderPropertiesFormat
6319			}
6320		case "id":
6321			if v != nil {
6322				var ID string
6323				err = json.Unmarshal(*v, &ID)
6324				if err != nil {
6325					return err
6326				}
6327				ersp.ID = &ID
6328			}
6329		case "name":
6330			if v != nil {
6331				var name string
6332				err = json.Unmarshal(*v, &name)
6333				if err != nil {
6334					return err
6335				}
6336				ersp.Name = &name
6337			}
6338		case "type":
6339			if v != nil {
6340				var typeVar string
6341				err = json.Unmarshal(*v, &typeVar)
6342				if err != nil {
6343					return err
6344				}
6345				ersp.Type = &typeVar
6346			}
6347		case "location":
6348			if v != nil {
6349				var location string
6350				err = json.Unmarshal(*v, &location)
6351				if err != nil {
6352					return err
6353				}
6354				ersp.Location = &location
6355			}
6356		case "tags":
6357			if v != nil {
6358				var tags map[string]*string
6359				err = json.Unmarshal(*v, &tags)
6360				if err != nil {
6361					return err
6362				}
6363				ersp.Tags = tags
6364			}
6365		}
6366	}
6367
6368	return nil
6369}
6370
6371// ExpressRouteServiceProviderBandwidthsOffered contains bandwidths offered in ExpressRouteServiceProvider
6372// resources.
6373type ExpressRouteServiceProviderBandwidthsOffered struct {
6374	// OfferName - The OfferName.
6375	OfferName *string `json:"offerName,omitempty"`
6376	// ValueInMbps - The ValueInMbps.
6377	ValueInMbps *int32 `json:"valueInMbps,omitempty"`
6378}
6379
6380// ExpressRouteServiceProviderListResult response for the ListExpressRouteServiceProvider API service call.
6381type ExpressRouteServiceProviderListResult struct {
6382	autorest.Response `json:"-"`
6383	// Value - A list of ExpressRouteResourceProvider resources.
6384	Value *[]ExpressRouteServiceProvider `json:"value,omitempty"`
6385	// NextLink - The URL to get the next set of results.
6386	NextLink *string `json:"nextLink,omitempty"`
6387}
6388
6389// ExpressRouteServiceProviderListResultIterator provides access to a complete listing of
6390// ExpressRouteServiceProvider values.
6391type ExpressRouteServiceProviderListResultIterator struct {
6392	i    int
6393	page ExpressRouteServiceProviderListResultPage
6394}
6395
6396// Next advances to the next value.  If there was an error making
6397// the request the iterator does not advance and the error is returned.
6398func (iter *ExpressRouteServiceProviderListResultIterator) Next() error {
6399	iter.i++
6400	if iter.i < len(iter.page.Values()) {
6401		return nil
6402	}
6403	err := iter.page.Next()
6404	if err != nil {
6405		iter.i--
6406		return err
6407	}
6408	iter.i = 0
6409	return nil
6410}
6411
6412// NotDone returns true if the enumeration should be started or is not yet complete.
6413func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool {
6414	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6415}
6416
6417// Response returns the raw server response from the last page request.
6418func (iter ExpressRouteServiceProviderListResultIterator) Response() ExpressRouteServiceProviderListResult {
6419	return iter.page.Response()
6420}
6421
6422// Value returns the current value or a zero-initialized value if the
6423// iterator has advanced beyond the end of the collection.
6424func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteServiceProvider {
6425	if !iter.page.NotDone() {
6426		return ExpressRouteServiceProvider{}
6427	}
6428	return iter.page.Values()[iter.i]
6429}
6430
6431// IsEmpty returns true if the ListResult contains no values.
6432func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool {
6433	return ersplr.Value == nil || len(*ersplr.Value) == 0
6434}
6435
6436// expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results.
6437// It returns nil if no more results exist.
6438func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer() (*http.Request, error) {
6439	if ersplr.NextLink == nil || len(to.String(ersplr.NextLink)) < 1 {
6440		return nil, nil
6441	}
6442	return autorest.Prepare(&http.Request{},
6443		autorest.AsJSON(),
6444		autorest.AsGet(),
6445		autorest.WithBaseURL(to.String(ersplr.NextLink)))
6446}
6447
6448// ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values.
6449type ExpressRouteServiceProviderListResultPage struct {
6450	fn     func(ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)
6451	ersplr ExpressRouteServiceProviderListResult
6452}
6453
6454// Next advances to the next page of values.  If there was an error making
6455// the request the page does not advance and the error is returned.
6456func (page *ExpressRouteServiceProviderListResultPage) Next() error {
6457	next, err := page.fn(page.ersplr)
6458	if err != nil {
6459		return err
6460	}
6461	page.ersplr = next
6462	return nil
6463}
6464
6465// NotDone returns true if the page enumeration should be started or is not yet complete.
6466func (page ExpressRouteServiceProviderListResultPage) NotDone() bool {
6467	return !page.ersplr.IsEmpty()
6468}
6469
6470// Response returns the raw server response from the last page request.
6471func (page ExpressRouteServiceProviderListResultPage) Response() ExpressRouteServiceProviderListResult {
6472	return page.ersplr
6473}
6474
6475// Values returns the slice of values for the current page or nil if there are no values.
6476func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteServiceProvider {
6477	if page.ersplr.IsEmpty() {
6478		return nil
6479	}
6480	return *page.ersplr.Value
6481}
6482
6483// ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider.
6484type ExpressRouteServiceProviderPropertiesFormat struct {
6485	// PeeringLocations - Get a list of peering locations.
6486	PeeringLocations *[]string `json:"peeringLocations,omitempty"`
6487	// BandwidthsOffered - Gets bandwidths offered.
6488	BandwidthsOffered *[]ExpressRouteServiceProviderBandwidthsOffered `json:"bandwidthsOffered,omitempty"`
6489	// ProvisioningState - Gets the provisioning state of the resource.
6490	ProvisioningState *string `json:"provisioningState,omitempty"`
6491}
6492
6493// FlowLogInformation information on the configuration of flow log and traffic analytics (optional).
6494type FlowLogInformation struct {
6495	autorest.Response `json:"-"`
6496	// TargetResourceID - The ID of the resource to configure for flow logging.
6497	TargetResourceID            *string `json:"targetResourceId,omitempty"`
6498	*FlowLogProperties          `json:"properties,omitempty"`
6499	*TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
6500}
6501
6502// MarshalJSON is the custom marshaler for FlowLogInformation.
6503func (fli FlowLogInformation) MarshalJSON() ([]byte, error) {
6504	objectMap := make(map[string]interface{})
6505	if fli.TargetResourceID != nil {
6506		objectMap["targetResourceId"] = fli.TargetResourceID
6507	}
6508	if fli.FlowLogProperties != nil {
6509		objectMap["properties"] = fli.FlowLogProperties
6510	}
6511	if fli.TrafficAnalyticsProperties != nil {
6512		objectMap["flowAnalyticsConfiguration"] = fli.TrafficAnalyticsProperties
6513	}
6514	return json.Marshal(objectMap)
6515}
6516
6517// UnmarshalJSON is the custom unmarshaler for FlowLogInformation struct.
6518func (fli *FlowLogInformation) UnmarshalJSON(body []byte) error {
6519	var m map[string]*json.RawMessage
6520	err := json.Unmarshal(body, &m)
6521	if err != nil {
6522		return err
6523	}
6524	for k, v := range m {
6525		switch k {
6526		case "targetResourceId":
6527			if v != nil {
6528				var targetResourceID string
6529				err = json.Unmarshal(*v, &targetResourceID)
6530				if err != nil {
6531					return err
6532				}
6533				fli.TargetResourceID = &targetResourceID
6534			}
6535		case "properties":
6536			if v != nil {
6537				var flowLogProperties FlowLogProperties
6538				err = json.Unmarshal(*v, &flowLogProperties)
6539				if err != nil {
6540					return err
6541				}
6542				fli.FlowLogProperties = &flowLogProperties
6543			}
6544		case "flowAnalyticsConfiguration":
6545			if v != nil {
6546				var trafficAnalyticsProperties TrafficAnalyticsProperties
6547				err = json.Unmarshal(*v, &trafficAnalyticsProperties)
6548				if err != nil {
6549					return err
6550				}
6551				fli.TrafficAnalyticsProperties = &trafficAnalyticsProperties
6552			}
6553		}
6554	}
6555
6556	return nil
6557}
6558
6559// FlowLogProperties parameters that define the configuration of flow log.
6560type FlowLogProperties struct {
6561	// StorageID - ID of the storage account which is used to store the flow log.
6562	StorageID *string `json:"storageId,omitempty"`
6563	// Enabled - Flag to enable/disable flow logging.
6564	Enabled         *bool                      `json:"enabled,omitempty"`
6565	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
6566}
6567
6568// FlowLogStatusParameters parameters that define a resource to query flow log and traffic analytics (optional)
6569// status.
6570type FlowLogStatusParameters struct {
6571	// TargetResourceID - The target resource where getting the flow logging and traffic analytics (optional) status.
6572	TargetResourceID *string `json:"targetResourceId,omitempty"`
6573}
6574
6575// FrontendIPConfiguration frontend IP address of the load balancer.
6576type FrontendIPConfiguration struct {
6577	autorest.Response `json:"-"`
6578	// FrontendIPConfigurationPropertiesFormat - Properties of the load balancer probe.
6579	*FrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
6580	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
6581	Name *string `json:"name,omitempty"`
6582	// Etag - A unique read-only string that changes whenever the resource is updated.
6583	Etag *string `json:"etag,omitempty"`
6584	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
6585	Zones *[]string `json:"zones,omitempty"`
6586	// ID - Resource ID.
6587	ID *string `json:"id,omitempty"`
6588}
6589
6590// MarshalJSON is the custom marshaler for FrontendIPConfiguration.
6591func (fic FrontendIPConfiguration) MarshalJSON() ([]byte, error) {
6592	objectMap := make(map[string]interface{})
6593	if fic.FrontendIPConfigurationPropertiesFormat != nil {
6594		objectMap["properties"] = fic.FrontendIPConfigurationPropertiesFormat
6595	}
6596	if fic.Name != nil {
6597		objectMap["name"] = fic.Name
6598	}
6599	if fic.Etag != nil {
6600		objectMap["etag"] = fic.Etag
6601	}
6602	if fic.Zones != nil {
6603		objectMap["zones"] = fic.Zones
6604	}
6605	if fic.ID != nil {
6606		objectMap["id"] = fic.ID
6607	}
6608	return json.Marshal(objectMap)
6609}
6610
6611// UnmarshalJSON is the custom unmarshaler for FrontendIPConfiguration struct.
6612func (fic *FrontendIPConfiguration) UnmarshalJSON(body []byte) error {
6613	var m map[string]*json.RawMessage
6614	err := json.Unmarshal(body, &m)
6615	if err != nil {
6616		return err
6617	}
6618	for k, v := range m {
6619		switch k {
6620		case "properties":
6621			if v != nil {
6622				var frontendIPConfigurationPropertiesFormat FrontendIPConfigurationPropertiesFormat
6623				err = json.Unmarshal(*v, &frontendIPConfigurationPropertiesFormat)
6624				if err != nil {
6625					return err
6626				}
6627				fic.FrontendIPConfigurationPropertiesFormat = &frontendIPConfigurationPropertiesFormat
6628			}
6629		case "name":
6630			if v != nil {
6631				var name string
6632				err = json.Unmarshal(*v, &name)
6633				if err != nil {
6634					return err
6635				}
6636				fic.Name = &name
6637			}
6638		case "etag":
6639			if v != nil {
6640				var etag string
6641				err = json.Unmarshal(*v, &etag)
6642				if err != nil {
6643					return err
6644				}
6645				fic.Etag = &etag
6646			}
6647		case "zones":
6648			if v != nil {
6649				var zones []string
6650				err = json.Unmarshal(*v, &zones)
6651				if err != nil {
6652					return err
6653				}
6654				fic.Zones = &zones
6655			}
6656		case "id":
6657			if v != nil {
6658				var ID string
6659				err = json.Unmarshal(*v, &ID)
6660				if err != nil {
6661					return err
6662				}
6663				fic.ID = &ID
6664			}
6665		}
6666	}
6667
6668	return nil
6669}
6670
6671// FrontendIPConfigurationPropertiesFormat properties of Frontend IP Configuration of the load balancer.
6672type FrontendIPConfigurationPropertiesFormat struct {
6673	// InboundNatRules - Read only. Inbound rules URIs that use this frontend IP.
6674	InboundNatRules *[]SubResource `json:"inboundNatRules,omitempty"`
6675	// InboundNatPools - Read only. Inbound pools URIs that use this frontend IP.
6676	InboundNatPools *[]SubResource `json:"inboundNatPools,omitempty"`
6677	// OutboundNatRules - Read only. Outbound rules URIs that use this frontend IP.
6678	OutboundNatRules *[]SubResource `json:"outboundNatRules,omitempty"`
6679	// LoadBalancingRules - Gets load balancing rules URIs that use this frontend IP.
6680	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
6681	// PrivateIPAddress - The private IP address of the IP configuration.
6682	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
6683	// PrivateIPAllocationMethod - The Private IP allocation method. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
6684	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
6685	// Subnet - The reference of the subnet resource.
6686	Subnet *Subnet `json:"subnet,omitempty"`
6687	// PublicIPAddress - The reference of the Public IP resource.
6688	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
6689	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
6690	ProvisioningState *string `json:"provisioningState,omitempty"`
6691}
6692
6693// GatewayRoute gateway routing details
6694type GatewayRoute struct {
6695	// LocalAddress - The gateway's local address
6696	LocalAddress *string `json:"localAddress,omitempty"`
6697	// NetworkProperty - The route's network prefix
6698	NetworkProperty *string `json:"network,omitempty"`
6699	// NextHop - The route's next hop
6700	NextHop *string `json:"nextHop,omitempty"`
6701	// SourcePeer - The peer this route was learned from
6702	SourcePeer *string `json:"sourcePeer,omitempty"`
6703	// Origin - The source this route was learned from
6704	Origin *string `json:"origin,omitempty"`
6705	// AsPath - The route's AS path sequence
6706	AsPath *string `json:"asPath,omitempty"`
6707	// Weight - The route's weight
6708	Weight *int32 `json:"weight,omitempty"`
6709}
6710
6711// GatewayRouteListResult list of virtual network gateway routes
6712type GatewayRouteListResult struct {
6713	autorest.Response `json:"-"`
6714	// Value - List of gateway routes
6715	Value *[]GatewayRoute `json:"value,omitempty"`
6716}
6717
6718// InboundNatPool inbound NAT pool of the load balancer.
6719type InboundNatPool struct {
6720	// InboundNatPoolPropertiesFormat - Properties of load balancer inbound nat pool.
6721	*InboundNatPoolPropertiesFormat `json:"properties,omitempty"`
6722	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
6723	Name *string `json:"name,omitempty"`
6724	// Etag - A unique read-only string that changes whenever the resource is updated.
6725	Etag *string `json:"etag,omitempty"`
6726	// ID - Resource ID.
6727	ID *string `json:"id,omitempty"`
6728}
6729
6730// MarshalJSON is the custom marshaler for InboundNatPool.
6731func (inp InboundNatPool) MarshalJSON() ([]byte, error) {
6732	objectMap := make(map[string]interface{})
6733	if inp.InboundNatPoolPropertiesFormat != nil {
6734		objectMap["properties"] = inp.InboundNatPoolPropertiesFormat
6735	}
6736	if inp.Name != nil {
6737		objectMap["name"] = inp.Name
6738	}
6739	if inp.Etag != nil {
6740		objectMap["etag"] = inp.Etag
6741	}
6742	if inp.ID != nil {
6743		objectMap["id"] = inp.ID
6744	}
6745	return json.Marshal(objectMap)
6746}
6747
6748// UnmarshalJSON is the custom unmarshaler for InboundNatPool struct.
6749func (inp *InboundNatPool) UnmarshalJSON(body []byte) error {
6750	var m map[string]*json.RawMessage
6751	err := json.Unmarshal(body, &m)
6752	if err != nil {
6753		return err
6754	}
6755	for k, v := range m {
6756		switch k {
6757		case "properties":
6758			if v != nil {
6759				var inboundNatPoolPropertiesFormat InboundNatPoolPropertiesFormat
6760				err = json.Unmarshal(*v, &inboundNatPoolPropertiesFormat)
6761				if err != nil {
6762					return err
6763				}
6764				inp.InboundNatPoolPropertiesFormat = &inboundNatPoolPropertiesFormat
6765			}
6766		case "name":
6767			if v != nil {
6768				var name string
6769				err = json.Unmarshal(*v, &name)
6770				if err != nil {
6771					return err
6772				}
6773				inp.Name = &name
6774			}
6775		case "etag":
6776			if v != nil {
6777				var etag string
6778				err = json.Unmarshal(*v, &etag)
6779				if err != nil {
6780					return err
6781				}
6782				inp.Etag = &etag
6783			}
6784		case "id":
6785			if v != nil {
6786				var ID string
6787				err = json.Unmarshal(*v, &ID)
6788				if err != nil {
6789					return err
6790				}
6791				inp.ID = &ID
6792			}
6793		}
6794	}
6795
6796	return nil
6797}
6798
6799// InboundNatPoolPropertiesFormat properties of Inbound NAT pool.
6800type InboundNatPoolPropertiesFormat struct {
6801	// FrontendIPConfiguration - A reference to frontend IP addresses.
6802	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
6803	// Protocol - Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
6804	Protocol TransportProtocol `json:"protocol,omitempty"`
6805	// 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.
6806	FrontendPortRangeStart *int32 `json:"frontendPortRangeStart,omitempty"`
6807	// 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.
6808	FrontendPortRangeEnd *int32 `json:"frontendPortRangeEnd,omitempty"`
6809	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 1 and 65535.
6810	BackendPort *int32 `json:"backendPort,omitempty"`
6811	// 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.
6812	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
6813	// 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.
6814	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
6815	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
6816	ProvisioningState *string `json:"provisioningState,omitempty"`
6817}
6818
6819// InboundNatRule inbound NAT rule of the load balancer.
6820type InboundNatRule struct {
6821	autorest.Response `json:"-"`
6822	// InboundNatRulePropertiesFormat - Properties of load balancer inbound nat rule.
6823	*InboundNatRulePropertiesFormat `json:"properties,omitempty"`
6824	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
6825	Name *string `json:"name,omitempty"`
6826	// Etag - A unique read-only string that changes whenever the resource is updated.
6827	Etag *string `json:"etag,omitempty"`
6828	// ID - Resource ID.
6829	ID *string `json:"id,omitempty"`
6830}
6831
6832// MarshalJSON is the custom marshaler for InboundNatRule.
6833func (inr InboundNatRule) MarshalJSON() ([]byte, error) {
6834	objectMap := make(map[string]interface{})
6835	if inr.InboundNatRulePropertiesFormat != nil {
6836		objectMap["properties"] = inr.InboundNatRulePropertiesFormat
6837	}
6838	if inr.Name != nil {
6839		objectMap["name"] = inr.Name
6840	}
6841	if inr.Etag != nil {
6842		objectMap["etag"] = inr.Etag
6843	}
6844	if inr.ID != nil {
6845		objectMap["id"] = inr.ID
6846	}
6847	return json.Marshal(objectMap)
6848}
6849
6850// UnmarshalJSON is the custom unmarshaler for InboundNatRule struct.
6851func (inr *InboundNatRule) UnmarshalJSON(body []byte) error {
6852	var m map[string]*json.RawMessage
6853	err := json.Unmarshal(body, &m)
6854	if err != nil {
6855		return err
6856	}
6857	for k, v := range m {
6858		switch k {
6859		case "properties":
6860			if v != nil {
6861				var inboundNatRulePropertiesFormat InboundNatRulePropertiesFormat
6862				err = json.Unmarshal(*v, &inboundNatRulePropertiesFormat)
6863				if err != nil {
6864					return err
6865				}
6866				inr.InboundNatRulePropertiesFormat = &inboundNatRulePropertiesFormat
6867			}
6868		case "name":
6869			if v != nil {
6870				var name string
6871				err = json.Unmarshal(*v, &name)
6872				if err != nil {
6873					return err
6874				}
6875				inr.Name = &name
6876			}
6877		case "etag":
6878			if v != nil {
6879				var etag string
6880				err = json.Unmarshal(*v, &etag)
6881				if err != nil {
6882					return err
6883				}
6884				inr.Etag = &etag
6885			}
6886		case "id":
6887			if v != nil {
6888				var ID string
6889				err = json.Unmarshal(*v, &ID)
6890				if err != nil {
6891					return err
6892				}
6893				inr.ID = &ID
6894			}
6895		}
6896	}
6897
6898	return nil
6899}
6900
6901// InboundNatRuleListResult response for ListInboundNatRule API service call.
6902type InboundNatRuleListResult struct {
6903	autorest.Response `json:"-"`
6904	// Value - A list of inbound nat rules in a load balancer.
6905	Value *[]InboundNatRule `json:"value,omitempty"`
6906	// NextLink - The URL to get the next set of results.
6907	NextLink *string `json:"nextLink,omitempty"`
6908}
6909
6910// InboundNatRuleListResultIterator provides access to a complete listing of InboundNatRule values.
6911type InboundNatRuleListResultIterator struct {
6912	i    int
6913	page InboundNatRuleListResultPage
6914}
6915
6916// Next advances to the next value.  If there was an error making
6917// the request the iterator does not advance and the error is returned.
6918func (iter *InboundNatRuleListResultIterator) Next() error {
6919	iter.i++
6920	if iter.i < len(iter.page.Values()) {
6921		return nil
6922	}
6923	err := iter.page.Next()
6924	if err != nil {
6925		iter.i--
6926		return err
6927	}
6928	iter.i = 0
6929	return nil
6930}
6931
6932// NotDone returns true if the enumeration should be started or is not yet complete.
6933func (iter InboundNatRuleListResultIterator) NotDone() bool {
6934	return iter.page.NotDone() && iter.i < len(iter.page.Values())
6935}
6936
6937// Response returns the raw server response from the last page request.
6938func (iter InboundNatRuleListResultIterator) Response() InboundNatRuleListResult {
6939	return iter.page.Response()
6940}
6941
6942// Value returns the current value or a zero-initialized value if the
6943// iterator has advanced beyond the end of the collection.
6944func (iter InboundNatRuleListResultIterator) Value() InboundNatRule {
6945	if !iter.page.NotDone() {
6946		return InboundNatRule{}
6947	}
6948	return iter.page.Values()[iter.i]
6949}
6950
6951// IsEmpty returns true if the ListResult contains no values.
6952func (inrlr InboundNatRuleListResult) IsEmpty() bool {
6953	return inrlr.Value == nil || len(*inrlr.Value) == 0
6954}
6955
6956// inboundNatRuleListResultPreparer prepares a request to retrieve the next set of results.
6957// It returns nil if no more results exist.
6958func (inrlr InboundNatRuleListResult) inboundNatRuleListResultPreparer() (*http.Request, error) {
6959	if inrlr.NextLink == nil || len(to.String(inrlr.NextLink)) < 1 {
6960		return nil, nil
6961	}
6962	return autorest.Prepare(&http.Request{},
6963		autorest.AsJSON(),
6964		autorest.AsGet(),
6965		autorest.WithBaseURL(to.String(inrlr.NextLink)))
6966}
6967
6968// InboundNatRuleListResultPage contains a page of InboundNatRule values.
6969type InboundNatRuleListResultPage struct {
6970	fn    func(InboundNatRuleListResult) (InboundNatRuleListResult, error)
6971	inrlr InboundNatRuleListResult
6972}
6973
6974// Next advances to the next page of values.  If there was an error making
6975// the request the page does not advance and the error is returned.
6976func (page *InboundNatRuleListResultPage) Next() error {
6977	next, err := page.fn(page.inrlr)
6978	if err != nil {
6979		return err
6980	}
6981	page.inrlr = next
6982	return nil
6983}
6984
6985// NotDone returns true if the page enumeration should be started or is not yet complete.
6986func (page InboundNatRuleListResultPage) NotDone() bool {
6987	return !page.inrlr.IsEmpty()
6988}
6989
6990// Response returns the raw server response from the last page request.
6991func (page InboundNatRuleListResultPage) Response() InboundNatRuleListResult {
6992	return page.inrlr
6993}
6994
6995// Values returns the slice of values for the current page or nil if there are no values.
6996func (page InboundNatRuleListResultPage) Values() []InboundNatRule {
6997	if page.inrlr.IsEmpty() {
6998		return nil
6999	}
7000	return *page.inrlr.Value
7001}
7002
7003// InboundNatRulePropertiesFormat properties of the inbound NAT rule.
7004type InboundNatRulePropertiesFormat struct {
7005	// FrontendIPConfiguration - A reference to frontend IP addresses.
7006	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
7007	// BackendIPConfiguration - 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.
7008	BackendIPConfiguration *InterfaceIPConfiguration `json:"backendIPConfiguration,omitempty"`
7009	// Protocol - Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
7010	Protocol TransportProtocol `json:"protocol,omitempty"`
7011	// 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.
7012	FrontendPort *int32 `json:"frontendPort,omitempty"`
7013	// BackendPort - The port used for the internal endpoint. Acceptable values range from 1 to 65535.
7014	BackendPort *int32 `json:"backendPort,omitempty"`
7015	// 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.
7016	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
7017	// 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.
7018	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
7019	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
7020	ProvisioningState *string `json:"provisioningState,omitempty"`
7021}
7022
7023// InboundNatRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
7024// operation.
7025type InboundNatRulesCreateOrUpdateFuture struct {
7026	azure.Future
7027}
7028
7029// Result returns the result of the asynchronous operation.
7030// If the operation has not completed it will return an error.
7031func (future *InboundNatRulesCreateOrUpdateFuture) Result(client InboundNatRulesClient) (inr InboundNatRule, err error) {
7032	var done bool
7033	done, err = future.Done(client)
7034	if err != nil {
7035		err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7036		return
7037	}
7038	if !done {
7039		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesCreateOrUpdateFuture")
7040		return
7041	}
7042	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7043	if inr.Response.Response, err = future.GetResult(sender); err == nil && inr.Response.Response.StatusCode != http.StatusNoContent {
7044		inr, err = client.CreateOrUpdateResponder(inr.Response.Response)
7045		if err != nil {
7046			err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", inr.Response.Response, "Failure responding to request")
7047		}
7048	}
7049	return
7050}
7051
7052// InboundNatRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
7053// operation.
7054type InboundNatRulesDeleteFuture struct {
7055	azure.Future
7056}
7057
7058// Result returns the result of the asynchronous operation.
7059// If the operation has not completed it will return an error.
7060func (future *InboundNatRulesDeleteFuture) Result(client InboundNatRulesClient) (ar autorest.Response, err error) {
7061	var done bool
7062	done, err = future.Done(client)
7063	if err != nil {
7064		err = autorest.NewErrorWithError(err, "network.InboundNatRulesDeleteFuture", "Result", future.Response(), "Polling failure")
7065		return
7066	}
7067	if !done {
7068		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesDeleteFuture")
7069		return
7070	}
7071	ar.Response = future.Response()
7072	return
7073}
7074
7075// Interface a network interface in a resource group.
7076type Interface struct {
7077	autorest.Response `json:"-"`
7078	// InterfacePropertiesFormat - Properties of the network interface.
7079	*InterfacePropertiesFormat `json:"properties,omitempty"`
7080	// Etag - A unique read-only string that changes whenever the resource is updated.
7081	Etag *string `json:"etag,omitempty"`
7082	// ID - Resource ID.
7083	ID *string `json:"id,omitempty"`
7084	// Name - Resource name.
7085	Name *string `json:"name,omitempty"`
7086	// Type - Resource type.
7087	Type *string `json:"type,omitempty"`
7088	// Location - Resource location.
7089	Location *string `json:"location,omitempty"`
7090	// Tags - Resource tags.
7091	Tags map[string]*string `json:"tags"`
7092}
7093
7094// MarshalJSON is the custom marshaler for Interface.
7095func (i Interface) MarshalJSON() ([]byte, error) {
7096	objectMap := make(map[string]interface{})
7097	if i.InterfacePropertiesFormat != nil {
7098		objectMap["properties"] = i.InterfacePropertiesFormat
7099	}
7100	if i.Etag != nil {
7101		objectMap["etag"] = i.Etag
7102	}
7103	if i.ID != nil {
7104		objectMap["id"] = i.ID
7105	}
7106	if i.Name != nil {
7107		objectMap["name"] = i.Name
7108	}
7109	if i.Type != nil {
7110		objectMap["type"] = i.Type
7111	}
7112	if i.Location != nil {
7113		objectMap["location"] = i.Location
7114	}
7115	if i.Tags != nil {
7116		objectMap["tags"] = i.Tags
7117	}
7118	return json.Marshal(objectMap)
7119}
7120
7121// UnmarshalJSON is the custom unmarshaler for Interface struct.
7122func (i *Interface) UnmarshalJSON(body []byte) error {
7123	var m map[string]*json.RawMessage
7124	err := json.Unmarshal(body, &m)
7125	if err != nil {
7126		return err
7127	}
7128	for k, v := range m {
7129		switch k {
7130		case "properties":
7131			if v != nil {
7132				var interfacePropertiesFormat InterfacePropertiesFormat
7133				err = json.Unmarshal(*v, &interfacePropertiesFormat)
7134				if err != nil {
7135					return err
7136				}
7137				i.InterfacePropertiesFormat = &interfacePropertiesFormat
7138			}
7139		case "etag":
7140			if v != nil {
7141				var etag string
7142				err = json.Unmarshal(*v, &etag)
7143				if err != nil {
7144					return err
7145				}
7146				i.Etag = &etag
7147			}
7148		case "id":
7149			if v != nil {
7150				var ID string
7151				err = json.Unmarshal(*v, &ID)
7152				if err != nil {
7153					return err
7154				}
7155				i.ID = &ID
7156			}
7157		case "name":
7158			if v != nil {
7159				var name string
7160				err = json.Unmarshal(*v, &name)
7161				if err != nil {
7162					return err
7163				}
7164				i.Name = &name
7165			}
7166		case "type":
7167			if v != nil {
7168				var typeVar string
7169				err = json.Unmarshal(*v, &typeVar)
7170				if err != nil {
7171					return err
7172				}
7173				i.Type = &typeVar
7174			}
7175		case "location":
7176			if v != nil {
7177				var location string
7178				err = json.Unmarshal(*v, &location)
7179				if err != nil {
7180					return err
7181				}
7182				i.Location = &location
7183			}
7184		case "tags":
7185			if v != nil {
7186				var tags map[string]*string
7187				err = json.Unmarshal(*v, &tags)
7188				if err != nil {
7189					return err
7190				}
7191				i.Tags = tags
7192			}
7193		}
7194	}
7195
7196	return nil
7197}
7198
7199// InterfaceAssociation network interface and its custom security rules.
7200type InterfaceAssociation struct {
7201	// ID - Network interface ID.
7202	ID *string `json:"id,omitempty"`
7203	// SecurityRules - Collection of custom security rules.
7204	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
7205}
7206
7207// InterfaceDNSSettings DNS settings of a network interface.
7208type InterfaceDNSSettings struct {
7209	// 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.
7210	DNSServers *[]string `json:"dnsServers,omitempty"`
7211	// 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.
7212	AppliedDNSServers *[]string `json:"appliedDnsServers,omitempty"`
7213	// InternalDNSNameLabel - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
7214	InternalDNSNameLabel *string `json:"internalDnsNameLabel,omitempty"`
7215	// InternalFqdn - Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
7216	InternalFqdn *string `json:"internalFqdn,omitempty"`
7217	// 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.
7218	InternalDomainNameSuffix *string `json:"internalDomainNameSuffix,omitempty"`
7219}
7220
7221// InterfaceIPConfiguration iPConfiguration in a network interface.
7222type InterfaceIPConfiguration struct {
7223	autorest.Response `json:"-"`
7224	// InterfaceIPConfigurationPropertiesFormat - Network interface IP configuration properties.
7225	*InterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
7226	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
7227	Name *string `json:"name,omitempty"`
7228	// Etag - A unique read-only string that changes whenever the resource is updated.
7229	Etag *string `json:"etag,omitempty"`
7230	// ID - Resource ID.
7231	ID *string `json:"id,omitempty"`
7232}
7233
7234// MarshalJSON is the custom marshaler for InterfaceIPConfiguration.
7235func (iic InterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
7236	objectMap := make(map[string]interface{})
7237	if iic.InterfaceIPConfigurationPropertiesFormat != nil {
7238		objectMap["properties"] = iic.InterfaceIPConfigurationPropertiesFormat
7239	}
7240	if iic.Name != nil {
7241		objectMap["name"] = iic.Name
7242	}
7243	if iic.Etag != nil {
7244		objectMap["etag"] = iic.Etag
7245	}
7246	if iic.ID != nil {
7247		objectMap["id"] = iic.ID
7248	}
7249	return json.Marshal(objectMap)
7250}
7251
7252// UnmarshalJSON is the custom unmarshaler for InterfaceIPConfiguration struct.
7253func (iic *InterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
7254	var m map[string]*json.RawMessage
7255	err := json.Unmarshal(body, &m)
7256	if err != nil {
7257		return err
7258	}
7259	for k, v := range m {
7260		switch k {
7261		case "properties":
7262			if v != nil {
7263				var interfaceIPConfigurationPropertiesFormat InterfaceIPConfigurationPropertiesFormat
7264				err = json.Unmarshal(*v, &interfaceIPConfigurationPropertiesFormat)
7265				if err != nil {
7266					return err
7267				}
7268				iic.InterfaceIPConfigurationPropertiesFormat = &interfaceIPConfigurationPropertiesFormat
7269			}
7270		case "name":
7271			if v != nil {
7272				var name string
7273				err = json.Unmarshal(*v, &name)
7274				if err != nil {
7275					return err
7276				}
7277				iic.Name = &name
7278			}
7279		case "etag":
7280			if v != nil {
7281				var etag string
7282				err = json.Unmarshal(*v, &etag)
7283				if err != nil {
7284					return err
7285				}
7286				iic.Etag = &etag
7287			}
7288		case "id":
7289			if v != nil {
7290				var ID string
7291				err = json.Unmarshal(*v, &ID)
7292				if err != nil {
7293					return err
7294				}
7295				iic.ID = &ID
7296			}
7297		}
7298	}
7299
7300	return nil
7301}
7302
7303// InterfaceIPConfigurationListResult response for list ip configurations API service call.
7304type InterfaceIPConfigurationListResult struct {
7305	autorest.Response `json:"-"`
7306	// Value - A list of ip configurations.
7307	Value *[]InterfaceIPConfiguration `json:"value,omitempty"`
7308	// NextLink - The URL to get the next set of results.
7309	NextLink *string `json:"nextLink,omitempty"`
7310}
7311
7312// InterfaceIPConfigurationListResultIterator provides access to a complete listing of InterfaceIPConfiguration
7313// values.
7314type InterfaceIPConfigurationListResultIterator struct {
7315	i    int
7316	page InterfaceIPConfigurationListResultPage
7317}
7318
7319// Next advances to the next value.  If there was an error making
7320// the request the iterator does not advance and the error is returned.
7321func (iter *InterfaceIPConfigurationListResultIterator) Next() error {
7322	iter.i++
7323	if iter.i < len(iter.page.Values()) {
7324		return nil
7325	}
7326	err := iter.page.Next()
7327	if err != nil {
7328		iter.i--
7329		return err
7330	}
7331	iter.i = 0
7332	return nil
7333}
7334
7335// NotDone returns true if the enumeration should be started or is not yet complete.
7336func (iter InterfaceIPConfigurationListResultIterator) NotDone() bool {
7337	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7338}
7339
7340// Response returns the raw server response from the last page request.
7341func (iter InterfaceIPConfigurationListResultIterator) Response() InterfaceIPConfigurationListResult {
7342	return iter.page.Response()
7343}
7344
7345// Value returns the current value or a zero-initialized value if the
7346// iterator has advanced beyond the end of the collection.
7347func (iter InterfaceIPConfigurationListResultIterator) Value() InterfaceIPConfiguration {
7348	if !iter.page.NotDone() {
7349		return InterfaceIPConfiguration{}
7350	}
7351	return iter.page.Values()[iter.i]
7352}
7353
7354// IsEmpty returns true if the ListResult contains no values.
7355func (iiclr InterfaceIPConfigurationListResult) IsEmpty() bool {
7356	return iiclr.Value == nil || len(*iiclr.Value) == 0
7357}
7358
7359// interfaceIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
7360// It returns nil if no more results exist.
7361func (iiclr InterfaceIPConfigurationListResult) interfaceIPConfigurationListResultPreparer() (*http.Request, error) {
7362	if iiclr.NextLink == nil || len(to.String(iiclr.NextLink)) < 1 {
7363		return nil, nil
7364	}
7365	return autorest.Prepare(&http.Request{},
7366		autorest.AsJSON(),
7367		autorest.AsGet(),
7368		autorest.WithBaseURL(to.String(iiclr.NextLink)))
7369}
7370
7371// InterfaceIPConfigurationListResultPage contains a page of InterfaceIPConfiguration values.
7372type InterfaceIPConfigurationListResultPage struct {
7373	fn    func(InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)
7374	iiclr InterfaceIPConfigurationListResult
7375}
7376
7377// Next advances to the next page of values.  If there was an error making
7378// the request the page does not advance and the error is returned.
7379func (page *InterfaceIPConfigurationListResultPage) Next() error {
7380	next, err := page.fn(page.iiclr)
7381	if err != nil {
7382		return err
7383	}
7384	page.iiclr = next
7385	return nil
7386}
7387
7388// NotDone returns true if the page enumeration should be started or is not yet complete.
7389func (page InterfaceIPConfigurationListResultPage) NotDone() bool {
7390	return !page.iiclr.IsEmpty()
7391}
7392
7393// Response returns the raw server response from the last page request.
7394func (page InterfaceIPConfigurationListResultPage) Response() InterfaceIPConfigurationListResult {
7395	return page.iiclr
7396}
7397
7398// Values returns the slice of values for the current page or nil if there are no values.
7399func (page InterfaceIPConfigurationListResultPage) Values() []InterfaceIPConfiguration {
7400	if page.iiclr.IsEmpty() {
7401		return nil
7402	}
7403	return *page.iiclr.Value
7404}
7405
7406// InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
7407type InterfaceIPConfigurationPropertiesFormat struct {
7408	// ApplicationGatewayBackendAddressPools - The reference of ApplicationGatewayBackendAddressPool resource.
7409	ApplicationGatewayBackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"applicationGatewayBackendAddressPools,omitempty"`
7410	// LoadBalancerBackendAddressPools - The reference of LoadBalancerBackendAddressPool resource.
7411	LoadBalancerBackendAddressPools *[]BackendAddressPool `json:"loadBalancerBackendAddressPools,omitempty"`
7412	// LoadBalancerInboundNatRules - A list of references of LoadBalancerInboundNatRules.
7413	LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"`
7414	// PrivateIPAddress - Private IP address of the IP configuration.
7415	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
7416	// PrivateIPAllocationMethod - Defines how a private IP address is assigned. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
7417	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
7418	// 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'
7419	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
7420	// Subnet - Subnet bound to the IP configuration.
7421	Subnet *Subnet `json:"subnet,omitempty"`
7422	// Primary - Gets whether this is a primary customer address on the network interface.
7423	Primary *bool `json:"primary,omitempty"`
7424	// PublicIPAddress - Public IP address bound to the IP configuration.
7425	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
7426	// ApplicationSecurityGroups - Application security groups in which the IP configuration is included.
7427	ApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"applicationSecurityGroups,omitempty"`
7428	// ProvisioningState - The provisioning state of the network interface IP configuration. Possible values are: 'Updating', 'Deleting', and 'Failed'.
7429	ProvisioningState *string `json:"provisioningState,omitempty"`
7430}
7431
7432// InterfaceListResult response for the ListNetworkInterface API service call.
7433type InterfaceListResult struct {
7434	autorest.Response `json:"-"`
7435	// Value - A list of network interfaces in a resource group.
7436	Value *[]Interface `json:"value,omitempty"`
7437	// NextLink - The URL to get the next set of results.
7438	NextLink *string `json:"nextLink,omitempty"`
7439}
7440
7441// InterfaceListResultIterator provides access to a complete listing of Interface values.
7442type InterfaceListResultIterator struct {
7443	i    int
7444	page InterfaceListResultPage
7445}
7446
7447// Next advances to the next value.  If there was an error making
7448// the request the iterator does not advance and the error is returned.
7449func (iter *InterfaceListResultIterator) Next() error {
7450	iter.i++
7451	if iter.i < len(iter.page.Values()) {
7452		return nil
7453	}
7454	err := iter.page.Next()
7455	if err != nil {
7456		iter.i--
7457		return err
7458	}
7459	iter.i = 0
7460	return nil
7461}
7462
7463// NotDone returns true if the enumeration should be started or is not yet complete.
7464func (iter InterfaceListResultIterator) NotDone() bool {
7465	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7466}
7467
7468// Response returns the raw server response from the last page request.
7469func (iter InterfaceListResultIterator) Response() InterfaceListResult {
7470	return iter.page.Response()
7471}
7472
7473// Value returns the current value or a zero-initialized value if the
7474// iterator has advanced beyond the end of the collection.
7475func (iter InterfaceListResultIterator) Value() Interface {
7476	if !iter.page.NotDone() {
7477		return Interface{}
7478	}
7479	return iter.page.Values()[iter.i]
7480}
7481
7482// IsEmpty returns true if the ListResult contains no values.
7483func (ilr InterfaceListResult) IsEmpty() bool {
7484	return ilr.Value == nil || len(*ilr.Value) == 0
7485}
7486
7487// interfaceListResultPreparer prepares a request to retrieve the next set of results.
7488// It returns nil if no more results exist.
7489func (ilr InterfaceListResult) interfaceListResultPreparer() (*http.Request, error) {
7490	if ilr.NextLink == nil || len(to.String(ilr.NextLink)) < 1 {
7491		return nil, nil
7492	}
7493	return autorest.Prepare(&http.Request{},
7494		autorest.AsJSON(),
7495		autorest.AsGet(),
7496		autorest.WithBaseURL(to.String(ilr.NextLink)))
7497}
7498
7499// InterfaceListResultPage contains a page of Interface values.
7500type InterfaceListResultPage struct {
7501	fn  func(InterfaceListResult) (InterfaceListResult, error)
7502	ilr InterfaceListResult
7503}
7504
7505// Next advances to the next page of values.  If there was an error making
7506// the request the page does not advance and the error is returned.
7507func (page *InterfaceListResultPage) Next() error {
7508	next, err := page.fn(page.ilr)
7509	if err != nil {
7510		return err
7511	}
7512	page.ilr = next
7513	return nil
7514}
7515
7516// NotDone returns true if the page enumeration should be started or is not yet complete.
7517func (page InterfaceListResultPage) NotDone() bool {
7518	return !page.ilr.IsEmpty()
7519}
7520
7521// Response returns the raw server response from the last page request.
7522func (page InterfaceListResultPage) Response() InterfaceListResult {
7523	return page.ilr
7524}
7525
7526// Values returns the slice of values for the current page or nil if there are no values.
7527func (page InterfaceListResultPage) Values() []Interface {
7528	if page.ilr.IsEmpty() {
7529		return nil
7530	}
7531	return *page.ilr.Value
7532}
7533
7534// InterfaceLoadBalancerListResult response for list ip configurations API service call.
7535type InterfaceLoadBalancerListResult struct {
7536	autorest.Response `json:"-"`
7537	// Value - A list of load balancers.
7538	Value *[]LoadBalancer `json:"value,omitempty"`
7539	// NextLink - The URL to get the next set of results.
7540	NextLink *string `json:"nextLink,omitempty"`
7541}
7542
7543// InterfaceLoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
7544type InterfaceLoadBalancerListResultIterator struct {
7545	i    int
7546	page InterfaceLoadBalancerListResultPage
7547}
7548
7549// Next advances to the next value.  If there was an error making
7550// the request the iterator does not advance and the error is returned.
7551func (iter *InterfaceLoadBalancerListResultIterator) Next() error {
7552	iter.i++
7553	if iter.i < len(iter.page.Values()) {
7554		return nil
7555	}
7556	err := iter.page.Next()
7557	if err != nil {
7558		iter.i--
7559		return err
7560	}
7561	iter.i = 0
7562	return nil
7563}
7564
7565// NotDone returns true if the enumeration should be started or is not yet complete.
7566func (iter InterfaceLoadBalancerListResultIterator) NotDone() bool {
7567	return iter.page.NotDone() && iter.i < len(iter.page.Values())
7568}
7569
7570// Response returns the raw server response from the last page request.
7571func (iter InterfaceLoadBalancerListResultIterator) Response() InterfaceLoadBalancerListResult {
7572	return iter.page.Response()
7573}
7574
7575// Value returns the current value or a zero-initialized value if the
7576// iterator has advanced beyond the end of the collection.
7577func (iter InterfaceLoadBalancerListResultIterator) Value() LoadBalancer {
7578	if !iter.page.NotDone() {
7579		return LoadBalancer{}
7580	}
7581	return iter.page.Values()[iter.i]
7582}
7583
7584// IsEmpty returns true if the ListResult contains no values.
7585func (ilblr InterfaceLoadBalancerListResult) IsEmpty() bool {
7586	return ilblr.Value == nil || len(*ilblr.Value) == 0
7587}
7588
7589// interfaceLoadBalancerListResultPreparer prepares a request to retrieve the next set of results.
7590// It returns nil if no more results exist.
7591func (ilblr InterfaceLoadBalancerListResult) interfaceLoadBalancerListResultPreparer() (*http.Request, error) {
7592	if ilblr.NextLink == nil || len(to.String(ilblr.NextLink)) < 1 {
7593		return nil, nil
7594	}
7595	return autorest.Prepare(&http.Request{},
7596		autorest.AsJSON(),
7597		autorest.AsGet(),
7598		autorest.WithBaseURL(to.String(ilblr.NextLink)))
7599}
7600
7601// InterfaceLoadBalancerListResultPage contains a page of LoadBalancer values.
7602type InterfaceLoadBalancerListResultPage struct {
7603	fn    func(InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)
7604	ilblr InterfaceLoadBalancerListResult
7605}
7606
7607// Next advances to the next page of values.  If there was an error making
7608// the request the page does not advance and the error is returned.
7609func (page *InterfaceLoadBalancerListResultPage) Next() error {
7610	next, err := page.fn(page.ilblr)
7611	if err != nil {
7612		return err
7613	}
7614	page.ilblr = next
7615	return nil
7616}
7617
7618// NotDone returns true if the page enumeration should be started or is not yet complete.
7619func (page InterfaceLoadBalancerListResultPage) NotDone() bool {
7620	return !page.ilblr.IsEmpty()
7621}
7622
7623// Response returns the raw server response from the last page request.
7624func (page InterfaceLoadBalancerListResultPage) Response() InterfaceLoadBalancerListResult {
7625	return page.ilblr
7626}
7627
7628// Values returns the slice of values for the current page or nil if there are no values.
7629func (page InterfaceLoadBalancerListResultPage) Values() []LoadBalancer {
7630	if page.ilblr.IsEmpty() {
7631		return nil
7632	}
7633	return *page.ilblr.Value
7634}
7635
7636// InterfacePropertiesFormat networkInterface properties.
7637type InterfacePropertiesFormat struct {
7638	// VirtualMachine - The reference of a virtual machine.
7639	VirtualMachine *SubResource `json:"virtualMachine,omitempty"`
7640	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
7641	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
7642	// IPConfigurations - A list of IPConfigurations of the network interface.
7643	IPConfigurations *[]InterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
7644	// DNSSettings - The DNS settings in network interface.
7645	DNSSettings *InterfaceDNSSettings `json:"dnsSettings,omitempty"`
7646	// MacAddress - The MAC address of the network interface.
7647	MacAddress *string `json:"macAddress,omitempty"`
7648	// Primary - Gets whether this is a primary network interface on a virtual machine.
7649	Primary *bool `json:"primary,omitempty"`
7650	// EnableAcceleratedNetworking - If the network interface is accelerated networking enabled.
7651	EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"`
7652	// EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface.
7653	EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"`
7654	// ResourceGUID - The resource GUID property of the network interface resource.
7655	ResourceGUID *string `json:"resourceGuid,omitempty"`
7656	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
7657	ProvisioningState *string `json:"provisioningState,omitempty"`
7658}
7659
7660// InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
7661// operation.
7662type InterfacesCreateOrUpdateFuture struct {
7663	azure.Future
7664}
7665
7666// Result returns the result of the asynchronous operation.
7667// If the operation has not completed it will return an error.
7668func (future *InterfacesCreateOrUpdateFuture) Result(client InterfacesClient) (i Interface, err error) {
7669	var done bool
7670	done, err = future.Done(client)
7671	if err != nil {
7672		err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
7673		return
7674	}
7675	if !done {
7676		err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture")
7677		return
7678	}
7679	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7680	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
7681		i, err = client.CreateOrUpdateResponder(i.Response.Response)
7682		if err != nil {
7683			err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request")
7684		}
7685	}
7686	return
7687}
7688
7689// InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
7690type InterfacesDeleteFuture struct {
7691	azure.Future
7692}
7693
7694// Result returns the result of the asynchronous operation.
7695// If the operation has not completed it will return an error.
7696func (future *InterfacesDeleteFuture) Result(client InterfacesClient) (ar autorest.Response, err error) {
7697	var done bool
7698	done, err = future.Done(client)
7699	if err != nil {
7700		err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure")
7701		return
7702	}
7703	if !done {
7704		err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture")
7705		return
7706	}
7707	ar.Response = future.Response()
7708	return
7709}
7710
7711// InterfacesGetEffectiveRouteTableFuture an abstraction for monitoring and retrieving the results of a
7712// long-running operation.
7713type InterfacesGetEffectiveRouteTableFuture struct {
7714	azure.Future
7715}
7716
7717// Result returns the result of the asynchronous operation.
7718// If the operation has not completed it will return an error.
7719func (future *InterfacesGetEffectiveRouteTableFuture) Result(client InterfacesClient) (erlr EffectiveRouteListResult, err error) {
7720	var done bool
7721	done, err = future.Done(client)
7722	if err != nil {
7723		err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", future.Response(), "Polling failure")
7724		return
7725	}
7726	if !done {
7727		err = azure.NewAsyncOpIncompleteError("network.InterfacesGetEffectiveRouteTableFuture")
7728		return
7729	}
7730	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7731	if erlr.Response.Response, err = future.GetResult(sender); err == nil && erlr.Response.Response.StatusCode != http.StatusNoContent {
7732		erlr, err = client.GetEffectiveRouteTableResponder(erlr.Response.Response)
7733		if err != nil {
7734			err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", erlr.Response.Response, "Failure responding to request")
7735		}
7736	}
7737	return
7738}
7739
7740// InterfacesListEffectiveNetworkSecurityGroupsFuture an abstraction for monitoring and retrieving the results of a
7741// long-running operation.
7742type InterfacesListEffectiveNetworkSecurityGroupsFuture struct {
7743	azure.Future
7744}
7745
7746// Result returns the result of the asynchronous operation.
7747// If the operation has not completed it will return an error.
7748func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) Result(client InterfacesClient) (ensglr EffectiveNetworkSecurityGroupListResult, err error) {
7749	var done bool
7750	done, err = future.Done(client)
7751	if err != nil {
7752		err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", future.Response(), "Polling failure")
7753		return
7754	}
7755	if !done {
7756		err = azure.NewAsyncOpIncompleteError("network.InterfacesListEffectiveNetworkSecurityGroupsFuture")
7757		return
7758	}
7759	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7760	if ensglr.Response.Response, err = future.GetResult(sender); err == nil && ensglr.Response.Response.StatusCode != http.StatusNoContent {
7761		ensglr, err = client.ListEffectiveNetworkSecurityGroupsResponder(ensglr.Response.Response)
7762		if err != nil {
7763			err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", ensglr.Response.Response, "Failure responding to request")
7764		}
7765	}
7766	return
7767}
7768
7769// InterfacesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running operation.
7770type InterfacesUpdateTagsFuture struct {
7771	azure.Future
7772}
7773
7774// Result returns the result of the asynchronous operation.
7775// If the operation has not completed it will return an error.
7776func (future *InterfacesUpdateTagsFuture) Result(client InterfacesClient) (i Interface, err error) {
7777	var done bool
7778	done, err = future.Done(client)
7779	if err != nil {
7780		err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
7781		return
7782	}
7783	if !done {
7784		err = azure.NewAsyncOpIncompleteError("network.InterfacesUpdateTagsFuture")
7785		return
7786	}
7787	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
7788	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
7789		i, err = client.UpdateTagsResponder(i.Response.Response)
7790		if err != nil {
7791			err = autorest.NewErrorWithError(err, "network.InterfacesUpdateTagsFuture", "Result", i.Response.Response, "Failure responding to request")
7792		}
7793	}
7794	return
7795}
7796
7797// IPAddressAvailabilityResult response for CheckIPAddressAvailability API service call
7798type IPAddressAvailabilityResult struct {
7799	autorest.Response `json:"-"`
7800	// Available - Private IP address availability.
7801	Available *bool `json:"available,omitempty"`
7802	// AvailableIPAddresses - Contains other available private IP addresses if the asked for address is taken.
7803	AvailableIPAddresses *[]string `json:"availableIPAddresses,omitempty"`
7804}
7805
7806// IPConfiguration IP configuration
7807type IPConfiguration struct {
7808	// IPConfigurationPropertiesFormat - Properties of the IP configuration
7809	*IPConfigurationPropertiesFormat `json:"properties,omitempty"`
7810	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
7811	Name *string `json:"name,omitempty"`
7812	// Etag - A unique read-only string that changes whenever the resource is updated.
7813	Etag *string `json:"etag,omitempty"`
7814	// ID - Resource ID.
7815	ID *string `json:"id,omitempty"`
7816}
7817
7818// MarshalJSON is the custom marshaler for IPConfiguration.
7819func (ic IPConfiguration) MarshalJSON() ([]byte, error) {
7820	objectMap := make(map[string]interface{})
7821	if ic.IPConfigurationPropertiesFormat != nil {
7822		objectMap["properties"] = ic.IPConfigurationPropertiesFormat
7823	}
7824	if ic.Name != nil {
7825		objectMap["name"] = ic.Name
7826	}
7827	if ic.Etag != nil {
7828		objectMap["etag"] = ic.Etag
7829	}
7830	if ic.ID != nil {
7831		objectMap["id"] = ic.ID
7832	}
7833	return json.Marshal(objectMap)
7834}
7835
7836// UnmarshalJSON is the custom unmarshaler for IPConfiguration struct.
7837func (ic *IPConfiguration) UnmarshalJSON(body []byte) error {
7838	var m map[string]*json.RawMessage
7839	err := json.Unmarshal(body, &m)
7840	if err != nil {
7841		return err
7842	}
7843	for k, v := range m {
7844		switch k {
7845		case "properties":
7846			if v != nil {
7847				var IPConfigurationPropertiesFormat IPConfigurationPropertiesFormat
7848				err = json.Unmarshal(*v, &IPConfigurationPropertiesFormat)
7849				if err != nil {
7850					return err
7851				}
7852				ic.IPConfigurationPropertiesFormat = &IPConfigurationPropertiesFormat
7853			}
7854		case "name":
7855			if v != nil {
7856				var name string
7857				err = json.Unmarshal(*v, &name)
7858				if err != nil {
7859					return err
7860				}
7861				ic.Name = &name
7862			}
7863		case "etag":
7864			if v != nil {
7865				var etag string
7866				err = json.Unmarshal(*v, &etag)
7867				if err != nil {
7868					return err
7869				}
7870				ic.Etag = &etag
7871			}
7872		case "id":
7873			if v != nil {
7874				var ID string
7875				err = json.Unmarshal(*v, &ID)
7876				if err != nil {
7877					return err
7878				}
7879				ic.ID = &ID
7880			}
7881		}
7882	}
7883
7884	return nil
7885}
7886
7887// IPConfigurationPropertiesFormat properties of IP configuration.
7888type IPConfigurationPropertiesFormat struct {
7889	// PrivateIPAddress - The private IP address of the IP configuration.
7890	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
7891	// PrivateIPAllocationMethod - The private IP allocation method. Possible values are 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
7892	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
7893	// Subnet - The reference of the subnet resource.
7894	Subnet *Subnet `json:"subnet,omitempty"`
7895	// PublicIPAddress - The reference of the public IP resource.
7896	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
7897	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
7898	ProvisioningState *string `json:"provisioningState,omitempty"`
7899}
7900
7901// IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection
7902type IpsecPolicy struct {
7903	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.
7904	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
7905	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.
7906	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
7907	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
7908	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
7909	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
7910	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
7911	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256'
7912	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
7913	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'MD5', 'SHA1', 'SHA256', 'SHA384'
7914	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
7915	// DhGroup - The DH Groups used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
7916	DhGroup DhGroup `json:"dhGroup,omitempty"`
7917	// PfsGroup - The DH Groups used in IKE Phase 2 for new child SA. Possible values include: 'PfsGroupNone', 'PfsGroupPFS1', 'PfsGroupPFS2', 'PfsGroupPFS2048', 'PfsGroupECP256', 'PfsGroupECP384', 'PfsGroupPFS24'
7918	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
7919}
7920
7921// IPTag contains the IpTag associated with the public IP address
7922type IPTag struct {
7923	// IPTagType - Gets or sets the ipTag type: Example FirstPartyUsage.
7924	IPTagType *string `json:"ipTagType,omitempty"`
7925	// Tag - Gets or sets value of the IpTag associated with the public IP. Example SQL, Storage etc
7926	Tag *string `json:"tag,omitempty"`
7927}
7928
7929// Ipv6ExpressRouteCircuitPeeringConfig contains IPv6 peering config.
7930type Ipv6ExpressRouteCircuitPeeringConfig struct {
7931	// PrimaryPeerAddressPrefix - The primary address prefix.
7932	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
7933	// SecondaryPeerAddressPrefix - The secondary address prefix.
7934	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
7935	// MicrosoftPeeringConfig - The Microsoft peering configuration.
7936	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
7937	// RouteFilter - The reference of the RouteFilter resource.
7938	RouteFilter *RouteFilter `json:"routeFilter,omitempty"`
7939	// State - The state of peering. Possible values are: 'Disabled' and 'Enabled'. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
7940	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
7941}
7942
7943// LoadBalancer loadBalancer resource
7944type LoadBalancer struct {
7945	autorest.Response `json:"-"`
7946	// Sku - The load balancer SKU.
7947	Sku *LoadBalancerSku `json:"sku,omitempty"`
7948	// LoadBalancerPropertiesFormat - Properties of load balancer.
7949	*LoadBalancerPropertiesFormat `json:"properties,omitempty"`
7950	// Etag - A unique read-only string that changes whenever the resource is updated.
7951	Etag *string `json:"etag,omitempty"`
7952	// ID - Resource ID.
7953	ID *string `json:"id,omitempty"`
7954	// Name - Resource name.
7955	Name *string `json:"name,omitempty"`
7956	// Type - Resource type.
7957	Type *string `json:"type,omitempty"`
7958	// Location - Resource location.
7959	Location *string `json:"location,omitempty"`
7960	// Tags - Resource tags.
7961	Tags map[string]*string `json:"tags"`
7962}
7963
7964// MarshalJSON is the custom marshaler for LoadBalancer.
7965func (lb LoadBalancer) MarshalJSON() ([]byte, error) {
7966	objectMap := make(map[string]interface{})
7967	if lb.Sku != nil {
7968		objectMap["sku"] = lb.Sku
7969	}
7970	if lb.LoadBalancerPropertiesFormat != nil {
7971		objectMap["properties"] = lb.LoadBalancerPropertiesFormat
7972	}
7973	if lb.Etag != nil {
7974		objectMap["etag"] = lb.Etag
7975	}
7976	if lb.ID != nil {
7977		objectMap["id"] = lb.ID
7978	}
7979	if lb.Name != nil {
7980		objectMap["name"] = lb.Name
7981	}
7982	if lb.Type != nil {
7983		objectMap["type"] = lb.Type
7984	}
7985	if lb.Location != nil {
7986		objectMap["location"] = lb.Location
7987	}
7988	if lb.Tags != nil {
7989		objectMap["tags"] = lb.Tags
7990	}
7991	return json.Marshal(objectMap)
7992}
7993
7994// UnmarshalJSON is the custom unmarshaler for LoadBalancer struct.
7995func (lb *LoadBalancer) UnmarshalJSON(body []byte) error {
7996	var m map[string]*json.RawMessage
7997	err := json.Unmarshal(body, &m)
7998	if err != nil {
7999		return err
8000	}
8001	for k, v := range m {
8002		switch k {
8003		case "sku":
8004			if v != nil {
8005				var sku LoadBalancerSku
8006				err = json.Unmarshal(*v, &sku)
8007				if err != nil {
8008					return err
8009				}
8010				lb.Sku = &sku
8011			}
8012		case "properties":
8013			if v != nil {
8014				var loadBalancerPropertiesFormat LoadBalancerPropertiesFormat
8015				err = json.Unmarshal(*v, &loadBalancerPropertiesFormat)
8016				if err != nil {
8017					return err
8018				}
8019				lb.LoadBalancerPropertiesFormat = &loadBalancerPropertiesFormat
8020			}
8021		case "etag":
8022			if v != nil {
8023				var etag string
8024				err = json.Unmarshal(*v, &etag)
8025				if err != nil {
8026					return err
8027				}
8028				lb.Etag = &etag
8029			}
8030		case "id":
8031			if v != nil {
8032				var ID string
8033				err = json.Unmarshal(*v, &ID)
8034				if err != nil {
8035					return err
8036				}
8037				lb.ID = &ID
8038			}
8039		case "name":
8040			if v != nil {
8041				var name string
8042				err = json.Unmarshal(*v, &name)
8043				if err != nil {
8044					return err
8045				}
8046				lb.Name = &name
8047			}
8048		case "type":
8049			if v != nil {
8050				var typeVar string
8051				err = json.Unmarshal(*v, &typeVar)
8052				if err != nil {
8053					return err
8054				}
8055				lb.Type = &typeVar
8056			}
8057		case "location":
8058			if v != nil {
8059				var location string
8060				err = json.Unmarshal(*v, &location)
8061				if err != nil {
8062					return err
8063				}
8064				lb.Location = &location
8065			}
8066		case "tags":
8067			if v != nil {
8068				var tags map[string]*string
8069				err = json.Unmarshal(*v, &tags)
8070				if err != nil {
8071					return err
8072				}
8073				lb.Tags = tags
8074			}
8075		}
8076	}
8077
8078	return nil
8079}
8080
8081// LoadBalancerBackendAddressPoolListResult response for ListBackendAddressPool API service call.
8082type LoadBalancerBackendAddressPoolListResult struct {
8083	autorest.Response `json:"-"`
8084	// Value - A list of backend address pools in a load balancer.
8085	Value *[]BackendAddressPool `json:"value,omitempty"`
8086	// NextLink - The URL to get the next set of results.
8087	NextLink *string `json:"nextLink,omitempty"`
8088}
8089
8090// LoadBalancerBackendAddressPoolListResultIterator provides access to a complete listing of BackendAddressPool
8091// values.
8092type LoadBalancerBackendAddressPoolListResultIterator struct {
8093	i    int
8094	page LoadBalancerBackendAddressPoolListResultPage
8095}
8096
8097// Next advances to the next value.  If there was an error making
8098// the request the iterator does not advance and the error is returned.
8099func (iter *LoadBalancerBackendAddressPoolListResultIterator) Next() error {
8100	iter.i++
8101	if iter.i < len(iter.page.Values()) {
8102		return nil
8103	}
8104	err := iter.page.Next()
8105	if err != nil {
8106		iter.i--
8107		return err
8108	}
8109	iter.i = 0
8110	return nil
8111}
8112
8113// NotDone returns true if the enumeration should be started or is not yet complete.
8114func (iter LoadBalancerBackendAddressPoolListResultIterator) NotDone() bool {
8115	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8116}
8117
8118// Response returns the raw server response from the last page request.
8119func (iter LoadBalancerBackendAddressPoolListResultIterator) Response() LoadBalancerBackendAddressPoolListResult {
8120	return iter.page.Response()
8121}
8122
8123// Value returns the current value or a zero-initialized value if the
8124// iterator has advanced beyond the end of the collection.
8125func (iter LoadBalancerBackendAddressPoolListResultIterator) Value() BackendAddressPool {
8126	if !iter.page.NotDone() {
8127		return BackendAddressPool{}
8128	}
8129	return iter.page.Values()[iter.i]
8130}
8131
8132// IsEmpty returns true if the ListResult contains no values.
8133func (lbbaplr LoadBalancerBackendAddressPoolListResult) IsEmpty() bool {
8134	return lbbaplr.Value == nil || len(*lbbaplr.Value) == 0
8135}
8136
8137// loadBalancerBackendAddressPoolListResultPreparer prepares a request to retrieve the next set of results.
8138// It returns nil if no more results exist.
8139func (lbbaplr LoadBalancerBackendAddressPoolListResult) loadBalancerBackendAddressPoolListResultPreparer() (*http.Request, error) {
8140	if lbbaplr.NextLink == nil || len(to.String(lbbaplr.NextLink)) < 1 {
8141		return nil, nil
8142	}
8143	return autorest.Prepare(&http.Request{},
8144		autorest.AsJSON(),
8145		autorest.AsGet(),
8146		autorest.WithBaseURL(to.String(lbbaplr.NextLink)))
8147}
8148
8149// LoadBalancerBackendAddressPoolListResultPage contains a page of BackendAddressPool values.
8150type LoadBalancerBackendAddressPoolListResultPage struct {
8151	fn      func(LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)
8152	lbbaplr LoadBalancerBackendAddressPoolListResult
8153}
8154
8155// Next advances to the next page of values.  If there was an error making
8156// the request the page does not advance and the error is returned.
8157func (page *LoadBalancerBackendAddressPoolListResultPage) Next() error {
8158	next, err := page.fn(page.lbbaplr)
8159	if err != nil {
8160		return err
8161	}
8162	page.lbbaplr = next
8163	return nil
8164}
8165
8166// NotDone returns true if the page enumeration should be started or is not yet complete.
8167func (page LoadBalancerBackendAddressPoolListResultPage) NotDone() bool {
8168	return !page.lbbaplr.IsEmpty()
8169}
8170
8171// Response returns the raw server response from the last page request.
8172func (page LoadBalancerBackendAddressPoolListResultPage) Response() LoadBalancerBackendAddressPoolListResult {
8173	return page.lbbaplr
8174}
8175
8176// Values returns the slice of values for the current page or nil if there are no values.
8177func (page LoadBalancerBackendAddressPoolListResultPage) Values() []BackendAddressPool {
8178	if page.lbbaplr.IsEmpty() {
8179		return nil
8180	}
8181	return *page.lbbaplr.Value
8182}
8183
8184// LoadBalancerFrontendIPConfigurationListResult response for ListFrontendIPConfiguration API service call.
8185type LoadBalancerFrontendIPConfigurationListResult struct {
8186	autorest.Response `json:"-"`
8187	// Value - A list of frontend IP configurations in a load balancer.
8188	Value *[]FrontendIPConfiguration `json:"value,omitempty"`
8189	// NextLink - The URL to get the next set of results.
8190	NextLink *string `json:"nextLink,omitempty"`
8191}
8192
8193// LoadBalancerFrontendIPConfigurationListResultIterator provides access to a complete listing of
8194// FrontendIPConfiguration values.
8195type LoadBalancerFrontendIPConfigurationListResultIterator struct {
8196	i    int
8197	page LoadBalancerFrontendIPConfigurationListResultPage
8198}
8199
8200// Next advances to the next value.  If there was an error making
8201// the request the iterator does not advance and the error is returned.
8202func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) Next() error {
8203	iter.i++
8204	if iter.i < len(iter.page.Values()) {
8205		return nil
8206	}
8207	err := iter.page.Next()
8208	if err != nil {
8209		iter.i--
8210		return err
8211	}
8212	iter.i = 0
8213	return nil
8214}
8215
8216// NotDone returns true if the enumeration should be started or is not yet complete.
8217func (iter LoadBalancerFrontendIPConfigurationListResultIterator) NotDone() bool {
8218	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8219}
8220
8221// Response returns the raw server response from the last page request.
8222func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Response() LoadBalancerFrontendIPConfigurationListResult {
8223	return iter.page.Response()
8224}
8225
8226// Value returns the current value or a zero-initialized value if the
8227// iterator has advanced beyond the end of the collection.
8228func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Value() FrontendIPConfiguration {
8229	if !iter.page.NotDone() {
8230		return FrontendIPConfiguration{}
8231	}
8232	return iter.page.Values()[iter.i]
8233}
8234
8235// IsEmpty returns true if the ListResult contains no values.
8236func (lbficlr LoadBalancerFrontendIPConfigurationListResult) IsEmpty() bool {
8237	return lbficlr.Value == nil || len(*lbficlr.Value) == 0
8238}
8239
8240// loadBalancerFrontendIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
8241// It returns nil if no more results exist.
8242func (lbficlr LoadBalancerFrontendIPConfigurationListResult) loadBalancerFrontendIPConfigurationListResultPreparer() (*http.Request, error) {
8243	if lbficlr.NextLink == nil || len(to.String(lbficlr.NextLink)) < 1 {
8244		return nil, nil
8245	}
8246	return autorest.Prepare(&http.Request{},
8247		autorest.AsJSON(),
8248		autorest.AsGet(),
8249		autorest.WithBaseURL(to.String(lbficlr.NextLink)))
8250}
8251
8252// LoadBalancerFrontendIPConfigurationListResultPage contains a page of FrontendIPConfiguration values.
8253type LoadBalancerFrontendIPConfigurationListResultPage struct {
8254	fn      func(LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)
8255	lbficlr LoadBalancerFrontendIPConfigurationListResult
8256}
8257
8258// Next advances to the next page of values.  If there was an error making
8259// the request the page does not advance and the error is returned.
8260func (page *LoadBalancerFrontendIPConfigurationListResultPage) Next() error {
8261	next, err := page.fn(page.lbficlr)
8262	if err != nil {
8263		return err
8264	}
8265	page.lbficlr = next
8266	return nil
8267}
8268
8269// NotDone returns true if the page enumeration should be started or is not yet complete.
8270func (page LoadBalancerFrontendIPConfigurationListResultPage) NotDone() bool {
8271	return !page.lbficlr.IsEmpty()
8272}
8273
8274// Response returns the raw server response from the last page request.
8275func (page LoadBalancerFrontendIPConfigurationListResultPage) Response() LoadBalancerFrontendIPConfigurationListResult {
8276	return page.lbficlr
8277}
8278
8279// Values returns the slice of values for the current page or nil if there are no values.
8280func (page LoadBalancerFrontendIPConfigurationListResultPage) Values() []FrontendIPConfiguration {
8281	if page.lbficlr.IsEmpty() {
8282		return nil
8283	}
8284	return *page.lbficlr.Value
8285}
8286
8287// LoadBalancerListResult response for ListLoadBalancers API service call.
8288type LoadBalancerListResult struct {
8289	autorest.Response `json:"-"`
8290	// Value - A list of load balancers in a resource group.
8291	Value *[]LoadBalancer `json:"value,omitempty"`
8292	// NextLink - The URL to get the next set of results.
8293	NextLink *string `json:"nextLink,omitempty"`
8294}
8295
8296// LoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
8297type LoadBalancerListResultIterator struct {
8298	i    int
8299	page LoadBalancerListResultPage
8300}
8301
8302// Next advances to the next value.  If there was an error making
8303// the request the iterator does not advance and the error is returned.
8304func (iter *LoadBalancerListResultIterator) Next() error {
8305	iter.i++
8306	if iter.i < len(iter.page.Values()) {
8307		return nil
8308	}
8309	err := iter.page.Next()
8310	if err != nil {
8311		iter.i--
8312		return err
8313	}
8314	iter.i = 0
8315	return nil
8316}
8317
8318// NotDone returns true if the enumeration should be started or is not yet complete.
8319func (iter LoadBalancerListResultIterator) NotDone() bool {
8320	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8321}
8322
8323// Response returns the raw server response from the last page request.
8324func (iter LoadBalancerListResultIterator) Response() LoadBalancerListResult {
8325	return iter.page.Response()
8326}
8327
8328// Value returns the current value or a zero-initialized value if the
8329// iterator has advanced beyond the end of the collection.
8330func (iter LoadBalancerListResultIterator) Value() LoadBalancer {
8331	if !iter.page.NotDone() {
8332		return LoadBalancer{}
8333	}
8334	return iter.page.Values()[iter.i]
8335}
8336
8337// IsEmpty returns true if the ListResult contains no values.
8338func (lblr LoadBalancerListResult) IsEmpty() bool {
8339	return lblr.Value == nil || len(*lblr.Value) == 0
8340}
8341
8342// loadBalancerListResultPreparer prepares a request to retrieve the next set of results.
8343// It returns nil if no more results exist.
8344func (lblr LoadBalancerListResult) loadBalancerListResultPreparer() (*http.Request, error) {
8345	if lblr.NextLink == nil || len(to.String(lblr.NextLink)) < 1 {
8346		return nil, nil
8347	}
8348	return autorest.Prepare(&http.Request{},
8349		autorest.AsJSON(),
8350		autorest.AsGet(),
8351		autorest.WithBaseURL(to.String(lblr.NextLink)))
8352}
8353
8354// LoadBalancerListResultPage contains a page of LoadBalancer values.
8355type LoadBalancerListResultPage struct {
8356	fn   func(LoadBalancerListResult) (LoadBalancerListResult, error)
8357	lblr LoadBalancerListResult
8358}
8359
8360// Next advances to the next page of values.  If there was an error making
8361// the request the page does not advance and the error is returned.
8362func (page *LoadBalancerListResultPage) Next() error {
8363	next, err := page.fn(page.lblr)
8364	if err != nil {
8365		return err
8366	}
8367	page.lblr = next
8368	return nil
8369}
8370
8371// NotDone returns true if the page enumeration should be started or is not yet complete.
8372func (page LoadBalancerListResultPage) NotDone() bool {
8373	return !page.lblr.IsEmpty()
8374}
8375
8376// Response returns the raw server response from the last page request.
8377func (page LoadBalancerListResultPage) Response() LoadBalancerListResult {
8378	return page.lblr
8379}
8380
8381// Values returns the slice of values for the current page or nil if there are no values.
8382func (page LoadBalancerListResultPage) Values() []LoadBalancer {
8383	if page.lblr.IsEmpty() {
8384		return nil
8385	}
8386	return *page.lblr.Value
8387}
8388
8389// LoadBalancerLoadBalancingRuleListResult response for ListLoadBalancingRule API service call.
8390type LoadBalancerLoadBalancingRuleListResult struct {
8391	autorest.Response `json:"-"`
8392	// Value - A list of load balancing rules in a load balancer.
8393	Value *[]LoadBalancingRule `json:"value,omitempty"`
8394	// NextLink - The URL to get the next set of results.
8395	NextLink *string `json:"nextLink,omitempty"`
8396}
8397
8398// LoadBalancerLoadBalancingRuleListResultIterator provides access to a complete listing of LoadBalancingRule
8399// values.
8400type LoadBalancerLoadBalancingRuleListResultIterator struct {
8401	i    int
8402	page LoadBalancerLoadBalancingRuleListResultPage
8403}
8404
8405// Next advances to the next value.  If there was an error making
8406// the request the iterator does not advance and the error is returned.
8407func (iter *LoadBalancerLoadBalancingRuleListResultIterator) Next() error {
8408	iter.i++
8409	if iter.i < len(iter.page.Values()) {
8410		return nil
8411	}
8412	err := iter.page.Next()
8413	if err != nil {
8414		iter.i--
8415		return err
8416	}
8417	iter.i = 0
8418	return nil
8419}
8420
8421// NotDone returns true if the enumeration should be started or is not yet complete.
8422func (iter LoadBalancerLoadBalancingRuleListResultIterator) NotDone() bool {
8423	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8424}
8425
8426// Response returns the raw server response from the last page request.
8427func (iter LoadBalancerLoadBalancingRuleListResultIterator) Response() LoadBalancerLoadBalancingRuleListResult {
8428	return iter.page.Response()
8429}
8430
8431// Value returns the current value or a zero-initialized value if the
8432// iterator has advanced beyond the end of the collection.
8433func (iter LoadBalancerLoadBalancingRuleListResultIterator) Value() LoadBalancingRule {
8434	if !iter.page.NotDone() {
8435		return LoadBalancingRule{}
8436	}
8437	return iter.page.Values()[iter.i]
8438}
8439
8440// IsEmpty returns true if the ListResult contains no values.
8441func (lblbrlr LoadBalancerLoadBalancingRuleListResult) IsEmpty() bool {
8442	return lblbrlr.Value == nil || len(*lblbrlr.Value) == 0
8443}
8444
8445// loadBalancerLoadBalancingRuleListResultPreparer prepares a request to retrieve the next set of results.
8446// It returns nil if no more results exist.
8447func (lblbrlr LoadBalancerLoadBalancingRuleListResult) loadBalancerLoadBalancingRuleListResultPreparer() (*http.Request, error) {
8448	if lblbrlr.NextLink == nil || len(to.String(lblbrlr.NextLink)) < 1 {
8449		return nil, nil
8450	}
8451	return autorest.Prepare(&http.Request{},
8452		autorest.AsJSON(),
8453		autorest.AsGet(),
8454		autorest.WithBaseURL(to.String(lblbrlr.NextLink)))
8455}
8456
8457// LoadBalancerLoadBalancingRuleListResultPage contains a page of LoadBalancingRule values.
8458type LoadBalancerLoadBalancingRuleListResultPage struct {
8459	fn      func(LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)
8460	lblbrlr LoadBalancerLoadBalancingRuleListResult
8461}
8462
8463// Next advances to the next page of values.  If there was an error making
8464// the request the page does not advance and the error is returned.
8465func (page *LoadBalancerLoadBalancingRuleListResultPage) Next() error {
8466	next, err := page.fn(page.lblbrlr)
8467	if err != nil {
8468		return err
8469	}
8470	page.lblbrlr = next
8471	return nil
8472}
8473
8474// NotDone returns true if the page enumeration should be started or is not yet complete.
8475func (page LoadBalancerLoadBalancingRuleListResultPage) NotDone() bool {
8476	return !page.lblbrlr.IsEmpty()
8477}
8478
8479// Response returns the raw server response from the last page request.
8480func (page LoadBalancerLoadBalancingRuleListResultPage) Response() LoadBalancerLoadBalancingRuleListResult {
8481	return page.lblbrlr
8482}
8483
8484// Values returns the slice of values for the current page or nil if there are no values.
8485func (page LoadBalancerLoadBalancingRuleListResultPage) Values() []LoadBalancingRule {
8486	if page.lblbrlr.IsEmpty() {
8487		return nil
8488	}
8489	return *page.lblbrlr.Value
8490}
8491
8492// LoadBalancerProbeListResult response for ListProbe API service call.
8493type LoadBalancerProbeListResult struct {
8494	autorest.Response `json:"-"`
8495	// Value - A list of probes in a load balancer.
8496	Value *[]Probe `json:"value,omitempty"`
8497	// NextLink - The URL to get the next set of results.
8498	NextLink *string `json:"nextLink,omitempty"`
8499}
8500
8501// LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values.
8502type LoadBalancerProbeListResultIterator struct {
8503	i    int
8504	page LoadBalancerProbeListResultPage
8505}
8506
8507// Next advances to the next value.  If there was an error making
8508// the request the iterator does not advance and the error is returned.
8509func (iter *LoadBalancerProbeListResultIterator) Next() error {
8510	iter.i++
8511	if iter.i < len(iter.page.Values()) {
8512		return nil
8513	}
8514	err := iter.page.Next()
8515	if err != nil {
8516		iter.i--
8517		return err
8518	}
8519	iter.i = 0
8520	return nil
8521}
8522
8523// NotDone returns true if the enumeration should be started or is not yet complete.
8524func (iter LoadBalancerProbeListResultIterator) NotDone() bool {
8525	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8526}
8527
8528// Response returns the raw server response from the last page request.
8529func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult {
8530	return iter.page.Response()
8531}
8532
8533// Value returns the current value or a zero-initialized value if the
8534// iterator has advanced beyond the end of the collection.
8535func (iter LoadBalancerProbeListResultIterator) Value() Probe {
8536	if !iter.page.NotDone() {
8537		return Probe{}
8538	}
8539	return iter.page.Values()[iter.i]
8540}
8541
8542// IsEmpty returns true if the ListResult contains no values.
8543func (lbplr LoadBalancerProbeListResult) IsEmpty() bool {
8544	return lbplr.Value == nil || len(*lbplr.Value) == 0
8545}
8546
8547// loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results.
8548// It returns nil if no more results exist.
8549func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer() (*http.Request, error) {
8550	if lbplr.NextLink == nil || len(to.String(lbplr.NextLink)) < 1 {
8551		return nil, nil
8552	}
8553	return autorest.Prepare(&http.Request{},
8554		autorest.AsJSON(),
8555		autorest.AsGet(),
8556		autorest.WithBaseURL(to.String(lbplr.NextLink)))
8557}
8558
8559// LoadBalancerProbeListResultPage contains a page of Probe values.
8560type LoadBalancerProbeListResultPage struct {
8561	fn    func(LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)
8562	lbplr LoadBalancerProbeListResult
8563}
8564
8565// Next advances to the next page of values.  If there was an error making
8566// the request the page does not advance and the error is returned.
8567func (page *LoadBalancerProbeListResultPage) Next() error {
8568	next, err := page.fn(page.lbplr)
8569	if err != nil {
8570		return err
8571	}
8572	page.lbplr = next
8573	return nil
8574}
8575
8576// NotDone returns true if the page enumeration should be started or is not yet complete.
8577func (page LoadBalancerProbeListResultPage) NotDone() bool {
8578	return !page.lbplr.IsEmpty()
8579}
8580
8581// Response returns the raw server response from the last page request.
8582func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult {
8583	return page.lbplr
8584}
8585
8586// Values returns the slice of values for the current page or nil if there are no values.
8587func (page LoadBalancerProbeListResultPage) Values() []Probe {
8588	if page.lbplr.IsEmpty() {
8589		return nil
8590	}
8591	return *page.lbplr.Value
8592}
8593
8594// LoadBalancerPropertiesFormat properties of the load balancer.
8595type LoadBalancerPropertiesFormat struct {
8596	// FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer
8597	FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
8598	// BackendAddressPools - Collection of backend address pools used by a load balancer
8599	BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"`
8600	// LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning
8601	LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"`
8602	// Probes - Collection of probe objects used in the load balancer
8603	Probes *[]Probe `json:"probes,omitempty"`
8604	// 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.
8605	InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"`
8606	// 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.
8607	InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"`
8608	// OutboundNatRules - The outbound NAT rules.
8609	OutboundNatRules *[]OutboundNatRule `json:"outboundNatRules,omitempty"`
8610	// ResourceGUID - The resource GUID property of the load balancer resource.
8611	ResourceGUID *string `json:"resourceGuid,omitempty"`
8612	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
8613	ProvisioningState *string `json:"provisioningState,omitempty"`
8614}
8615
8616// LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
8617// operation.
8618type LoadBalancersCreateOrUpdateFuture struct {
8619	azure.Future
8620}
8621
8622// Result returns the result of the asynchronous operation.
8623// If the operation has not completed it will return an error.
8624func (future *LoadBalancersCreateOrUpdateFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
8625	var done bool
8626	done, err = future.Done(client)
8627	if err != nil {
8628		err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
8629		return
8630	}
8631	if !done {
8632		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture")
8633		return
8634	}
8635	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8636	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
8637		lb, err = client.CreateOrUpdateResponder(lb.Response.Response)
8638		if err != nil {
8639			err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request")
8640		}
8641	}
8642	return
8643}
8644
8645// LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
8646type LoadBalancersDeleteFuture struct {
8647	azure.Future
8648}
8649
8650// Result returns the result of the asynchronous operation.
8651// If the operation has not completed it will return an error.
8652func (future *LoadBalancersDeleteFuture) Result(client LoadBalancersClient) (ar autorest.Response, err error) {
8653	var done bool
8654	done, err = future.Done(client)
8655	if err != nil {
8656		err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure")
8657		return
8658	}
8659	if !done {
8660		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture")
8661		return
8662	}
8663	ar.Response = future.Response()
8664	return
8665}
8666
8667// LoadBalancerSku SKU of a load balancer
8668type LoadBalancerSku struct {
8669	// Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard'
8670	Name LoadBalancerSkuName `json:"name,omitempty"`
8671}
8672
8673// LoadBalancersUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
8674// operation.
8675type LoadBalancersUpdateTagsFuture struct {
8676	azure.Future
8677}
8678
8679// Result returns the result of the asynchronous operation.
8680// If the operation has not completed it will return an error.
8681func (future *LoadBalancersUpdateTagsFuture) Result(client LoadBalancersClient) (lb LoadBalancer, err error) {
8682	var done bool
8683	done, err = future.Done(client)
8684	if err != nil {
8685		err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", future.Response(), "Polling failure")
8686		return
8687	}
8688	if !done {
8689		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersUpdateTagsFuture")
8690		return
8691	}
8692	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
8693	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
8694		lb, err = client.UpdateTagsResponder(lb.Response.Response)
8695		if err != nil {
8696			err = autorest.NewErrorWithError(err, "network.LoadBalancersUpdateTagsFuture", "Result", lb.Response.Response, "Failure responding to request")
8697		}
8698	}
8699	return
8700}
8701
8702// LoadBalancingRule a load balancing rule for a load balancer.
8703type LoadBalancingRule struct {
8704	autorest.Response `json:"-"`
8705	// LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule.
8706	*LoadBalancingRulePropertiesFormat `json:"properties,omitempty"`
8707	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
8708	Name *string `json:"name,omitempty"`
8709	// Etag - A unique read-only string that changes whenever the resource is updated.
8710	Etag *string `json:"etag,omitempty"`
8711	// ID - Resource ID.
8712	ID *string `json:"id,omitempty"`
8713}
8714
8715// MarshalJSON is the custom marshaler for LoadBalancingRule.
8716func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) {
8717	objectMap := make(map[string]interface{})
8718	if lbr.LoadBalancingRulePropertiesFormat != nil {
8719		objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat
8720	}
8721	if lbr.Name != nil {
8722		objectMap["name"] = lbr.Name
8723	}
8724	if lbr.Etag != nil {
8725		objectMap["etag"] = lbr.Etag
8726	}
8727	if lbr.ID != nil {
8728		objectMap["id"] = lbr.ID
8729	}
8730	return json.Marshal(objectMap)
8731}
8732
8733// UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct.
8734func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error {
8735	var m map[string]*json.RawMessage
8736	err := json.Unmarshal(body, &m)
8737	if err != nil {
8738		return err
8739	}
8740	for k, v := range m {
8741		switch k {
8742		case "properties":
8743			if v != nil {
8744				var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat
8745				err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat)
8746				if err != nil {
8747					return err
8748				}
8749				lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat
8750			}
8751		case "name":
8752			if v != nil {
8753				var name string
8754				err = json.Unmarshal(*v, &name)
8755				if err != nil {
8756					return err
8757				}
8758				lbr.Name = &name
8759			}
8760		case "etag":
8761			if v != nil {
8762				var etag string
8763				err = json.Unmarshal(*v, &etag)
8764				if err != nil {
8765					return err
8766				}
8767				lbr.Etag = &etag
8768			}
8769		case "id":
8770			if v != nil {
8771				var ID string
8772				err = json.Unmarshal(*v, &ID)
8773				if err != nil {
8774					return err
8775				}
8776				lbr.ID = &ID
8777			}
8778		}
8779	}
8780
8781	return nil
8782}
8783
8784// LoadBalancingRulePropertiesFormat properties of the load balancer.
8785type LoadBalancingRulePropertiesFormat struct {
8786	// FrontendIPConfiguration - A reference to frontend IP addresses.
8787	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
8788	// BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs.
8789	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
8790	// Probe - The reference of the load balancer probe used by the load balancing rule.
8791	Probe *SubResource `json:"probe,omitempty"`
8792	// Protocol - Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
8793	Protocol TransportProtocol `json:"protocol,omitempty"`
8794	// LoadDistribution - The load distribution policy for this rule. Possible values are 'Default', 'SourceIP', and 'SourceIPProtocol'. Possible values include: 'Default', 'SourceIP', 'SourceIPProtocol'
8795	LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"`
8796	// 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"
8797	FrontendPort *int32 `json:"frontendPort,omitempty"`
8798	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port"
8799	BackendPort *int32 `json:"backendPort,omitempty"`
8800	// 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.
8801	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
8802	// 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.
8803	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
8804	// DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule.
8805	DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"`
8806	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
8807	ProvisioningState *string `json:"provisioningState,omitempty"`
8808}
8809
8810// LocalNetworkGateway a common class for general resource information
8811type LocalNetworkGateway struct {
8812	autorest.Response `json:"-"`
8813	// LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway.
8814	*LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
8815	// Etag - A unique read-only string that changes whenever the resource is updated.
8816	Etag *string `json:"etag,omitempty"`
8817	// ID - Resource ID.
8818	ID *string `json:"id,omitempty"`
8819	// Name - Resource name.
8820	Name *string `json:"name,omitempty"`
8821	// Type - Resource type.
8822	Type *string `json:"type,omitempty"`
8823	// Location - Resource location.
8824	Location *string `json:"location,omitempty"`
8825	// Tags - Resource tags.
8826	Tags map[string]*string `json:"tags"`
8827}
8828
8829// MarshalJSON is the custom marshaler for LocalNetworkGateway.
8830func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) {
8831	objectMap := make(map[string]interface{})
8832	if lng.LocalNetworkGatewayPropertiesFormat != nil {
8833		objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat
8834	}
8835	if lng.Etag != nil {
8836		objectMap["etag"] = lng.Etag
8837	}
8838	if lng.ID != nil {
8839		objectMap["id"] = lng.ID
8840	}
8841	if lng.Name != nil {
8842		objectMap["name"] = lng.Name
8843	}
8844	if lng.Type != nil {
8845		objectMap["type"] = lng.Type
8846	}
8847	if lng.Location != nil {
8848		objectMap["location"] = lng.Location
8849	}
8850	if lng.Tags != nil {
8851		objectMap["tags"] = lng.Tags
8852	}
8853	return json.Marshal(objectMap)
8854}
8855
8856// UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct.
8857func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error {
8858	var m map[string]*json.RawMessage
8859	err := json.Unmarshal(body, &m)
8860	if err != nil {
8861		return err
8862	}
8863	for k, v := range m {
8864		switch k {
8865		case "properties":
8866			if v != nil {
8867				var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat
8868				err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat)
8869				if err != nil {
8870					return err
8871				}
8872				lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat
8873			}
8874		case "etag":
8875			if v != nil {
8876				var etag string
8877				err = json.Unmarshal(*v, &etag)
8878				if err != nil {
8879					return err
8880				}
8881				lng.Etag = &etag
8882			}
8883		case "id":
8884			if v != nil {
8885				var ID string
8886				err = json.Unmarshal(*v, &ID)
8887				if err != nil {
8888					return err
8889				}
8890				lng.ID = &ID
8891			}
8892		case "name":
8893			if v != nil {
8894				var name string
8895				err = json.Unmarshal(*v, &name)
8896				if err != nil {
8897					return err
8898				}
8899				lng.Name = &name
8900			}
8901		case "type":
8902			if v != nil {
8903				var typeVar string
8904				err = json.Unmarshal(*v, &typeVar)
8905				if err != nil {
8906					return err
8907				}
8908				lng.Type = &typeVar
8909			}
8910		case "location":
8911			if v != nil {
8912				var location string
8913				err = json.Unmarshal(*v, &location)
8914				if err != nil {
8915					return err
8916				}
8917				lng.Location = &location
8918			}
8919		case "tags":
8920			if v != nil {
8921				var tags map[string]*string
8922				err = json.Unmarshal(*v, &tags)
8923				if err != nil {
8924					return err
8925				}
8926				lng.Tags = tags
8927			}
8928		}
8929	}
8930
8931	return nil
8932}
8933
8934// LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call.
8935type LocalNetworkGatewayListResult struct {
8936	autorest.Response `json:"-"`
8937	// Value - A list of local network gateways that exists in a resource group.
8938	Value *[]LocalNetworkGateway `json:"value,omitempty"`
8939	// NextLink - The URL to get the next set of results.
8940	NextLink *string `json:"nextLink,omitempty"`
8941}
8942
8943// LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway values.
8944type LocalNetworkGatewayListResultIterator struct {
8945	i    int
8946	page LocalNetworkGatewayListResultPage
8947}
8948
8949// Next advances to the next value.  If there was an error making
8950// the request the iterator does not advance and the error is returned.
8951func (iter *LocalNetworkGatewayListResultIterator) Next() error {
8952	iter.i++
8953	if iter.i < len(iter.page.Values()) {
8954		return nil
8955	}
8956	err := iter.page.Next()
8957	if err != nil {
8958		iter.i--
8959		return err
8960	}
8961	iter.i = 0
8962	return nil
8963}
8964
8965// NotDone returns true if the enumeration should be started or is not yet complete.
8966func (iter LocalNetworkGatewayListResultIterator) NotDone() bool {
8967	return iter.page.NotDone() && iter.i < len(iter.page.Values())
8968}
8969
8970// Response returns the raw server response from the last page request.
8971func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult {
8972	return iter.page.Response()
8973}
8974
8975// Value returns the current value or a zero-initialized value if the
8976// iterator has advanced beyond the end of the collection.
8977func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway {
8978	if !iter.page.NotDone() {
8979		return LocalNetworkGateway{}
8980	}
8981	return iter.page.Values()[iter.i]
8982}
8983
8984// IsEmpty returns true if the ListResult contains no values.
8985func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool {
8986	return lnglr.Value == nil || len(*lnglr.Value) == 0
8987}
8988
8989// localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
8990// It returns nil if no more results exist.
8991func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer() (*http.Request, error) {
8992	if lnglr.NextLink == nil || len(to.String(lnglr.NextLink)) < 1 {
8993		return nil, nil
8994	}
8995	return autorest.Prepare(&http.Request{},
8996		autorest.AsJSON(),
8997		autorest.AsGet(),
8998		autorest.WithBaseURL(to.String(lnglr.NextLink)))
8999}
9000
9001// LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values.
9002type LocalNetworkGatewayListResultPage struct {
9003	fn    func(LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)
9004	lnglr LocalNetworkGatewayListResult
9005}
9006
9007// Next advances to the next page of values.  If there was an error making
9008// the request the page does not advance and the error is returned.
9009func (page *LocalNetworkGatewayListResultPage) Next() error {
9010	next, err := page.fn(page.lnglr)
9011	if err != nil {
9012		return err
9013	}
9014	page.lnglr = next
9015	return nil
9016}
9017
9018// NotDone returns true if the page enumeration should be started or is not yet complete.
9019func (page LocalNetworkGatewayListResultPage) NotDone() bool {
9020	return !page.lnglr.IsEmpty()
9021}
9022
9023// Response returns the raw server response from the last page request.
9024func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult {
9025	return page.lnglr
9026}
9027
9028// Values returns the slice of values for the current page or nil if there are no values.
9029func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway {
9030	if page.lnglr.IsEmpty() {
9031		return nil
9032	}
9033	return *page.lnglr.Value
9034}
9035
9036// LocalNetworkGatewayPropertiesFormat localNetworkGateway properties
9037type LocalNetworkGatewayPropertiesFormat struct {
9038	// LocalNetworkAddressSpace - Local network site address space.
9039	LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"`
9040	// GatewayIPAddress - IP address of local network gateway.
9041	GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"`
9042	// BgpSettings - Local network gateway's BGP speaker settings.
9043	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
9044	// ResourceGUID - The resource GUID property of the LocalNetworkGateway resource.
9045	ResourceGUID *string `json:"resourceGuid,omitempty"`
9046	// ProvisioningState - The provisioning state of the LocalNetworkGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
9047	ProvisioningState *string `json:"provisioningState,omitempty"`
9048}
9049
9050// LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
9051// long-running operation.
9052type LocalNetworkGatewaysCreateOrUpdateFuture struct {
9053	azure.Future
9054}
9055
9056// Result returns the result of the asynchronous operation.
9057// If the operation has not completed it will return an error.
9058func (future *LocalNetworkGatewaysCreateOrUpdateFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
9059	var done bool
9060	done, err = future.Done(client)
9061	if err != nil {
9062		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
9063		return
9064	}
9065	if !done {
9066		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture")
9067		return
9068	}
9069	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9070	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
9071		lng, err = client.CreateOrUpdateResponder(lng.Response.Response)
9072		if err != nil {
9073			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request")
9074		}
9075	}
9076	return
9077}
9078
9079// LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
9080// operation.
9081type LocalNetworkGatewaysDeleteFuture struct {
9082	azure.Future
9083}
9084
9085// Result returns the result of the asynchronous operation.
9086// If the operation has not completed it will return an error.
9087func (future *LocalNetworkGatewaysDeleteFuture) Result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) {
9088	var done bool
9089	done, err = future.Done(client)
9090	if err != nil {
9091		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
9092		return
9093	}
9094	if !done {
9095		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture")
9096		return
9097	}
9098	ar.Response = future.Response()
9099	return
9100}
9101
9102// LocalNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
9103// operation.
9104type LocalNetworkGatewaysUpdateTagsFuture struct {
9105	azure.Future
9106}
9107
9108// Result returns the result of the asynchronous operation.
9109// If the operation has not completed it will return an error.
9110func (future *LocalNetworkGatewaysUpdateTagsFuture) Result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
9111	var done bool
9112	done, err = future.Done(client)
9113	if err != nil {
9114		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
9115		return
9116	}
9117	if !done {
9118		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysUpdateTagsFuture")
9119		return
9120	}
9121	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9122	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
9123		lng, err = client.UpdateTagsResponder(lng.Response.Response)
9124		if err != nil {
9125			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysUpdateTagsFuture", "Result", lng.Response.Response, "Failure responding to request")
9126		}
9127	}
9128	return
9129}
9130
9131// LogSpecification description of logging specification.
9132type LogSpecification struct {
9133	// Name - The name of the specification.
9134	Name *string `json:"name,omitempty"`
9135	// DisplayName - The display name of the specification.
9136	DisplayName *string `json:"displayName,omitempty"`
9137	// BlobDuration - Duration of the blob.
9138	BlobDuration *string `json:"blobDuration,omitempty"`
9139}
9140
9141// MetricSpecification description of metrics specification.
9142type MetricSpecification struct {
9143	// Name - The name of the metric.
9144	Name *string `json:"name,omitempty"`
9145	// DisplayName - The display name of the metric.
9146	DisplayName *string `json:"displayName,omitempty"`
9147	// DisplayDescription - The description of the metric.
9148	DisplayDescription *string `json:"displayDescription,omitempty"`
9149	// Unit - Units the metric to be displayed in.
9150	Unit *string `json:"unit,omitempty"`
9151	// AggregationType - The aggregation type.
9152	AggregationType *string `json:"aggregationType,omitempty"`
9153	// Availabilities - List of availability.
9154	Availabilities *[]Availability `json:"availabilities,omitempty"`
9155	// EnableRegionalMdmAccount - Whether regional MDM account enabled.
9156	EnableRegionalMdmAccount *bool `json:"enableRegionalMdmAccount,omitempty"`
9157	// FillGapWithZero - Whether gaps would be filled with zeros.
9158	FillGapWithZero *bool `json:"fillGapWithZero,omitempty"`
9159	// MetricFilterPattern - Pattern for the filter of the metric.
9160	MetricFilterPattern *string `json:"metricFilterPattern,omitempty"`
9161	// Dimensions - List of dimensions.
9162	Dimensions *[]Dimension `json:"dimensions,omitempty"`
9163	// IsInternal - Whether the metric is internal.
9164	IsInternal *bool `json:"isInternal,omitempty"`
9165	// SourceMdmAccount - The source MDM account.
9166	SourceMdmAccount *string `json:"sourceMdmAccount,omitempty"`
9167	// SourceMdmNamespace - The source MDM namespace.
9168	SourceMdmNamespace *string `json:"sourceMdmNamespace,omitempty"`
9169	// ResourceIDDimensionNameOverride - The resource Id dimension name override.
9170	ResourceIDDimensionNameOverride *string `json:"resourceIdDimensionNameOverride,omitempty"`
9171}
9172
9173// NextHopParameters parameters that define the source and destination endpoint.
9174type NextHopParameters struct {
9175	// TargetResourceID - The resource identifier of the target resource against which the action is to be performed.
9176	TargetResourceID *string `json:"targetResourceId,omitempty"`
9177	// SourceIPAddress - The source IP address.
9178	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
9179	// DestinationIPAddress - The destination IP address.
9180	DestinationIPAddress *string `json:"destinationIPAddress,omitempty"`
9181	// 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).
9182	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
9183}
9184
9185// NextHopResult the information about next hop from the specified VM.
9186type NextHopResult struct {
9187	autorest.Response `json:"-"`
9188	// NextHopType - Next hop type. Possible values include: 'NextHopTypeInternet', 'NextHopTypeVirtualAppliance', 'NextHopTypeVirtualNetworkGateway', 'NextHopTypeVnetLocal', 'NextHopTypeHyperNetGateway', 'NextHopTypeNone'
9189	NextHopType NextHopType `json:"nextHopType,omitempty"`
9190	// NextHopIPAddress - Next hop IP Address
9191	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
9192	// 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'.
9193	RouteTableID *string `json:"routeTableId,omitempty"`
9194}
9195
9196// Operation network REST API operation definition.
9197type Operation struct {
9198	// Name - Operation name: {provider}/{resource}/{operation}
9199	Name *string `json:"name,omitempty"`
9200	// Display - Display metadata associated with the operation.
9201	Display *OperationDisplay `json:"display,omitempty"`
9202	// Origin - Origin of the operation.
9203	Origin *string `json:"origin,omitempty"`
9204	// OperationPropertiesFormat - Operation properties format.
9205	*OperationPropertiesFormat `json:"properties,omitempty"`
9206}
9207
9208// MarshalJSON is the custom marshaler for Operation.
9209func (o Operation) MarshalJSON() ([]byte, error) {
9210	objectMap := make(map[string]interface{})
9211	if o.Name != nil {
9212		objectMap["name"] = o.Name
9213	}
9214	if o.Display != nil {
9215		objectMap["display"] = o.Display
9216	}
9217	if o.Origin != nil {
9218		objectMap["origin"] = o.Origin
9219	}
9220	if o.OperationPropertiesFormat != nil {
9221		objectMap["properties"] = o.OperationPropertiesFormat
9222	}
9223	return json.Marshal(objectMap)
9224}
9225
9226// UnmarshalJSON is the custom unmarshaler for Operation struct.
9227func (o *Operation) UnmarshalJSON(body []byte) error {
9228	var m map[string]*json.RawMessage
9229	err := json.Unmarshal(body, &m)
9230	if err != nil {
9231		return err
9232	}
9233	for k, v := range m {
9234		switch k {
9235		case "name":
9236			if v != nil {
9237				var name string
9238				err = json.Unmarshal(*v, &name)
9239				if err != nil {
9240					return err
9241				}
9242				o.Name = &name
9243			}
9244		case "display":
9245			if v != nil {
9246				var display OperationDisplay
9247				err = json.Unmarshal(*v, &display)
9248				if err != nil {
9249					return err
9250				}
9251				o.Display = &display
9252			}
9253		case "origin":
9254			if v != nil {
9255				var origin string
9256				err = json.Unmarshal(*v, &origin)
9257				if err != nil {
9258					return err
9259				}
9260				o.Origin = &origin
9261			}
9262		case "properties":
9263			if v != nil {
9264				var operationPropertiesFormat OperationPropertiesFormat
9265				err = json.Unmarshal(*v, &operationPropertiesFormat)
9266				if err != nil {
9267					return err
9268				}
9269				o.OperationPropertiesFormat = &operationPropertiesFormat
9270			}
9271		}
9272	}
9273
9274	return nil
9275}
9276
9277// OperationDisplay display metadata associated with the operation.
9278type OperationDisplay struct {
9279	// Provider - Service provider: Microsoft Network.
9280	Provider *string `json:"provider,omitempty"`
9281	// Resource - Resource on which the operation is performed.
9282	Resource *string `json:"resource,omitempty"`
9283	// Operation - Type of the operation: get, read, delete, etc.
9284	Operation *string `json:"operation,omitempty"`
9285	// Description - Description of the operation.
9286	Description *string `json:"description,omitempty"`
9287}
9288
9289// OperationListResult result of the request to list Network operations. It contains a list of operations and a URL
9290// link to get the next set of results.
9291type OperationListResult struct {
9292	autorest.Response `json:"-"`
9293	// Value - List of Network operations supported by the Network resource provider.
9294	Value *[]Operation `json:"value,omitempty"`
9295	// NextLink - URL to get the next set of operation list results if there are any.
9296	NextLink *string `json:"nextLink,omitempty"`
9297}
9298
9299// OperationListResultIterator provides access to a complete listing of Operation values.
9300type OperationListResultIterator struct {
9301	i    int
9302	page OperationListResultPage
9303}
9304
9305// Next advances to the next value.  If there was an error making
9306// the request the iterator does not advance and the error is returned.
9307func (iter *OperationListResultIterator) Next() error {
9308	iter.i++
9309	if iter.i < len(iter.page.Values()) {
9310		return nil
9311	}
9312	err := iter.page.Next()
9313	if err != nil {
9314		iter.i--
9315		return err
9316	}
9317	iter.i = 0
9318	return nil
9319}
9320
9321// NotDone returns true if the enumeration should be started or is not yet complete.
9322func (iter OperationListResultIterator) NotDone() bool {
9323	return iter.page.NotDone() && iter.i < len(iter.page.Values())
9324}
9325
9326// Response returns the raw server response from the last page request.
9327func (iter OperationListResultIterator) Response() OperationListResult {
9328	return iter.page.Response()
9329}
9330
9331// Value returns the current value or a zero-initialized value if the
9332// iterator has advanced beyond the end of the collection.
9333func (iter OperationListResultIterator) Value() Operation {
9334	if !iter.page.NotDone() {
9335		return Operation{}
9336	}
9337	return iter.page.Values()[iter.i]
9338}
9339
9340// IsEmpty returns true if the ListResult contains no values.
9341func (olr OperationListResult) IsEmpty() bool {
9342	return olr.Value == nil || len(*olr.Value) == 0
9343}
9344
9345// operationListResultPreparer prepares a request to retrieve the next set of results.
9346// It returns nil if no more results exist.
9347func (olr OperationListResult) operationListResultPreparer() (*http.Request, error) {
9348	if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 {
9349		return nil, nil
9350	}
9351	return autorest.Prepare(&http.Request{},
9352		autorest.AsJSON(),
9353		autorest.AsGet(),
9354		autorest.WithBaseURL(to.String(olr.NextLink)))
9355}
9356
9357// OperationListResultPage contains a page of Operation values.
9358type OperationListResultPage struct {
9359	fn  func(OperationListResult) (OperationListResult, error)
9360	olr OperationListResult
9361}
9362
9363// Next advances to the next page of values.  If there was an error making
9364// the request the page does not advance and the error is returned.
9365func (page *OperationListResultPage) Next() error {
9366	next, err := page.fn(page.olr)
9367	if err != nil {
9368		return err
9369	}
9370	page.olr = next
9371	return nil
9372}
9373
9374// NotDone returns true if the page enumeration should be started or is not yet complete.
9375func (page OperationListResultPage) NotDone() bool {
9376	return !page.olr.IsEmpty()
9377}
9378
9379// Response returns the raw server response from the last page request.
9380func (page OperationListResultPage) Response() OperationListResult {
9381	return page.olr
9382}
9383
9384// Values returns the slice of values for the current page or nil if there are no values.
9385func (page OperationListResultPage) Values() []Operation {
9386	if page.olr.IsEmpty() {
9387		return nil
9388	}
9389	return *page.olr.Value
9390}
9391
9392// OperationPropertiesFormat description of operation properties format.
9393type OperationPropertiesFormat struct {
9394	// ServiceSpecification - Specification of the service.
9395	ServiceSpecification *OperationPropertiesFormatServiceSpecification `json:"serviceSpecification,omitempty"`
9396}
9397
9398// OperationPropertiesFormatServiceSpecification specification of the service.
9399type OperationPropertiesFormatServiceSpecification struct {
9400	// MetricSpecifications - Operation service specification.
9401	MetricSpecifications *[]MetricSpecification `json:"metricSpecifications,omitempty"`
9402	// LogSpecifications - Operation log specification.
9403	LogSpecifications *[]LogSpecification `json:"logSpecifications,omitempty"`
9404}
9405
9406// OutboundNatRule outbound NAT pool of the load balancer.
9407type OutboundNatRule struct {
9408	// OutboundNatRulePropertiesFormat - Properties of load balancer outbound nat rule.
9409	*OutboundNatRulePropertiesFormat `json:"properties,omitempty"`
9410	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
9411	Name *string `json:"name,omitempty"`
9412	// Etag - A unique read-only string that changes whenever the resource is updated.
9413	Etag *string `json:"etag,omitempty"`
9414	// ID - Resource ID.
9415	ID *string `json:"id,omitempty"`
9416}
9417
9418// MarshalJSON is the custom marshaler for OutboundNatRule.
9419func (onr OutboundNatRule) MarshalJSON() ([]byte, error) {
9420	objectMap := make(map[string]interface{})
9421	if onr.OutboundNatRulePropertiesFormat != nil {
9422		objectMap["properties"] = onr.OutboundNatRulePropertiesFormat
9423	}
9424	if onr.Name != nil {
9425		objectMap["name"] = onr.Name
9426	}
9427	if onr.Etag != nil {
9428		objectMap["etag"] = onr.Etag
9429	}
9430	if onr.ID != nil {
9431		objectMap["id"] = onr.ID
9432	}
9433	return json.Marshal(objectMap)
9434}
9435
9436// UnmarshalJSON is the custom unmarshaler for OutboundNatRule struct.
9437func (onr *OutboundNatRule) UnmarshalJSON(body []byte) error {
9438	var m map[string]*json.RawMessage
9439	err := json.Unmarshal(body, &m)
9440	if err != nil {
9441		return err
9442	}
9443	for k, v := range m {
9444		switch k {
9445		case "properties":
9446			if v != nil {
9447				var outboundNatRulePropertiesFormat OutboundNatRulePropertiesFormat
9448				err = json.Unmarshal(*v, &outboundNatRulePropertiesFormat)
9449				if err != nil {
9450					return err
9451				}
9452				onr.OutboundNatRulePropertiesFormat = &outboundNatRulePropertiesFormat
9453			}
9454		case "name":
9455			if v != nil {
9456				var name string
9457				err = json.Unmarshal(*v, &name)
9458				if err != nil {
9459					return err
9460				}
9461				onr.Name = &name
9462			}
9463		case "etag":
9464			if v != nil {
9465				var etag string
9466				err = json.Unmarshal(*v, &etag)
9467				if err != nil {
9468					return err
9469				}
9470				onr.Etag = &etag
9471			}
9472		case "id":
9473			if v != nil {
9474				var ID string
9475				err = json.Unmarshal(*v, &ID)
9476				if err != nil {
9477					return err
9478				}
9479				onr.ID = &ID
9480			}
9481		}
9482	}
9483
9484	return nil
9485}
9486
9487// OutboundNatRulePropertiesFormat outbound NAT pool of the load balancer.
9488type OutboundNatRulePropertiesFormat struct {
9489	// AllocatedOutboundPorts - The number of outbound ports to be used for NAT.
9490	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
9491	// FrontendIPConfigurations - The Frontend IP addresses of the load balancer.
9492	FrontendIPConfigurations *[]SubResource `json:"frontendIPConfigurations,omitempty"`
9493	// BackendAddressPool - A reference to a pool of DIPs. Outbound traffic is randomly load balanced across IPs in the backend IPs.
9494	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
9495	// ProvisioningState - Gets the provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
9496	ProvisioningState *string `json:"provisioningState,omitempty"`
9497}
9498
9499// PacketCapture parameters that define the create packet capture operation.
9500type PacketCapture struct {
9501	// Name - Name of the packet capture.
9502	Name *string `json:"name,omitempty"`
9503	// ID - ID of the packet capture.
9504	ID *string `json:"id,omitempty"`
9505	// Type - Packet capture type.
9506	Type                     *string `json:"type,omitempty"`
9507	*PacketCaptureParameters `json:"properties,omitempty"`
9508}
9509
9510// MarshalJSON is the custom marshaler for PacketCapture.
9511func (pc PacketCapture) MarshalJSON() ([]byte, error) {
9512	objectMap := make(map[string]interface{})
9513	if pc.Name != nil {
9514		objectMap["name"] = pc.Name
9515	}
9516	if pc.ID != nil {
9517		objectMap["id"] = pc.ID
9518	}
9519	if pc.Type != nil {
9520		objectMap["type"] = pc.Type
9521	}
9522	if pc.PacketCaptureParameters != nil {
9523		objectMap["properties"] = pc.PacketCaptureParameters
9524	}
9525	return json.Marshal(objectMap)
9526}
9527
9528// UnmarshalJSON is the custom unmarshaler for PacketCapture struct.
9529func (pc *PacketCapture) UnmarshalJSON(body []byte) error {
9530	var m map[string]*json.RawMessage
9531	err := json.Unmarshal(body, &m)
9532	if err != nil {
9533		return err
9534	}
9535	for k, v := range m {
9536		switch k {
9537		case "name":
9538			if v != nil {
9539				var name string
9540				err = json.Unmarshal(*v, &name)
9541				if err != nil {
9542					return err
9543				}
9544				pc.Name = &name
9545			}
9546		case "id":
9547			if v != nil {
9548				var ID string
9549				err = json.Unmarshal(*v, &ID)
9550				if err != nil {
9551					return err
9552				}
9553				pc.ID = &ID
9554			}
9555		case "type":
9556			if v != nil {
9557				var typeVar string
9558				err = json.Unmarshal(*v, &typeVar)
9559				if err != nil {
9560					return err
9561				}
9562				pc.Type = &typeVar
9563			}
9564		case "properties":
9565			if v != nil {
9566				var packetCaptureParameters PacketCaptureParameters
9567				err = json.Unmarshal(*v, &packetCaptureParameters)
9568				if err != nil {
9569					return err
9570				}
9571				pc.PacketCaptureParameters = &packetCaptureParameters
9572			}
9573		}
9574	}
9575
9576	return nil
9577}
9578
9579// PacketCaptureFilter filter that is applied to packet capture request. Multiple filters can be applied.
9580type PacketCaptureFilter struct {
9581	// Protocol - Protocol to be filtered on. Possible values include: 'PcProtocolTCP', 'PcProtocolUDP', 'PcProtocolAny'
9582	Protocol PcProtocol `json:"protocol,omitempty"`
9583	// 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.
9584	LocalIPAddress *string `json:"localIPAddress,omitempty"`
9585	// 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.
9586	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
9587	// 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.
9588	LocalPort *string `json:"localPort,omitempty"`
9589	// 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.
9590	RemotePort *string `json:"remotePort,omitempty"`
9591}
9592
9593// PacketCaptureListResult list of packet capture sessions.
9594type PacketCaptureListResult struct {
9595	autorest.Response `json:"-"`
9596	// Value - Information about packet capture sessions.
9597	Value *[]PacketCaptureResult `json:"value,omitempty"`
9598}
9599
9600// PacketCaptureParameters parameters that define the create packet capture operation.
9601type PacketCaptureParameters struct {
9602	// Target - The ID of the targeted resource, only VM is currently supported.
9603	Target *string `json:"target,omitempty"`
9604	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
9605	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
9606	// TotalBytesPerSession - Maximum size of the capture output.
9607	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
9608	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
9609	TimeLimitInSeconds *int32                        `json:"timeLimitInSeconds,omitempty"`
9610	StorageLocation    *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
9611	Filters            *[]PacketCaptureFilter        `json:"filters,omitempty"`
9612}
9613
9614// PacketCaptureQueryStatusResult status of packet capture session.
9615type PacketCaptureQueryStatusResult struct {
9616	autorest.Response `json:"-"`
9617	// Name - The name of the packet capture resource.
9618	Name *string `json:"name,omitempty"`
9619	// ID - The ID of the packet capture resource.
9620	ID *string `json:"id,omitempty"`
9621	// CaptureStartTime - The start time of the packet capture session.
9622	CaptureStartTime *date.Time `json:"captureStartTime,omitempty"`
9623	// PacketCaptureStatus - The status of the packet capture session. Possible values include: 'PcStatusNotStarted', 'PcStatusRunning', 'PcStatusStopped', 'PcStatusError', 'PcStatusUnknown'
9624	PacketCaptureStatus PcStatus `json:"packetCaptureStatus,omitempty"`
9625	// StopReason - The reason the current packet capture session was stopped.
9626	StopReason *string `json:"stopReason,omitempty"`
9627	// PacketCaptureError - List of errors of packet capture session.
9628	PacketCaptureError *[]PcError `json:"packetCaptureError,omitempty"`
9629}
9630
9631// PacketCaptureResult information about packet capture session.
9632type PacketCaptureResult struct {
9633	autorest.Response `json:"-"`
9634	// Name - Name of the packet capture.
9635	Name *string `json:"name,omitempty"`
9636	// ID - ID of the packet capture.
9637	ID *string `json:"id,omitempty"`
9638	// Type - Packet capture type.
9639	Type                           *string `json:"type,omitempty"`
9640	Etag                           *string `json:"etag,omitempty"`
9641	*PacketCaptureResultProperties `json:"properties,omitempty"`
9642}
9643
9644// MarshalJSON is the custom marshaler for PacketCaptureResult.
9645func (pcr PacketCaptureResult) MarshalJSON() ([]byte, error) {
9646	objectMap := make(map[string]interface{})
9647	if pcr.Name != nil {
9648		objectMap["name"] = pcr.Name
9649	}
9650	if pcr.ID != nil {
9651		objectMap["id"] = pcr.ID
9652	}
9653	if pcr.Type != nil {
9654		objectMap["type"] = pcr.Type
9655	}
9656	if pcr.Etag != nil {
9657		objectMap["etag"] = pcr.Etag
9658	}
9659	if pcr.PacketCaptureResultProperties != nil {
9660		objectMap["properties"] = pcr.PacketCaptureResultProperties
9661	}
9662	return json.Marshal(objectMap)
9663}
9664
9665// UnmarshalJSON is the custom unmarshaler for PacketCaptureResult struct.
9666func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error {
9667	var m map[string]*json.RawMessage
9668	err := json.Unmarshal(body, &m)
9669	if err != nil {
9670		return err
9671	}
9672	for k, v := range m {
9673		switch k {
9674		case "name":
9675			if v != nil {
9676				var name string
9677				err = json.Unmarshal(*v, &name)
9678				if err != nil {
9679					return err
9680				}
9681				pcr.Name = &name
9682			}
9683		case "id":
9684			if v != nil {
9685				var ID string
9686				err = json.Unmarshal(*v, &ID)
9687				if err != nil {
9688					return err
9689				}
9690				pcr.ID = &ID
9691			}
9692		case "type":
9693			if v != nil {
9694				var typeVar string
9695				err = json.Unmarshal(*v, &typeVar)
9696				if err != nil {
9697					return err
9698				}
9699				pcr.Type = &typeVar
9700			}
9701		case "etag":
9702			if v != nil {
9703				var etag string
9704				err = json.Unmarshal(*v, &etag)
9705				if err != nil {
9706					return err
9707				}
9708				pcr.Etag = &etag
9709			}
9710		case "properties":
9711			if v != nil {
9712				var packetCaptureResultProperties PacketCaptureResultProperties
9713				err = json.Unmarshal(*v, &packetCaptureResultProperties)
9714				if err != nil {
9715					return err
9716				}
9717				pcr.PacketCaptureResultProperties = &packetCaptureResultProperties
9718			}
9719		}
9720	}
9721
9722	return nil
9723}
9724
9725// PacketCaptureResultProperties describes the properties of a packet capture session.
9726type PacketCaptureResultProperties struct {
9727	// ProvisioningState - The provisioning state of the packet capture session. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
9728	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
9729	// Target - The ID of the targeted resource, only VM is currently supported.
9730	Target *string `json:"target,omitempty"`
9731	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
9732	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
9733	// TotalBytesPerSession - Maximum size of the capture output.
9734	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
9735	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
9736	TimeLimitInSeconds *int32                        `json:"timeLimitInSeconds,omitempty"`
9737	StorageLocation    *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
9738	Filters            *[]PacketCaptureFilter        `json:"filters,omitempty"`
9739}
9740
9741// PacketCapturesCreateFuture an abstraction for monitoring and retrieving the results of a long-running operation.
9742type PacketCapturesCreateFuture struct {
9743	azure.Future
9744}
9745
9746// Result returns the result of the asynchronous operation.
9747// If the operation has not completed it will return an error.
9748func (future *PacketCapturesCreateFuture) Result(client PacketCapturesClient) (pcr PacketCaptureResult, err error) {
9749	var done bool
9750	done, err = future.Done(client)
9751	if err != nil {
9752		err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", future.Response(), "Polling failure")
9753		return
9754	}
9755	if !done {
9756		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesCreateFuture")
9757		return
9758	}
9759	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9760	if pcr.Response.Response, err = future.GetResult(sender); err == nil && pcr.Response.Response.StatusCode != http.StatusNoContent {
9761		pcr, err = client.CreateResponder(pcr.Response.Response)
9762		if err != nil {
9763			err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", pcr.Response.Response, "Failure responding to request")
9764		}
9765	}
9766	return
9767}
9768
9769// PacketCapturesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
9770type PacketCapturesDeleteFuture struct {
9771	azure.Future
9772}
9773
9774// Result returns the result of the asynchronous operation.
9775// If the operation has not completed it will return an error.
9776func (future *PacketCapturesDeleteFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
9777	var done bool
9778	done, err = future.Done(client)
9779	if err != nil {
9780		err = autorest.NewErrorWithError(err, "network.PacketCapturesDeleteFuture", "Result", future.Response(), "Polling failure")
9781		return
9782	}
9783	if !done {
9784		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesDeleteFuture")
9785		return
9786	}
9787	ar.Response = future.Response()
9788	return
9789}
9790
9791// PacketCapturesGetStatusFuture an abstraction for monitoring and retrieving the results of a long-running
9792// operation.
9793type PacketCapturesGetStatusFuture struct {
9794	azure.Future
9795}
9796
9797// Result returns the result of the asynchronous operation.
9798// If the operation has not completed it will return an error.
9799func (future *PacketCapturesGetStatusFuture) Result(client PacketCapturesClient) (pcqsr PacketCaptureQueryStatusResult, err error) {
9800	var done bool
9801	done, err = future.Done(client)
9802	if err != nil {
9803		err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", future.Response(), "Polling failure")
9804		return
9805	}
9806	if !done {
9807		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesGetStatusFuture")
9808		return
9809	}
9810	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
9811	if pcqsr.Response.Response, err = future.GetResult(sender); err == nil && pcqsr.Response.Response.StatusCode != http.StatusNoContent {
9812		pcqsr, err = client.GetStatusResponder(pcqsr.Response.Response)
9813		if err != nil {
9814			err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", pcqsr.Response.Response, "Failure responding to request")
9815		}
9816	}
9817	return
9818}
9819
9820// PacketCapturesStopFuture an abstraction for monitoring and retrieving the results of a long-running operation.
9821type PacketCapturesStopFuture struct {
9822	azure.Future
9823}
9824
9825// Result returns the result of the asynchronous operation.
9826// If the operation has not completed it will return an error.
9827func (future *PacketCapturesStopFuture) Result(client PacketCapturesClient) (ar autorest.Response, err error) {
9828	var done bool
9829	done, err = future.Done(client)
9830	if err != nil {
9831		err = autorest.NewErrorWithError(err, "network.PacketCapturesStopFuture", "Result", future.Response(), "Polling failure")
9832		return
9833	}
9834	if !done {
9835		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesStopFuture")
9836		return
9837	}
9838	ar.Response = future.Response()
9839	return
9840}
9841
9842// PacketCaptureStorageLocation describes the storage location for a packet capture session.
9843type PacketCaptureStorageLocation struct {
9844	// StorageID - The ID of the storage account to save the packet capture session. Required if no local file path is provided.
9845	StorageID *string `json:"storageId,omitempty"`
9846	// 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.
9847	StoragePath *string `json:"storagePath,omitempty"`
9848	// 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.
9849	FilePath *string `json:"filePath,omitempty"`
9850}
9851
9852// PatchRouteFilter route Filter Resource.
9853type PatchRouteFilter struct {
9854	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
9855	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
9856	Name *string `json:"name,omitempty"`
9857	// Etag - A unique read-only string that changes whenever the resource is updated.
9858	Etag *string `json:"etag,omitempty"`
9859	// Type - Resource type.
9860	Type *string `json:"type,omitempty"`
9861	// Tags - Resource tags.
9862	Tags map[string]*string `json:"tags"`
9863	// ID - Resource ID.
9864	ID *string `json:"id,omitempty"`
9865}
9866
9867// MarshalJSON is the custom marshaler for PatchRouteFilter.
9868func (prf PatchRouteFilter) MarshalJSON() ([]byte, error) {
9869	objectMap := make(map[string]interface{})
9870	if prf.RouteFilterPropertiesFormat != nil {
9871		objectMap["properties"] = prf.RouteFilterPropertiesFormat
9872	}
9873	if prf.Name != nil {
9874		objectMap["name"] = prf.Name
9875	}
9876	if prf.Etag != nil {
9877		objectMap["etag"] = prf.Etag
9878	}
9879	if prf.Type != nil {
9880		objectMap["type"] = prf.Type
9881	}
9882	if prf.Tags != nil {
9883		objectMap["tags"] = prf.Tags
9884	}
9885	if prf.ID != nil {
9886		objectMap["id"] = prf.ID
9887	}
9888	return json.Marshal(objectMap)
9889}
9890
9891// UnmarshalJSON is the custom unmarshaler for PatchRouteFilter struct.
9892func (prf *PatchRouteFilter) UnmarshalJSON(body []byte) error {
9893	var m map[string]*json.RawMessage
9894	err := json.Unmarshal(body, &m)
9895	if err != nil {
9896		return err
9897	}
9898	for k, v := range m {
9899		switch k {
9900		case "properties":
9901			if v != nil {
9902				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
9903				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
9904				if err != nil {
9905					return err
9906				}
9907				prf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
9908			}
9909		case "name":
9910			if v != nil {
9911				var name string
9912				err = json.Unmarshal(*v, &name)
9913				if err != nil {
9914					return err
9915				}
9916				prf.Name = &name
9917			}
9918		case "etag":
9919			if v != nil {
9920				var etag string
9921				err = json.Unmarshal(*v, &etag)
9922				if err != nil {
9923					return err
9924				}
9925				prf.Etag = &etag
9926			}
9927		case "type":
9928			if v != nil {
9929				var typeVar string
9930				err = json.Unmarshal(*v, &typeVar)
9931				if err != nil {
9932					return err
9933				}
9934				prf.Type = &typeVar
9935			}
9936		case "tags":
9937			if v != nil {
9938				var tags map[string]*string
9939				err = json.Unmarshal(*v, &tags)
9940				if err != nil {
9941					return err
9942				}
9943				prf.Tags = tags
9944			}
9945		case "id":
9946			if v != nil {
9947				var ID string
9948				err = json.Unmarshal(*v, &ID)
9949				if err != nil {
9950					return err
9951				}
9952				prf.ID = &ID
9953			}
9954		}
9955	}
9956
9957	return nil
9958}
9959
9960// PatchRouteFilterRule route Filter Rule Resource
9961type PatchRouteFilterRule struct {
9962	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
9963	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
9964	Name *string `json:"name,omitempty"`
9965	// Etag - A unique read-only string that changes whenever the resource is updated.
9966	Etag *string `json:"etag,omitempty"`
9967	// ID - Resource ID.
9968	ID *string `json:"id,omitempty"`
9969}
9970
9971// MarshalJSON is the custom marshaler for PatchRouteFilterRule.
9972func (prfr PatchRouteFilterRule) MarshalJSON() ([]byte, error) {
9973	objectMap := make(map[string]interface{})
9974	if prfr.RouteFilterRulePropertiesFormat != nil {
9975		objectMap["properties"] = prfr.RouteFilterRulePropertiesFormat
9976	}
9977	if prfr.Name != nil {
9978		objectMap["name"] = prfr.Name
9979	}
9980	if prfr.Etag != nil {
9981		objectMap["etag"] = prfr.Etag
9982	}
9983	if prfr.ID != nil {
9984		objectMap["id"] = prfr.ID
9985	}
9986	return json.Marshal(objectMap)
9987}
9988
9989// UnmarshalJSON is the custom unmarshaler for PatchRouteFilterRule struct.
9990func (prfr *PatchRouteFilterRule) UnmarshalJSON(body []byte) error {
9991	var m map[string]*json.RawMessage
9992	err := json.Unmarshal(body, &m)
9993	if err != nil {
9994		return err
9995	}
9996	for k, v := range m {
9997		switch k {
9998		case "properties":
9999			if v != nil {
10000				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
10001				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
10002				if err != nil {
10003					return err
10004				}
10005				prfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
10006			}
10007		case "name":
10008			if v != nil {
10009				var name string
10010				err = json.Unmarshal(*v, &name)
10011				if err != nil {
10012					return err
10013				}
10014				prfr.Name = &name
10015			}
10016		case "etag":
10017			if v != nil {
10018				var etag string
10019				err = json.Unmarshal(*v, &etag)
10020				if err != nil {
10021					return err
10022				}
10023				prfr.Etag = &etag
10024			}
10025		case "id":
10026			if v != nil {
10027				var ID string
10028				err = json.Unmarshal(*v, &ID)
10029				if err != nil {
10030					return err
10031				}
10032				prfr.ID = &ID
10033			}
10034		}
10035	}
10036
10037	return nil
10038}
10039
10040// Probe a load balancer probe.
10041type Probe struct {
10042	autorest.Response `json:"-"`
10043	// ProbePropertiesFormat - Properties of load balancer probe.
10044	*ProbePropertiesFormat `json:"properties,omitempty"`
10045	// Name - Gets name of the resource that is unique within a resource group. This name can be used to access the resource.
10046	Name *string `json:"name,omitempty"`
10047	// Etag - A unique read-only string that changes whenever the resource is updated.
10048	Etag *string `json:"etag,omitempty"`
10049	// ID - Resource ID.
10050	ID *string `json:"id,omitempty"`
10051}
10052
10053// MarshalJSON is the custom marshaler for Probe.
10054func (p Probe) MarshalJSON() ([]byte, error) {
10055	objectMap := make(map[string]interface{})
10056	if p.ProbePropertiesFormat != nil {
10057		objectMap["properties"] = p.ProbePropertiesFormat
10058	}
10059	if p.Name != nil {
10060		objectMap["name"] = p.Name
10061	}
10062	if p.Etag != nil {
10063		objectMap["etag"] = p.Etag
10064	}
10065	if p.ID != nil {
10066		objectMap["id"] = p.ID
10067	}
10068	return json.Marshal(objectMap)
10069}
10070
10071// UnmarshalJSON is the custom unmarshaler for Probe struct.
10072func (p *Probe) UnmarshalJSON(body []byte) error {
10073	var m map[string]*json.RawMessage
10074	err := json.Unmarshal(body, &m)
10075	if err != nil {
10076		return err
10077	}
10078	for k, v := range m {
10079		switch k {
10080		case "properties":
10081			if v != nil {
10082				var probePropertiesFormat ProbePropertiesFormat
10083				err = json.Unmarshal(*v, &probePropertiesFormat)
10084				if err != nil {
10085					return err
10086				}
10087				p.ProbePropertiesFormat = &probePropertiesFormat
10088			}
10089		case "name":
10090			if v != nil {
10091				var name string
10092				err = json.Unmarshal(*v, &name)
10093				if err != nil {
10094					return err
10095				}
10096				p.Name = &name
10097			}
10098		case "etag":
10099			if v != nil {
10100				var etag string
10101				err = json.Unmarshal(*v, &etag)
10102				if err != nil {
10103					return err
10104				}
10105				p.Etag = &etag
10106			}
10107		case "id":
10108			if v != nil {
10109				var ID string
10110				err = json.Unmarshal(*v, &ID)
10111				if err != nil {
10112					return err
10113				}
10114				p.ID = &ID
10115			}
10116		}
10117	}
10118
10119	return nil
10120}
10121
10122// ProbePropertiesFormat load balancer probe resource.
10123type ProbePropertiesFormat struct {
10124	// LoadBalancingRules - The load balancer rules that use this probe.
10125	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
10126	// Protocol - The protocol of the end point. Possible values are: 'Http' or 'Tcp'. If 'Tcp' is specified, a received ACK is required for the probe to be successful. If 'Http' is specified, a 200 OK response from the specifies URI is required for the probe to be successful. Possible values include: 'ProbeProtocolHTTP', 'ProbeProtocolTCP'
10127	Protocol ProbeProtocol `json:"protocol,omitempty"`
10128	// Port - The port for communicating the probe. Possible values range from 1 to 65535, inclusive.
10129	Port *int32 `json:"port,omitempty"`
10130	// 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.
10131	IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"`
10132	// 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.
10133	NumberOfProbes *int32 `json:"numberOfProbes,omitempty"`
10134	// 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.
10135	RequestPath *string `json:"requestPath,omitempty"`
10136	// ProvisioningState - Gets the provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
10137	ProvisioningState *string `json:"provisioningState,omitempty"`
10138}
10139
10140// PublicIPAddress public IP address resource.
10141type PublicIPAddress struct {
10142	autorest.Response `json:"-"`
10143	// Sku - The public IP address SKU.
10144	Sku *PublicIPAddressSku `json:"sku,omitempty"`
10145	// PublicIPAddressPropertiesFormat - Public IP address properties.
10146	*PublicIPAddressPropertiesFormat `json:"properties,omitempty"`
10147	// Etag - A unique read-only string that changes whenever the resource is updated.
10148	Etag *string `json:"etag,omitempty"`
10149	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
10150	Zones *[]string `json:"zones,omitempty"`
10151	// ID - Resource ID.
10152	ID *string `json:"id,omitempty"`
10153	// Name - Resource name.
10154	Name *string `json:"name,omitempty"`
10155	// Type - Resource type.
10156	Type *string `json:"type,omitempty"`
10157	// Location - Resource location.
10158	Location *string `json:"location,omitempty"`
10159	// Tags - Resource tags.
10160	Tags map[string]*string `json:"tags"`
10161}
10162
10163// MarshalJSON is the custom marshaler for PublicIPAddress.
10164func (pia PublicIPAddress) MarshalJSON() ([]byte, error) {
10165	objectMap := make(map[string]interface{})
10166	if pia.Sku != nil {
10167		objectMap["sku"] = pia.Sku
10168	}
10169	if pia.PublicIPAddressPropertiesFormat != nil {
10170		objectMap["properties"] = pia.PublicIPAddressPropertiesFormat
10171	}
10172	if pia.Etag != nil {
10173		objectMap["etag"] = pia.Etag
10174	}
10175	if pia.Zones != nil {
10176		objectMap["zones"] = pia.Zones
10177	}
10178	if pia.ID != nil {
10179		objectMap["id"] = pia.ID
10180	}
10181	if pia.Name != nil {
10182		objectMap["name"] = pia.Name
10183	}
10184	if pia.Type != nil {
10185		objectMap["type"] = pia.Type
10186	}
10187	if pia.Location != nil {
10188		objectMap["location"] = pia.Location
10189	}
10190	if pia.Tags != nil {
10191		objectMap["tags"] = pia.Tags
10192	}
10193	return json.Marshal(objectMap)
10194}
10195
10196// UnmarshalJSON is the custom unmarshaler for PublicIPAddress struct.
10197func (pia *PublicIPAddress) UnmarshalJSON(body []byte) error {
10198	var m map[string]*json.RawMessage
10199	err := json.Unmarshal(body, &m)
10200	if err != nil {
10201		return err
10202	}
10203	for k, v := range m {
10204		switch k {
10205		case "sku":
10206			if v != nil {
10207				var sku PublicIPAddressSku
10208				err = json.Unmarshal(*v, &sku)
10209				if err != nil {
10210					return err
10211				}
10212				pia.Sku = &sku
10213			}
10214		case "properties":
10215			if v != nil {
10216				var publicIPAddressPropertiesFormat PublicIPAddressPropertiesFormat
10217				err = json.Unmarshal(*v, &publicIPAddressPropertiesFormat)
10218				if err != nil {
10219					return err
10220				}
10221				pia.PublicIPAddressPropertiesFormat = &publicIPAddressPropertiesFormat
10222			}
10223		case "etag":
10224			if v != nil {
10225				var etag string
10226				err = json.Unmarshal(*v, &etag)
10227				if err != nil {
10228					return err
10229				}
10230				pia.Etag = &etag
10231			}
10232		case "zones":
10233			if v != nil {
10234				var zones []string
10235				err = json.Unmarshal(*v, &zones)
10236				if err != nil {
10237					return err
10238				}
10239				pia.Zones = &zones
10240			}
10241		case "id":
10242			if v != nil {
10243				var ID string
10244				err = json.Unmarshal(*v, &ID)
10245				if err != nil {
10246					return err
10247				}
10248				pia.ID = &ID
10249			}
10250		case "name":
10251			if v != nil {
10252				var name string
10253				err = json.Unmarshal(*v, &name)
10254				if err != nil {
10255					return err
10256				}
10257				pia.Name = &name
10258			}
10259		case "type":
10260			if v != nil {
10261				var typeVar string
10262				err = json.Unmarshal(*v, &typeVar)
10263				if err != nil {
10264					return err
10265				}
10266				pia.Type = &typeVar
10267			}
10268		case "location":
10269			if v != nil {
10270				var location string
10271				err = json.Unmarshal(*v, &location)
10272				if err != nil {
10273					return err
10274				}
10275				pia.Location = &location
10276			}
10277		case "tags":
10278			if v != nil {
10279				var tags map[string]*string
10280				err = json.Unmarshal(*v, &tags)
10281				if err != nil {
10282					return err
10283				}
10284				pia.Tags = tags
10285			}
10286		}
10287	}
10288
10289	return nil
10290}
10291
10292// PublicIPAddressDNSSettings contains FQDN of the DNS record associated with the public IP address
10293type PublicIPAddressDNSSettings struct {
10294	// 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.
10295	DomainNameLabel *string `json:"domainNameLabel,omitempty"`
10296	// 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.
10297	Fqdn *string `json:"fqdn,omitempty"`
10298	// 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.
10299	ReverseFqdn *string `json:"reverseFqdn,omitempty"`
10300}
10301
10302// PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
10303// operation.
10304type PublicIPAddressesCreateOrUpdateFuture struct {
10305	azure.Future
10306}
10307
10308// Result returns the result of the asynchronous operation.
10309// If the operation has not completed it will return an error.
10310func (future *PublicIPAddressesCreateOrUpdateFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
10311	var done bool
10312	done, err = future.Done(client)
10313	if err != nil {
10314		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
10315		return
10316	}
10317	if !done {
10318		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture")
10319		return
10320	}
10321	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10322	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
10323		pia, err = client.CreateOrUpdateResponder(pia.Response.Response)
10324		if err != nil {
10325			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request")
10326		}
10327	}
10328	return
10329}
10330
10331// PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
10332// operation.
10333type PublicIPAddressesDeleteFuture struct {
10334	azure.Future
10335}
10336
10337// Result returns the result of the asynchronous operation.
10338// If the operation has not completed it will return an error.
10339func (future *PublicIPAddressesDeleteFuture) Result(client PublicIPAddressesClient) (ar autorest.Response, err error) {
10340	var done bool
10341	done, err = future.Done(client)
10342	if err != nil {
10343		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure")
10344		return
10345	}
10346	if !done {
10347		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture")
10348		return
10349	}
10350	ar.Response = future.Response()
10351	return
10352}
10353
10354// PublicIPAddressesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
10355// operation.
10356type PublicIPAddressesUpdateTagsFuture struct {
10357	azure.Future
10358}
10359
10360// Result returns the result of the asynchronous operation.
10361// If the operation has not completed it will return an error.
10362func (future *PublicIPAddressesUpdateTagsFuture) Result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
10363	var done bool
10364	done, err = future.Done(client)
10365	if err != nil {
10366		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
10367		return
10368	}
10369	if !done {
10370		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesUpdateTagsFuture")
10371		return
10372	}
10373	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
10374	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
10375		pia, err = client.UpdateTagsResponder(pia.Response.Response)
10376		if err != nil {
10377			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesUpdateTagsFuture", "Result", pia.Response.Response, "Failure responding to request")
10378		}
10379	}
10380	return
10381}
10382
10383// PublicIPAddressListResult response for ListPublicIpAddresses API service call.
10384type PublicIPAddressListResult struct {
10385	autorest.Response `json:"-"`
10386	// Value - A list of public IP addresses that exists in a resource group.
10387	Value *[]PublicIPAddress `json:"value,omitempty"`
10388	// NextLink - The URL to get the next set of results.
10389	NextLink *string `json:"nextLink,omitempty"`
10390}
10391
10392// PublicIPAddressListResultIterator provides access to a complete listing of PublicIPAddress values.
10393type PublicIPAddressListResultIterator struct {
10394	i    int
10395	page PublicIPAddressListResultPage
10396}
10397
10398// Next advances to the next value.  If there was an error making
10399// the request the iterator does not advance and the error is returned.
10400func (iter *PublicIPAddressListResultIterator) Next() error {
10401	iter.i++
10402	if iter.i < len(iter.page.Values()) {
10403		return nil
10404	}
10405	err := iter.page.Next()
10406	if err != nil {
10407		iter.i--
10408		return err
10409	}
10410	iter.i = 0
10411	return nil
10412}
10413
10414// NotDone returns true if the enumeration should be started or is not yet complete.
10415func (iter PublicIPAddressListResultIterator) NotDone() bool {
10416	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10417}
10418
10419// Response returns the raw server response from the last page request.
10420func (iter PublicIPAddressListResultIterator) Response() PublicIPAddressListResult {
10421	return iter.page.Response()
10422}
10423
10424// Value returns the current value or a zero-initialized value if the
10425// iterator has advanced beyond the end of the collection.
10426func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress {
10427	if !iter.page.NotDone() {
10428		return PublicIPAddress{}
10429	}
10430	return iter.page.Values()[iter.i]
10431}
10432
10433// IsEmpty returns true if the ListResult contains no values.
10434func (pialr PublicIPAddressListResult) IsEmpty() bool {
10435	return pialr.Value == nil || len(*pialr.Value) == 0
10436}
10437
10438// publicIPAddressListResultPreparer prepares a request to retrieve the next set of results.
10439// It returns nil if no more results exist.
10440func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer() (*http.Request, error) {
10441	if pialr.NextLink == nil || len(to.String(pialr.NextLink)) < 1 {
10442		return nil, nil
10443	}
10444	return autorest.Prepare(&http.Request{},
10445		autorest.AsJSON(),
10446		autorest.AsGet(),
10447		autorest.WithBaseURL(to.String(pialr.NextLink)))
10448}
10449
10450// PublicIPAddressListResultPage contains a page of PublicIPAddress values.
10451type PublicIPAddressListResultPage struct {
10452	fn    func(PublicIPAddressListResult) (PublicIPAddressListResult, error)
10453	pialr PublicIPAddressListResult
10454}
10455
10456// Next advances to the next page of values.  If there was an error making
10457// the request the page does not advance and the error is returned.
10458func (page *PublicIPAddressListResultPage) Next() error {
10459	next, err := page.fn(page.pialr)
10460	if err != nil {
10461		return err
10462	}
10463	page.pialr = next
10464	return nil
10465}
10466
10467// NotDone returns true if the page enumeration should be started or is not yet complete.
10468func (page PublicIPAddressListResultPage) NotDone() bool {
10469	return !page.pialr.IsEmpty()
10470}
10471
10472// Response returns the raw server response from the last page request.
10473func (page PublicIPAddressListResultPage) Response() PublicIPAddressListResult {
10474	return page.pialr
10475}
10476
10477// Values returns the slice of values for the current page or nil if there are no values.
10478func (page PublicIPAddressListResultPage) Values() []PublicIPAddress {
10479	if page.pialr.IsEmpty() {
10480		return nil
10481	}
10482	return *page.pialr.Value
10483}
10484
10485// PublicIPAddressPropertiesFormat public IP address properties.
10486type PublicIPAddressPropertiesFormat struct {
10487	// PublicIPAllocationMethod - The public IP allocation method. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
10488	PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"`
10489	// PublicIPAddressVersion - The public IP address version. Possible values are: 'IPv4' and 'IPv6'. Possible values include: 'IPv4', 'IPv6'
10490	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
10491	// IPConfiguration - The IP configuration associated with the public IP address.
10492	IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"`
10493	// DNSSettings - The FQDN of the DNS record associated with the public IP address.
10494	DNSSettings *PublicIPAddressDNSSettings `json:"dnsSettings,omitempty"`
10495	// IPTags - The list of tags associated with the public IP address.
10496	IPTags *[]IPTag `json:"ipTags,omitempty"`
10497	// IPAddress - The IP address associated with the public IP address resource.
10498	IPAddress *string `json:"ipAddress,omitempty"`
10499	// IdleTimeoutInMinutes - The idle timeout of the public IP address.
10500	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
10501	// ResourceGUID - The resource GUID property of the public IP resource.
10502	ResourceGUID *string `json:"resourceGuid,omitempty"`
10503	// ProvisioningState - The provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
10504	ProvisioningState *string `json:"provisioningState,omitempty"`
10505}
10506
10507// PublicIPAddressSku SKU of a public IP address
10508type PublicIPAddressSku struct {
10509	// Name - Name of a public IP address SKU. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard'
10510	Name PublicIPAddressSkuName `json:"name,omitempty"`
10511}
10512
10513// QueryTroubleshootingParameters parameters that define the resource to query the troubleshooting result.
10514type QueryTroubleshootingParameters struct {
10515	// TargetResourceID - The target resource ID to query the troubleshooting result.
10516	TargetResourceID *string `json:"targetResourceId,omitempty"`
10517}
10518
10519// Resource common resource representation.
10520type Resource struct {
10521	// ID - Resource ID.
10522	ID *string `json:"id,omitempty"`
10523	// Name - Resource name.
10524	Name *string `json:"name,omitempty"`
10525	// Type - Resource type.
10526	Type *string `json:"type,omitempty"`
10527	// Location - Resource location.
10528	Location *string `json:"location,omitempty"`
10529	// Tags - Resource tags.
10530	Tags map[string]*string `json:"tags"`
10531}
10532
10533// MarshalJSON is the custom marshaler for Resource.
10534func (r Resource) MarshalJSON() ([]byte, error) {
10535	objectMap := make(map[string]interface{})
10536	if r.ID != nil {
10537		objectMap["id"] = r.ID
10538	}
10539	if r.Name != nil {
10540		objectMap["name"] = r.Name
10541	}
10542	if r.Type != nil {
10543		objectMap["type"] = r.Type
10544	}
10545	if r.Location != nil {
10546		objectMap["location"] = r.Location
10547	}
10548	if r.Tags != nil {
10549		objectMap["tags"] = r.Tags
10550	}
10551	return json.Marshal(objectMap)
10552}
10553
10554// ResourceNavigationLink resourceNavigationLink resource.
10555type ResourceNavigationLink struct {
10556	// ResourceNavigationLinkFormat - Resource navigation link properties format.
10557	*ResourceNavigationLinkFormat `json:"properties,omitempty"`
10558	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
10559	Name *string `json:"name,omitempty"`
10560	// Etag - A unique read-only string that changes whenever the resource is updated.
10561	Etag *string `json:"etag,omitempty"`
10562	// ID - Resource ID.
10563	ID *string `json:"id,omitempty"`
10564}
10565
10566// MarshalJSON is the custom marshaler for ResourceNavigationLink.
10567func (rnl ResourceNavigationLink) MarshalJSON() ([]byte, error) {
10568	objectMap := make(map[string]interface{})
10569	if rnl.ResourceNavigationLinkFormat != nil {
10570		objectMap["properties"] = rnl.ResourceNavigationLinkFormat
10571	}
10572	if rnl.Name != nil {
10573		objectMap["name"] = rnl.Name
10574	}
10575	if rnl.Etag != nil {
10576		objectMap["etag"] = rnl.Etag
10577	}
10578	if rnl.ID != nil {
10579		objectMap["id"] = rnl.ID
10580	}
10581	return json.Marshal(objectMap)
10582}
10583
10584// UnmarshalJSON is the custom unmarshaler for ResourceNavigationLink struct.
10585func (rnl *ResourceNavigationLink) UnmarshalJSON(body []byte) error {
10586	var m map[string]*json.RawMessage
10587	err := json.Unmarshal(body, &m)
10588	if err != nil {
10589		return err
10590	}
10591	for k, v := range m {
10592		switch k {
10593		case "properties":
10594			if v != nil {
10595				var resourceNavigationLinkFormat ResourceNavigationLinkFormat
10596				err = json.Unmarshal(*v, &resourceNavigationLinkFormat)
10597				if err != nil {
10598					return err
10599				}
10600				rnl.ResourceNavigationLinkFormat = &resourceNavigationLinkFormat
10601			}
10602		case "name":
10603			if v != nil {
10604				var name string
10605				err = json.Unmarshal(*v, &name)
10606				if err != nil {
10607					return err
10608				}
10609				rnl.Name = &name
10610			}
10611		case "etag":
10612			if v != nil {
10613				var etag string
10614				err = json.Unmarshal(*v, &etag)
10615				if err != nil {
10616					return err
10617				}
10618				rnl.Etag = &etag
10619			}
10620		case "id":
10621			if v != nil {
10622				var ID string
10623				err = json.Unmarshal(*v, &ID)
10624				if err != nil {
10625					return err
10626				}
10627				rnl.ID = &ID
10628			}
10629		}
10630	}
10631
10632	return nil
10633}
10634
10635// ResourceNavigationLinkFormat properties of ResourceNavigationLink.
10636type ResourceNavigationLinkFormat struct {
10637	// LinkedResourceType - Resource type of the linked resource.
10638	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
10639	// Link - Link to the external resource
10640	Link *string `json:"link,omitempty"`
10641	// ProvisioningState - Provisioning state of the ResourceNavigationLink resource.
10642	ProvisioningState *string `json:"provisioningState,omitempty"`
10643}
10644
10645// RetentionPolicyParameters parameters that define the retention policy for flow log.
10646type RetentionPolicyParameters struct {
10647	// Days - Number of days to retain flow log records.
10648	Days *int32 `json:"days,omitempty"`
10649	// Enabled - Flag to enable/disable retention.
10650	Enabled *bool `json:"enabled,omitempty"`
10651}
10652
10653// Route route resource
10654type Route struct {
10655	autorest.Response `json:"-"`
10656	// RoutePropertiesFormat - Properties of the route.
10657	*RoutePropertiesFormat `json:"properties,omitempty"`
10658	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
10659	Name *string `json:"name,omitempty"`
10660	// Etag - A unique read-only string that changes whenever the resource is updated.
10661	Etag *string `json:"etag,omitempty"`
10662	// ID - Resource ID.
10663	ID *string `json:"id,omitempty"`
10664}
10665
10666// MarshalJSON is the custom marshaler for Route.
10667func (r Route) MarshalJSON() ([]byte, error) {
10668	objectMap := make(map[string]interface{})
10669	if r.RoutePropertiesFormat != nil {
10670		objectMap["properties"] = r.RoutePropertiesFormat
10671	}
10672	if r.Name != nil {
10673		objectMap["name"] = r.Name
10674	}
10675	if r.Etag != nil {
10676		objectMap["etag"] = r.Etag
10677	}
10678	if r.ID != nil {
10679		objectMap["id"] = r.ID
10680	}
10681	return json.Marshal(objectMap)
10682}
10683
10684// UnmarshalJSON is the custom unmarshaler for Route struct.
10685func (r *Route) UnmarshalJSON(body []byte) error {
10686	var m map[string]*json.RawMessage
10687	err := json.Unmarshal(body, &m)
10688	if err != nil {
10689		return err
10690	}
10691	for k, v := range m {
10692		switch k {
10693		case "properties":
10694			if v != nil {
10695				var routePropertiesFormat RoutePropertiesFormat
10696				err = json.Unmarshal(*v, &routePropertiesFormat)
10697				if err != nil {
10698					return err
10699				}
10700				r.RoutePropertiesFormat = &routePropertiesFormat
10701			}
10702		case "name":
10703			if v != nil {
10704				var name string
10705				err = json.Unmarshal(*v, &name)
10706				if err != nil {
10707					return err
10708				}
10709				r.Name = &name
10710			}
10711		case "etag":
10712			if v != nil {
10713				var etag string
10714				err = json.Unmarshal(*v, &etag)
10715				if err != nil {
10716					return err
10717				}
10718				r.Etag = &etag
10719			}
10720		case "id":
10721			if v != nil {
10722				var ID string
10723				err = json.Unmarshal(*v, &ID)
10724				if err != nil {
10725					return err
10726				}
10727				r.ID = &ID
10728			}
10729		}
10730	}
10731
10732	return nil
10733}
10734
10735// RouteFilter route Filter Resource.
10736type RouteFilter struct {
10737	autorest.Response            `json:"-"`
10738	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
10739	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
10740	Etag *string `json:"etag,omitempty"`
10741	// ID - Resource ID.
10742	ID *string `json:"id,omitempty"`
10743	// Name - Resource name.
10744	Name *string `json:"name,omitempty"`
10745	// Type - Resource type.
10746	Type *string `json:"type,omitempty"`
10747	// Location - Resource location.
10748	Location *string `json:"location,omitempty"`
10749	// Tags - Resource tags.
10750	Tags map[string]*string `json:"tags"`
10751}
10752
10753// MarshalJSON is the custom marshaler for RouteFilter.
10754func (rf RouteFilter) MarshalJSON() ([]byte, error) {
10755	objectMap := make(map[string]interface{})
10756	if rf.RouteFilterPropertiesFormat != nil {
10757		objectMap["properties"] = rf.RouteFilterPropertiesFormat
10758	}
10759	if rf.Etag != nil {
10760		objectMap["etag"] = rf.Etag
10761	}
10762	if rf.ID != nil {
10763		objectMap["id"] = rf.ID
10764	}
10765	if rf.Name != nil {
10766		objectMap["name"] = rf.Name
10767	}
10768	if rf.Type != nil {
10769		objectMap["type"] = rf.Type
10770	}
10771	if rf.Location != nil {
10772		objectMap["location"] = rf.Location
10773	}
10774	if rf.Tags != nil {
10775		objectMap["tags"] = rf.Tags
10776	}
10777	return json.Marshal(objectMap)
10778}
10779
10780// UnmarshalJSON is the custom unmarshaler for RouteFilter struct.
10781func (rf *RouteFilter) UnmarshalJSON(body []byte) error {
10782	var m map[string]*json.RawMessage
10783	err := json.Unmarshal(body, &m)
10784	if err != nil {
10785		return err
10786	}
10787	for k, v := range m {
10788		switch k {
10789		case "properties":
10790			if v != nil {
10791				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
10792				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
10793				if err != nil {
10794					return err
10795				}
10796				rf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
10797			}
10798		case "etag":
10799			if v != nil {
10800				var etag string
10801				err = json.Unmarshal(*v, &etag)
10802				if err != nil {
10803					return err
10804				}
10805				rf.Etag = &etag
10806			}
10807		case "id":
10808			if v != nil {
10809				var ID string
10810				err = json.Unmarshal(*v, &ID)
10811				if err != nil {
10812					return err
10813				}
10814				rf.ID = &ID
10815			}
10816		case "name":
10817			if v != nil {
10818				var name string
10819				err = json.Unmarshal(*v, &name)
10820				if err != nil {
10821					return err
10822				}
10823				rf.Name = &name
10824			}
10825		case "type":
10826			if v != nil {
10827				var typeVar string
10828				err = json.Unmarshal(*v, &typeVar)
10829				if err != nil {
10830					return err
10831				}
10832				rf.Type = &typeVar
10833			}
10834		case "location":
10835			if v != nil {
10836				var location string
10837				err = json.Unmarshal(*v, &location)
10838				if err != nil {
10839					return err
10840				}
10841				rf.Location = &location
10842			}
10843		case "tags":
10844			if v != nil {
10845				var tags map[string]*string
10846				err = json.Unmarshal(*v, &tags)
10847				if err != nil {
10848					return err
10849				}
10850				rf.Tags = tags
10851			}
10852		}
10853	}
10854
10855	return nil
10856}
10857
10858// RouteFilterListResult response for the ListRouteFilters API service call.
10859type RouteFilterListResult struct {
10860	autorest.Response `json:"-"`
10861	// Value - Gets a list of route filters in a resource group.
10862	Value *[]RouteFilter `json:"value,omitempty"`
10863	// NextLink - The URL to get the next set of results.
10864	NextLink *string `json:"nextLink,omitempty"`
10865}
10866
10867// RouteFilterListResultIterator provides access to a complete listing of RouteFilter values.
10868type RouteFilterListResultIterator struct {
10869	i    int
10870	page RouteFilterListResultPage
10871}
10872
10873// Next advances to the next value.  If there was an error making
10874// the request the iterator does not advance and the error is returned.
10875func (iter *RouteFilterListResultIterator) Next() error {
10876	iter.i++
10877	if iter.i < len(iter.page.Values()) {
10878		return nil
10879	}
10880	err := iter.page.Next()
10881	if err != nil {
10882		iter.i--
10883		return err
10884	}
10885	iter.i = 0
10886	return nil
10887}
10888
10889// NotDone returns true if the enumeration should be started or is not yet complete.
10890func (iter RouteFilterListResultIterator) NotDone() bool {
10891	return iter.page.NotDone() && iter.i < len(iter.page.Values())
10892}
10893
10894// Response returns the raw server response from the last page request.
10895func (iter RouteFilterListResultIterator) Response() RouteFilterListResult {
10896	return iter.page.Response()
10897}
10898
10899// Value returns the current value or a zero-initialized value if the
10900// iterator has advanced beyond the end of the collection.
10901func (iter RouteFilterListResultIterator) Value() RouteFilter {
10902	if !iter.page.NotDone() {
10903		return RouteFilter{}
10904	}
10905	return iter.page.Values()[iter.i]
10906}
10907
10908// IsEmpty returns true if the ListResult contains no values.
10909func (rflr RouteFilterListResult) IsEmpty() bool {
10910	return rflr.Value == nil || len(*rflr.Value) == 0
10911}
10912
10913// routeFilterListResultPreparer prepares a request to retrieve the next set of results.
10914// It returns nil if no more results exist.
10915func (rflr RouteFilterListResult) routeFilterListResultPreparer() (*http.Request, error) {
10916	if rflr.NextLink == nil || len(to.String(rflr.NextLink)) < 1 {
10917		return nil, nil
10918	}
10919	return autorest.Prepare(&http.Request{},
10920		autorest.AsJSON(),
10921		autorest.AsGet(),
10922		autorest.WithBaseURL(to.String(rflr.NextLink)))
10923}
10924
10925// RouteFilterListResultPage contains a page of RouteFilter values.
10926type RouteFilterListResultPage struct {
10927	fn   func(RouteFilterListResult) (RouteFilterListResult, error)
10928	rflr RouteFilterListResult
10929}
10930
10931// Next advances to the next page of values.  If there was an error making
10932// the request the page does not advance and the error is returned.
10933func (page *RouteFilterListResultPage) Next() error {
10934	next, err := page.fn(page.rflr)
10935	if err != nil {
10936		return err
10937	}
10938	page.rflr = next
10939	return nil
10940}
10941
10942// NotDone returns true if the page enumeration should be started or is not yet complete.
10943func (page RouteFilterListResultPage) NotDone() bool {
10944	return !page.rflr.IsEmpty()
10945}
10946
10947// Response returns the raw server response from the last page request.
10948func (page RouteFilterListResultPage) Response() RouteFilterListResult {
10949	return page.rflr
10950}
10951
10952// Values returns the slice of values for the current page or nil if there are no values.
10953func (page RouteFilterListResultPage) Values() []RouteFilter {
10954	if page.rflr.IsEmpty() {
10955		return nil
10956	}
10957	return *page.rflr.Value
10958}
10959
10960// RouteFilterPropertiesFormat route Filter Resource
10961type RouteFilterPropertiesFormat struct {
10962	// Rules - Collection of RouteFilterRules contained within a route filter.
10963	Rules *[]RouteFilterRule `json:"rules,omitempty"`
10964	// Peerings - A collection of references to express route circuit peerings.
10965	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
10966	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
10967	ProvisioningState *string `json:"provisioningState,omitempty"`
10968}
10969
10970// RouteFilterRule route Filter Rule Resource
10971type RouteFilterRule struct {
10972	autorest.Response                `json:"-"`
10973	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
10974	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
10975	Name *string `json:"name,omitempty"`
10976	// Location - Resource location.
10977	Location *string `json:"location,omitempty"`
10978	// Etag - A unique read-only string that changes whenever the resource is updated.
10979	Etag *string `json:"etag,omitempty"`
10980	// ID - Resource ID.
10981	ID *string `json:"id,omitempty"`
10982}
10983
10984// MarshalJSON is the custom marshaler for RouteFilterRule.
10985func (rfr RouteFilterRule) MarshalJSON() ([]byte, error) {
10986	objectMap := make(map[string]interface{})
10987	if rfr.RouteFilterRulePropertiesFormat != nil {
10988		objectMap["properties"] = rfr.RouteFilterRulePropertiesFormat
10989	}
10990	if rfr.Name != nil {
10991		objectMap["name"] = rfr.Name
10992	}
10993	if rfr.Location != nil {
10994		objectMap["location"] = rfr.Location
10995	}
10996	if rfr.Etag != nil {
10997		objectMap["etag"] = rfr.Etag
10998	}
10999	if rfr.ID != nil {
11000		objectMap["id"] = rfr.ID
11001	}
11002	return json.Marshal(objectMap)
11003}
11004
11005// UnmarshalJSON is the custom unmarshaler for RouteFilterRule struct.
11006func (rfr *RouteFilterRule) UnmarshalJSON(body []byte) error {
11007	var m map[string]*json.RawMessage
11008	err := json.Unmarshal(body, &m)
11009	if err != nil {
11010		return err
11011	}
11012	for k, v := range m {
11013		switch k {
11014		case "properties":
11015			if v != nil {
11016				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
11017				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
11018				if err != nil {
11019					return err
11020				}
11021				rfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
11022			}
11023		case "name":
11024			if v != nil {
11025				var name string
11026				err = json.Unmarshal(*v, &name)
11027				if err != nil {
11028					return err
11029				}
11030				rfr.Name = &name
11031			}
11032		case "location":
11033			if v != nil {
11034				var location string
11035				err = json.Unmarshal(*v, &location)
11036				if err != nil {
11037					return err
11038				}
11039				rfr.Location = &location
11040			}
11041		case "etag":
11042			if v != nil {
11043				var etag string
11044				err = json.Unmarshal(*v, &etag)
11045				if err != nil {
11046					return err
11047				}
11048				rfr.Etag = &etag
11049			}
11050		case "id":
11051			if v != nil {
11052				var ID string
11053				err = json.Unmarshal(*v, &ID)
11054				if err != nil {
11055					return err
11056				}
11057				rfr.ID = &ID
11058			}
11059		}
11060	}
11061
11062	return nil
11063}
11064
11065// RouteFilterRuleListResult response for the ListRouteFilterRules API service call
11066type RouteFilterRuleListResult struct {
11067	autorest.Response `json:"-"`
11068	// Value - Gets a list of RouteFilterRules in a resource group.
11069	Value *[]RouteFilterRule `json:"value,omitempty"`
11070	// NextLink - The URL to get the next set of results.
11071	NextLink *string `json:"nextLink,omitempty"`
11072}
11073
11074// RouteFilterRuleListResultIterator provides access to a complete listing of RouteFilterRule values.
11075type RouteFilterRuleListResultIterator struct {
11076	i    int
11077	page RouteFilterRuleListResultPage
11078}
11079
11080// Next advances to the next value.  If there was an error making
11081// the request the iterator does not advance and the error is returned.
11082func (iter *RouteFilterRuleListResultIterator) Next() error {
11083	iter.i++
11084	if iter.i < len(iter.page.Values()) {
11085		return nil
11086	}
11087	err := iter.page.Next()
11088	if err != nil {
11089		iter.i--
11090		return err
11091	}
11092	iter.i = 0
11093	return nil
11094}
11095
11096// NotDone returns true if the enumeration should be started or is not yet complete.
11097func (iter RouteFilterRuleListResultIterator) NotDone() bool {
11098	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11099}
11100
11101// Response returns the raw server response from the last page request.
11102func (iter RouteFilterRuleListResultIterator) Response() RouteFilterRuleListResult {
11103	return iter.page.Response()
11104}
11105
11106// Value returns the current value or a zero-initialized value if the
11107// iterator has advanced beyond the end of the collection.
11108func (iter RouteFilterRuleListResultIterator) Value() RouteFilterRule {
11109	if !iter.page.NotDone() {
11110		return RouteFilterRule{}
11111	}
11112	return iter.page.Values()[iter.i]
11113}
11114
11115// IsEmpty returns true if the ListResult contains no values.
11116func (rfrlr RouteFilterRuleListResult) IsEmpty() bool {
11117	return rfrlr.Value == nil || len(*rfrlr.Value) == 0
11118}
11119
11120// routeFilterRuleListResultPreparer prepares a request to retrieve the next set of results.
11121// It returns nil if no more results exist.
11122func (rfrlr RouteFilterRuleListResult) routeFilterRuleListResultPreparer() (*http.Request, error) {
11123	if rfrlr.NextLink == nil || len(to.String(rfrlr.NextLink)) < 1 {
11124		return nil, nil
11125	}
11126	return autorest.Prepare(&http.Request{},
11127		autorest.AsJSON(),
11128		autorest.AsGet(),
11129		autorest.WithBaseURL(to.String(rfrlr.NextLink)))
11130}
11131
11132// RouteFilterRuleListResultPage contains a page of RouteFilterRule values.
11133type RouteFilterRuleListResultPage struct {
11134	fn    func(RouteFilterRuleListResult) (RouteFilterRuleListResult, error)
11135	rfrlr RouteFilterRuleListResult
11136}
11137
11138// Next advances to the next page of values.  If there was an error making
11139// the request the page does not advance and the error is returned.
11140func (page *RouteFilterRuleListResultPage) Next() error {
11141	next, err := page.fn(page.rfrlr)
11142	if err != nil {
11143		return err
11144	}
11145	page.rfrlr = next
11146	return nil
11147}
11148
11149// NotDone returns true if the page enumeration should be started or is not yet complete.
11150func (page RouteFilterRuleListResultPage) NotDone() bool {
11151	return !page.rfrlr.IsEmpty()
11152}
11153
11154// Response returns the raw server response from the last page request.
11155func (page RouteFilterRuleListResultPage) Response() RouteFilterRuleListResult {
11156	return page.rfrlr
11157}
11158
11159// Values returns the slice of values for the current page or nil if there are no values.
11160func (page RouteFilterRuleListResultPage) Values() []RouteFilterRule {
11161	if page.rfrlr.IsEmpty() {
11162		return nil
11163	}
11164	return *page.rfrlr.Value
11165}
11166
11167// RouteFilterRulePropertiesFormat route Filter Rule Resource
11168type RouteFilterRulePropertiesFormat struct {
11169	// Access - The access type of the rule. Valid values are: 'Allow', 'Deny'. Possible values include: 'Allow', 'Deny'
11170	Access Access `json:"access,omitempty"`
11171	// RouteFilterRuleType - The rule type of the rule. Valid value is: 'Community'
11172	RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"`
11173	// Communities - The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020']
11174	Communities *[]string `json:"communities,omitempty"`
11175	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', 'Succeeded' and 'Failed'.
11176	ProvisioningState *string `json:"provisioningState,omitempty"`
11177}
11178
11179// RouteFilterRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
11180// operation.
11181type RouteFilterRulesCreateOrUpdateFuture 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 *RouteFilterRulesCreateOrUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
11188	var done bool
11189	done, err = future.Done(client)
11190	if err != nil {
11191		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11192		return
11193	}
11194	if !done {
11195		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesCreateOrUpdateFuture")
11196		return
11197	}
11198	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11199	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
11200		rfr, err = client.CreateOrUpdateResponder(rfr.Response.Response)
11201		if err != nil {
11202			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
11203		}
11204	}
11205	return
11206}
11207
11208// RouteFilterRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
11209// operation.
11210type RouteFilterRulesDeleteFuture 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 *RouteFilterRulesDeleteFuture) Result(client RouteFilterRulesClient) (ar autorest.Response, err error) {
11217	var done bool
11218	done, err = future.Done(client)
11219	if err != nil {
11220		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesDeleteFuture", "Result", future.Response(), "Polling failure")
11221		return
11222	}
11223	if !done {
11224		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesDeleteFuture")
11225		return
11226	}
11227	ar.Response = future.Response()
11228	return
11229}
11230
11231// RouteFilterRulesUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
11232// operation.
11233type RouteFilterRulesUpdateFuture 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 *RouteFilterRulesUpdateFuture) Result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
11240	var done bool
11241	done, err = future.Done(client)
11242	if err != nil {
11243		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", future.Response(), "Polling failure")
11244		return
11245	}
11246	if !done {
11247		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesUpdateFuture")
11248		return
11249	}
11250	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11251	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
11252		rfr, err = client.UpdateResponder(rfr.Response.Response)
11253		if err != nil {
11254			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
11255		}
11256	}
11257	return
11258}
11259
11260// RouteFiltersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
11261// operation.
11262type RouteFiltersCreateOrUpdateFuture struct {
11263	azure.Future
11264}
11265
11266// Result returns the result of the asynchronous operation.
11267// If the operation has not completed it will return an error.
11268func (future *RouteFiltersCreateOrUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
11269	var done bool
11270	done, err = future.Done(client)
11271	if err != nil {
11272		err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11273		return
11274	}
11275	if !done {
11276		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersCreateOrUpdateFuture")
11277		return
11278	}
11279	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11280	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
11281		rf, err = client.CreateOrUpdateResponder(rf.Response.Response)
11282		if err != nil {
11283			err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
11284		}
11285	}
11286	return
11287}
11288
11289// RouteFiltersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
11290type RouteFiltersDeleteFuture struct {
11291	azure.Future
11292}
11293
11294// Result returns the result of the asynchronous operation.
11295// If the operation has not completed it will return an error.
11296func (future *RouteFiltersDeleteFuture) Result(client RouteFiltersClient) (ar autorest.Response, err error) {
11297	var done bool
11298	done, err = future.Done(client)
11299	if err != nil {
11300		err = autorest.NewErrorWithError(err, "network.RouteFiltersDeleteFuture", "Result", future.Response(), "Polling failure")
11301		return
11302	}
11303	if !done {
11304		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersDeleteFuture")
11305		return
11306	}
11307	ar.Response = future.Response()
11308	return
11309}
11310
11311// RouteFiltersUpdateFuture an abstraction for monitoring and retrieving the results of a long-running operation.
11312type RouteFiltersUpdateFuture struct {
11313	azure.Future
11314}
11315
11316// Result returns the result of the asynchronous operation.
11317// If the operation has not completed it will return an error.
11318func (future *RouteFiltersUpdateFuture) Result(client RouteFiltersClient) (rf RouteFilter, err error) {
11319	var done bool
11320	done, err = future.Done(client)
11321	if err != nil {
11322		err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", future.Response(), "Polling failure")
11323		return
11324	}
11325	if !done {
11326		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersUpdateFuture")
11327		return
11328	}
11329	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11330	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
11331		rf, err = client.UpdateResponder(rf.Response.Response)
11332		if err != nil {
11333			err = autorest.NewErrorWithError(err, "network.RouteFiltersUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
11334		}
11335	}
11336	return
11337}
11338
11339// RouteListResult response for the ListRoute API service call
11340type RouteListResult struct {
11341	autorest.Response `json:"-"`
11342	// Value - Gets a list of routes in a resource group.
11343	Value *[]Route `json:"value,omitempty"`
11344	// NextLink - The URL to get the next set of results.
11345	NextLink *string `json:"nextLink,omitempty"`
11346}
11347
11348// RouteListResultIterator provides access to a complete listing of Route values.
11349type RouteListResultIterator struct {
11350	i    int
11351	page RouteListResultPage
11352}
11353
11354// Next advances to the next value.  If there was an error making
11355// the request the iterator does not advance and the error is returned.
11356func (iter *RouteListResultIterator) Next() error {
11357	iter.i++
11358	if iter.i < len(iter.page.Values()) {
11359		return nil
11360	}
11361	err := iter.page.Next()
11362	if err != nil {
11363		iter.i--
11364		return err
11365	}
11366	iter.i = 0
11367	return nil
11368}
11369
11370// NotDone returns true if the enumeration should be started or is not yet complete.
11371func (iter RouteListResultIterator) NotDone() bool {
11372	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11373}
11374
11375// Response returns the raw server response from the last page request.
11376func (iter RouteListResultIterator) Response() RouteListResult {
11377	return iter.page.Response()
11378}
11379
11380// Value returns the current value or a zero-initialized value if the
11381// iterator has advanced beyond the end of the collection.
11382func (iter RouteListResultIterator) Value() Route {
11383	if !iter.page.NotDone() {
11384		return Route{}
11385	}
11386	return iter.page.Values()[iter.i]
11387}
11388
11389// IsEmpty returns true if the ListResult contains no values.
11390func (rlr RouteListResult) IsEmpty() bool {
11391	return rlr.Value == nil || len(*rlr.Value) == 0
11392}
11393
11394// routeListResultPreparer prepares a request to retrieve the next set of results.
11395// It returns nil if no more results exist.
11396func (rlr RouteListResult) routeListResultPreparer() (*http.Request, error) {
11397	if rlr.NextLink == nil || len(to.String(rlr.NextLink)) < 1 {
11398		return nil, nil
11399	}
11400	return autorest.Prepare(&http.Request{},
11401		autorest.AsJSON(),
11402		autorest.AsGet(),
11403		autorest.WithBaseURL(to.String(rlr.NextLink)))
11404}
11405
11406// RouteListResultPage contains a page of Route values.
11407type RouteListResultPage struct {
11408	fn  func(RouteListResult) (RouteListResult, error)
11409	rlr RouteListResult
11410}
11411
11412// Next advances to the next page of values.  If there was an error making
11413// the request the page does not advance and the error is returned.
11414func (page *RouteListResultPage) Next() error {
11415	next, err := page.fn(page.rlr)
11416	if err != nil {
11417		return err
11418	}
11419	page.rlr = next
11420	return nil
11421}
11422
11423// NotDone returns true if the page enumeration should be started or is not yet complete.
11424func (page RouteListResultPage) NotDone() bool {
11425	return !page.rlr.IsEmpty()
11426}
11427
11428// Response returns the raw server response from the last page request.
11429func (page RouteListResultPage) Response() RouteListResult {
11430	return page.rlr
11431}
11432
11433// Values returns the slice of values for the current page or nil if there are no values.
11434func (page RouteListResultPage) Values() []Route {
11435	if page.rlr.IsEmpty() {
11436		return nil
11437	}
11438	return *page.rlr.Value
11439}
11440
11441// RoutePropertiesFormat route resource
11442type RoutePropertiesFormat struct {
11443	// AddressPrefix - The destination CIDR to which the route applies.
11444	AddressPrefix *string `json:"addressPrefix,omitempty"`
11445	// 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'
11446	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
11447	// NextHopIPAddress - The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
11448	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
11449	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
11450	ProvisioningState *string `json:"provisioningState,omitempty"`
11451}
11452
11453// RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running operation.
11454type RoutesCreateOrUpdateFuture struct {
11455	azure.Future
11456}
11457
11458// Result returns the result of the asynchronous operation.
11459// If the operation has not completed it will return an error.
11460func (future *RoutesCreateOrUpdateFuture) Result(client RoutesClient) (r Route, err error) {
11461	var done bool
11462	done, err = future.Done(client)
11463	if err != nil {
11464		err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11465		return
11466	}
11467	if !done {
11468		err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture")
11469		return
11470	}
11471	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11472	if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent {
11473		r, err = client.CreateOrUpdateResponder(r.Response.Response)
11474		if err != nil {
11475			err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request")
11476		}
11477	}
11478	return
11479}
11480
11481// RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
11482type RoutesDeleteFuture struct {
11483	azure.Future
11484}
11485
11486// Result returns the result of the asynchronous operation.
11487// If the operation has not completed it will return an error.
11488func (future *RoutesDeleteFuture) Result(client RoutesClient) (ar autorest.Response, err error) {
11489	var done bool
11490	done, err = future.Done(client)
11491	if err != nil {
11492		err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure")
11493		return
11494	}
11495	if !done {
11496		err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture")
11497		return
11498	}
11499	ar.Response = future.Response()
11500	return
11501}
11502
11503// RouteTable route table resource.
11504type RouteTable struct {
11505	autorest.Response `json:"-"`
11506	// RouteTablePropertiesFormat - Properties of the route table.
11507	*RouteTablePropertiesFormat `json:"properties,omitempty"`
11508	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
11509	Etag *string `json:"etag,omitempty"`
11510	// ID - Resource ID.
11511	ID *string `json:"id,omitempty"`
11512	// Name - Resource name.
11513	Name *string `json:"name,omitempty"`
11514	// Type - Resource type.
11515	Type *string `json:"type,omitempty"`
11516	// Location - Resource location.
11517	Location *string `json:"location,omitempty"`
11518	// Tags - Resource tags.
11519	Tags map[string]*string `json:"tags"`
11520}
11521
11522// MarshalJSON is the custom marshaler for RouteTable.
11523func (rt RouteTable) MarshalJSON() ([]byte, error) {
11524	objectMap := make(map[string]interface{})
11525	if rt.RouteTablePropertiesFormat != nil {
11526		objectMap["properties"] = rt.RouteTablePropertiesFormat
11527	}
11528	if rt.Etag != nil {
11529		objectMap["etag"] = rt.Etag
11530	}
11531	if rt.ID != nil {
11532		objectMap["id"] = rt.ID
11533	}
11534	if rt.Name != nil {
11535		objectMap["name"] = rt.Name
11536	}
11537	if rt.Type != nil {
11538		objectMap["type"] = rt.Type
11539	}
11540	if rt.Location != nil {
11541		objectMap["location"] = rt.Location
11542	}
11543	if rt.Tags != nil {
11544		objectMap["tags"] = rt.Tags
11545	}
11546	return json.Marshal(objectMap)
11547}
11548
11549// UnmarshalJSON is the custom unmarshaler for RouteTable struct.
11550func (rt *RouteTable) UnmarshalJSON(body []byte) error {
11551	var m map[string]*json.RawMessage
11552	err := json.Unmarshal(body, &m)
11553	if err != nil {
11554		return err
11555	}
11556	for k, v := range m {
11557		switch k {
11558		case "properties":
11559			if v != nil {
11560				var routeTablePropertiesFormat RouteTablePropertiesFormat
11561				err = json.Unmarshal(*v, &routeTablePropertiesFormat)
11562				if err != nil {
11563					return err
11564				}
11565				rt.RouteTablePropertiesFormat = &routeTablePropertiesFormat
11566			}
11567		case "etag":
11568			if v != nil {
11569				var etag string
11570				err = json.Unmarshal(*v, &etag)
11571				if err != nil {
11572					return err
11573				}
11574				rt.Etag = &etag
11575			}
11576		case "id":
11577			if v != nil {
11578				var ID string
11579				err = json.Unmarshal(*v, &ID)
11580				if err != nil {
11581					return err
11582				}
11583				rt.ID = &ID
11584			}
11585		case "name":
11586			if v != nil {
11587				var name string
11588				err = json.Unmarshal(*v, &name)
11589				if err != nil {
11590					return err
11591				}
11592				rt.Name = &name
11593			}
11594		case "type":
11595			if v != nil {
11596				var typeVar string
11597				err = json.Unmarshal(*v, &typeVar)
11598				if err != nil {
11599					return err
11600				}
11601				rt.Type = &typeVar
11602			}
11603		case "location":
11604			if v != nil {
11605				var location string
11606				err = json.Unmarshal(*v, &location)
11607				if err != nil {
11608					return err
11609				}
11610				rt.Location = &location
11611			}
11612		case "tags":
11613			if v != nil {
11614				var tags map[string]*string
11615				err = json.Unmarshal(*v, &tags)
11616				if err != nil {
11617					return err
11618				}
11619				rt.Tags = tags
11620			}
11621		}
11622	}
11623
11624	return nil
11625}
11626
11627// RouteTableListResult response for the ListRouteTable API service call.
11628type RouteTableListResult struct {
11629	autorest.Response `json:"-"`
11630	// Value - Gets a list of route tables in a resource group.
11631	Value *[]RouteTable `json:"value,omitempty"`
11632	// NextLink - The URL to get the next set of results.
11633	NextLink *string `json:"nextLink,omitempty"`
11634}
11635
11636// RouteTableListResultIterator provides access to a complete listing of RouteTable values.
11637type RouteTableListResultIterator struct {
11638	i    int
11639	page RouteTableListResultPage
11640}
11641
11642// Next advances to the next value.  If there was an error making
11643// the request the iterator does not advance and the error is returned.
11644func (iter *RouteTableListResultIterator) Next() error {
11645	iter.i++
11646	if iter.i < len(iter.page.Values()) {
11647		return nil
11648	}
11649	err := iter.page.Next()
11650	if err != nil {
11651		iter.i--
11652		return err
11653	}
11654	iter.i = 0
11655	return nil
11656}
11657
11658// NotDone returns true if the enumeration should be started or is not yet complete.
11659func (iter RouteTableListResultIterator) NotDone() bool {
11660	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11661}
11662
11663// Response returns the raw server response from the last page request.
11664func (iter RouteTableListResultIterator) Response() RouteTableListResult {
11665	return iter.page.Response()
11666}
11667
11668// Value returns the current value or a zero-initialized value if the
11669// iterator has advanced beyond the end of the collection.
11670func (iter RouteTableListResultIterator) Value() RouteTable {
11671	if !iter.page.NotDone() {
11672		return RouteTable{}
11673	}
11674	return iter.page.Values()[iter.i]
11675}
11676
11677// IsEmpty returns true if the ListResult contains no values.
11678func (rtlr RouteTableListResult) IsEmpty() bool {
11679	return rtlr.Value == nil || len(*rtlr.Value) == 0
11680}
11681
11682// routeTableListResultPreparer prepares a request to retrieve the next set of results.
11683// It returns nil if no more results exist.
11684func (rtlr RouteTableListResult) routeTableListResultPreparer() (*http.Request, error) {
11685	if rtlr.NextLink == nil || len(to.String(rtlr.NextLink)) < 1 {
11686		return nil, nil
11687	}
11688	return autorest.Prepare(&http.Request{},
11689		autorest.AsJSON(),
11690		autorest.AsGet(),
11691		autorest.WithBaseURL(to.String(rtlr.NextLink)))
11692}
11693
11694// RouteTableListResultPage contains a page of RouteTable values.
11695type RouteTableListResultPage struct {
11696	fn   func(RouteTableListResult) (RouteTableListResult, error)
11697	rtlr RouteTableListResult
11698}
11699
11700// Next advances to the next page of values.  If there was an error making
11701// the request the page does not advance and the error is returned.
11702func (page *RouteTableListResultPage) Next() error {
11703	next, err := page.fn(page.rtlr)
11704	if err != nil {
11705		return err
11706	}
11707	page.rtlr = next
11708	return nil
11709}
11710
11711// NotDone returns true if the page enumeration should be started or is not yet complete.
11712func (page RouteTableListResultPage) NotDone() bool {
11713	return !page.rtlr.IsEmpty()
11714}
11715
11716// Response returns the raw server response from the last page request.
11717func (page RouteTableListResultPage) Response() RouteTableListResult {
11718	return page.rtlr
11719}
11720
11721// Values returns the slice of values for the current page or nil if there are no values.
11722func (page RouteTableListResultPage) Values() []RouteTable {
11723	if page.rtlr.IsEmpty() {
11724		return nil
11725	}
11726	return *page.rtlr.Value
11727}
11728
11729// RouteTablePropertiesFormat route Table resource
11730type RouteTablePropertiesFormat struct {
11731	// Routes - Collection of routes contained within a route table.
11732	Routes *[]Route `json:"routes,omitempty"`
11733	// Subnets - A collection of references to subnets.
11734	Subnets *[]Subnet `json:"subnets,omitempty"`
11735	// DisableBgpRoutePropagation - Gets or sets whether to disable the routes learned by BGP on that route table. True means disable.
11736	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
11737	// ProvisioningState - The provisioning state of the resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
11738	ProvisioningState *string `json:"provisioningState,omitempty"`
11739}
11740
11741// RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
11742// operation.
11743type RouteTablesCreateOrUpdateFuture struct {
11744	azure.Future
11745}
11746
11747// Result returns the result of the asynchronous operation.
11748// If the operation has not completed it will return an error.
11749func (future *RouteTablesCreateOrUpdateFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
11750	var done bool
11751	done, err = future.Done(client)
11752	if err != nil {
11753		err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
11754		return
11755	}
11756	if !done {
11757		err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture")
11758		return
11759	}
11760	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11761	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
11762		rt, err = client.CreateOrUpdateResponder(rt.Response.Response)
11763		if err != nil {
11764			err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request")
11765		}
11766	}
11767	return
11768}
11769
11770// RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
11771type RouteTablesDeleteFuture struct {
11772	azure.Future
11773}
11774
11775// Result returns the result of the asynchronous operation.
11776// If the operation has not completed it will return an error.
11777func (future *RouteTablesDeleteFuture) Result(client RouteTablesClient) (ar autorest.Response, err error) {
11778	var done bool
11779	done, err = future.Done(client)
11780	if err != nil {
11781		err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
11782		return
11783	}
11784	if !done {
11785		err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture")
11786		return
11787	}
11788	ar.Response = future.Response()
11789	return
11790}
11791
11792// RouteTablesUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
11793// operation.
11794type RouteTablesUpdateTagsFuture struct {
11795	azure.Future
11796}
11797
11798// Result returns the result of the asynchronous operation.
11799// If the operation has not completed it will return an error.
11800func (future *RouteTablesUpdateTagsFuture) Result(client RouteTablesClient) (rt RouteTable, err error) {
11801	var done bool
11802	done, err = future.Done(client)
11803	if err != nil {
11804		err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", future.Response(), "Polling failure")
11805		return
11806	}
11807	if !done {
11808		err = azure.NewAsyncOpIncompleteError("network.RouteTablesUpdateTagsFuture")
11809		return
11810	}
11811	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
11812	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
11813		rt, err = client.UpdateTagsResponder(rt.Response.Response)
11814		if err != nil {
11815			err = autorest.NewErrorWithError(err, "network.RouteTablesUpdateTagsFuture", "Result", rt.Response.Response, "Failure responding to request")
11816		}
11817	}
11818	return
11819}
11820
11821// SecurityGroup networkSecurityGroup resource.
11822type SecurityGroup struct {
11823	autorest.Response `json:"-"`
11824	// SecurityGroupPropertiesFormat - Properties of the network security group
11825	*SecurityGroupPropertiesFormat `json:"properties,omitempty"`
11826	// Etag - A unique read-only string that changes whenever the resource is updated.
11827	Etag *string `json:"etag,omitempty"`
11828	// ID - Resource ID.
11829	ID *string `json:"id,omitempty"`
11830	// Name - Resource name.
11831	Name *string `json:"name,omitempty"`
11832	// Type - Resource type.
11833	Type *string `json:"type,omitempty"`
11834	// Location - Resource location.
11835	Location *string `json:"location,omitempty"`
11836	// Tags - Resource tags.
11837	Tags map[string]*string `json:"tags"`
11838}
11839
11840// MarshalJSON is the custom marshaler for SecurityGroup.
11841func (sg SecurityGroup) MarshalJSON() ([]byte, error) {
11842	objectMap := make(map[string]interface{})
11843	if sg.SecurityGroupPropertiesFormat != nil {
11844		objectMap["properties"] = sg.SecurityGroupPropertiesFormat
11845	}
11846	if sg.Etag != nil {
11847		objectMap["etag"] = sg.Etag
11848	}
11849	if sg.ID != nil {
11850		objectMap["id"] = sg.ID
11851	}
11852	if sg.Name != nil {
11853		objectMap["name"] = sg.Name
11854	}
11855	if sg.Type != nil {
11856		objectMap["type"] = sg.Type
11857	}
11858	if sg.Location != nil {
11859		objectMap["location"] = sg.Location
11860	}
11861	if sg.Tags != nil {
11862		objectMap["tags"] = sg.Tags
11863	}
11864	return json.Marshal(objectMap)
11865}
11866
11867// UnmarshalJSON is the custom unmarshaler for SecurityGroup struct.
11868func (sg *SecurityGroup) UnmarshalJSON(body []byte) error {
11869	var m map[string]*json.RawMessage
11870	err := json.Unmarshal(body, &m)
11871	if err != nil {
11872		return err
11873	}
11874	for k, v := range m {
11875		switch k {
11876		case "properties":
11877			if v != nil {
11878				var securityGroupPropertiesFormat SecurityGroupPropertiesFormat
11879				err = json.Unmarshal(*v, &securityGroupPropertiesFormat)
11880				if err != nil {
11881					return err
11882				}
11883				sg.SecurityGroupPropertiesFormat = &securityGroupPropertiesFormat
11884			}
11885		case "etag":
11886			if v != nil {
11887				var etag string
11888				err = json.Unmarshal(*v, &etag)
11889				if err != nil {
11890					return err
11891				}
11892				sg.Etag = &etag
11893			}
11894		case "id":
11895			if v != nil {
11896				var ID string
11897				err = json.Unmarshal(*v, &ID)
11898				if err != nil {
11899					return err
11900				}
11901				sg.ID = &ID
11902			}
11903		case "name":
11904			if v != nil {
11905				var name string
11906				err = json.Unmarshal(*v, &name)
11907				if err != nil {
11908					return err
11909				}
11910				sg.Name = &name
11911			}
11912		case "type":
11913			if v != nil {
11914				var typeVar string
11915				err = json.Unmarshal(*v, &typeVar)
11916				if err != nil {
11917					return err
11918				}
11919				sg.Type = &typeVar
11920			}
11921		case "location":
11922			if v != nil {
11923				var location string
11924				err = json.Unmarshal(*v, &location)
11925				if err != nil {
11926					return err
11927				}
11928				sg.Location = &location
11929			}
11930		case "tags":
11931			if v != nil {
11932				var tags map[string]*string
11933				err = json.Unmarshal(*v, &tags)
11934				if err != nil {
11935					return err
11936				}
11937				sg.Tags = tags
11938			}
11939		}
11940	}
11941
11942	return nil
11943}
11944
11945// SecurityGroupListResult response for ListNetworkSecurityGroups API service call.
11946type SecurityGroupListResult struct {
11947	autorest.Response `json:"-"`
11948	// Value - A list of NetworkSecurityGroup resources.
11949	Value *[]SecurityGroup `json:"value,omitempty"`
11950	// NextLink - The URL to get the next set of results.
11951	NextLink *string `json:"nextLink,omitempty"`
11952}
11953
11954// SecurityGroupListResultIterator provides access to a complete listing of SecurityGroup values.
11955type SecurityGroupListResultIterator struct {
11956	i    int
11957	page SecurityGroupListResultPage
11958}
11959
11960// Next advances to the next value.  If there was an error making
11961// the request the iterator does not advance and the error is returned.
11962func (iter *SecurityGroupListResultIterator) Next() error {
11963	iter.i++
11964	if iter.i < len(iter.page.Values()) {
11965		return nil
11966	}
11967	err := iter.page.Next()
11968	if err != nil {
11969		iter.i--
11970		return err
11971	}
11972	iter.i = 0
11973	return nil
11974}
11975
11976// NotDone returns true if the enumeration should be started or is not yet complete.
11977func (iter SecurityGroupListResultIterator) NotDone() bool {
11978	return iter.page.NotDone() && iter.i < len(iter.page.Values())
11979}
11980
11981// Response returns the raw server response from the last page request.
11982func (iter SecurityGroupListResultIterator) Response() SecurityGroupListResult {
11983	return iter.page.Response()
11984}
11985
11986// Value returns the current value or a zero-initialized value if the
11987// iterator has advanced beyond the end of the collection.
11988func (iter SecurityGroupListResultIterator) Value() SecurityGroup {
11989	if !iter.page.NotDone() {
11990		return SecurityGroup{}
11991	}
11992	return iter.page.Values()[iter.i]
11993}
11994
11995// IsEmpty returns true if the ListResult contains no values.
11996func (sglr SecurityGroupListResult) IsEmpty() bool {
11997	return sglr.Value == nil || len(*sglr.Value) == 0
11998}
11999
12000// securityGroupListResultPreparer prepares a request to retrieve the next set of results.
12001// It returns nil if no more results exist.
12002func (sglr SecurityGroupListResult) securityGroupListResultPreparer() (*http.Request, error) {
12003	if sglr.NextLink == nil || len(to.String(sglr.NextLink)) < 1 {
12004		return nil, nil
12005	}
12006	return autorest.Prepare(&http.Request{},
12007		autorest.AsJSON(),
12008		autorest.AsGet(),
12009		autorest.WithBaseURL(to.String(sglr.NextLink)))
12010}
12011
12012// SecurityGroupListResultPage contains a page of SecurityGroup values.
12013type SecurityGroupListResultPage struct {
12014	fn   func(SecurityGroupListResult) (SecurityGroupListResult, error)
12015	sglr SecurityGroupListResult
12016}
12017
12018// Next advances to the next page of values.  If there was an error making
12019// the request the page does not advance and the error is returned.
12020func (page *SecurityGroupListResultPage) Next() error {
12021	next, err := page.fn(page.sglr)
12022	if err != nil {
12023		return err
12024	}
12025	page.sglr = next
12026	return nil
12027}
12028
12029// NotDone returns true if the page enumeration should be started or is not yet complete.
12030func (page SecurityGroupListResultPage) NotDone() bool {
12031	return !page.sglr.IsEmpty()
12032}
12033
12034// Response returns the raw server response from the last page request.
12035func (page SecurityGroupListResultPage) Response() SecurityGroupListResult {
12036	return page.sglr
12037}
12038
12039// Values returns the slice of values for the current page or nil if there are no values.
12040func (page SecurityGroupListResultPage) Values() []SecurityGroup {
12041	if page.sglr.IsEmpty() {
12042		return nil
12043	}
12044	return *page.sglr.Value
12045}
12046
12047// SecurityGroupNetworkInterface network interface and all its associated security rules.
12048type SecurityGroupNetworkInterface struct {
12049	// ID - ID of the network interface.
12050	ID                       *string                   `json:"id,omitempty"`
12051	SecurityRuleAssociations *SecurityRuleAssociations `json:"securityRuleAssociations,omitempty"`
12052}
12053
12054// SecurityGroupPropertiesFormat network Security Group resource.
12055type SecurityGroupPropertiesFormat struct {
12056	// SecurityRules - A collection of security rules of the network security group.
12057	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
12058	// DefaultSecurityRules - The default security rules of network security group.
12059	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
12060	// NetworkInterfaces - A collection of references to network interfaces.
12061	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
12062	// Subnets - A collection of references to subnets.
12063	Subnets *[]Subnet `json:"subnets,omitempty"`
12064	// ResourceGUID - The resource GUID property of the network security group resource.
12065	ResourceGUID *string `json:"resourceGuid,omitempty"`
12066	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
12067	ProvisioningState *string `json:"provisioningState,omitempty"`
12068}
12069
12070// SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
12071// operation.
12072type SecurityGroupsCreateOrUpdateFuture struct {
12073	azure.Future
12074}
12075
12076// Result returns the result of the asynchronous operation.
12077// If the operation has not completed it will return an error.
12078func (future *SecurityGroupsCreateOrUpdateFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
12079	var done bool
12080	done, err = future.Done(client)
12081	if err != nil {
12082		err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12083		return
12084	}
12085	if !done {
12086		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture")
12087		return
12088	}
12089	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12090	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
12091		sg, err = client.CreateOrUpdateResponder(sg.Response.Response)
12092		if err != nil {
12093			err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request")
12094		}
12095	}
12096	return
12097}
12098
12099// SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
12100type SecurityGroupsDeleteFuture struct {
12101	azure.Future
12102}
12103
12104// Result returns the result of the asynchronous operation.
12105// If the operation has not completed it will return an error.
12106func (future *SecurityGroupsDeleteFuture) Result(client SecurityGroupsClient) (ar autorest.Response, err error) {
12107	var done bool
12108	done, err = future.Done(client)
12109	if err != nil {
12110		err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
12111		return
12112	}
12113	if !done {
12114		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture")
12115		return
12116	}
12117	ar.Response = future.Response()
12118	return
12119}
12120
12121// SecurityGroupsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
12122// operation.
12123type SecurityGroupsUpdateTagsFuture struct {
12124	azure.Future
12125}
12126
12127// Result returns the result of the asynchronous operation.
12128// If the operation has not completed it will return an error.
12129func (future *SecurityGroupsUpdateTagsFuture) Result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
12130	var done bool
12131	done, err = future.Done(client)
12132	if err != nil {
12133		err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
12134		return
12135	}
12136	if !done {
12137		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsUpdateTagsFuture")
12138		return
12139	}
12140	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12141	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
12142		sg, err = client.UpdateTagsResponder(sg.Response.Response)
12143		if err != nil {
12144			err = autorest.NewErrorWithError(err, "network.SecurityGroupsUpdateTagsFuture", "Result", sg.Response.Response, "Failure responding to request")
12145		}
12146	}
12147	return
12148}
12149
12150// SecurityGroupViewParameters parameters that define the VM to check security groups for.
12151type SecurityGroupViewParameters struct {
12152	// TargetResourceID - ID of the target VM.
12153	TargetResourceID *string `json:"targetResourceId,omitempty"`
12154}
12155
12156// SecurityGroupViewResult the information about security rules applied to the specified VM.
12157type SecurityGroupViewResult struct {
12158	autorest.Response `json:"-"`
12159	// NetworkInterfaces - List of network interfaces on the specified VM.
12160	NetworkInterfaces *[]SecurityGroupNetworkInterface `json:"networkInterfaces,omitempty"`
12161}
12162
12163// SecurityRule network security rule.
12164type SecurityRule struct {
12165	autorest.Response `json:"-"`
12166	// SecurityRulePropertiesFormat - Properties of the security rule
12167	*SecurityRulePropertiesFormat `json:"properties,omitempty"`
12168	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12169	Name *string `json:"name,omitempty"`
12170	// Etag - A unique read-only string that changes whenever the resource is updated.
12171	Etag *string `json:"etag,omitempty"`
12172	// ID - Resource ID.
12173	ID *string `json:"id,omitempty"`
12174}
12175
12176// MarshalJSON is the custom marshaler for SecurityRule.
12177func (sr SecurityRule) MarshalJSON() ([]byte, error) {
12178	objectMap := make(map[string]interface{})
12179	if sr.SecurityRulePropertiesFormat != nil {
12180		objectMap["properties"] = sr.SecurityRulePropertiesFormat
12181	}
12182	if sr.Name != nil {
12183		objectMap["name"] = sr.Name
12184	}
12185	if sr.Etag != nil {
12186		objectMap["etag"] = sr.Etag
12187	}
12188	if sr.ID != nil {
12189		objectMap["id"] = sr.ID
12190	}
12191	return json.Marshal(objectMap)
12192}
12193
12194// UnmarshalJSON is the custom unmarshaler for SecurityRule struct.
12195func (sr *SecurityRule) UnmarshalJSON(body []byte) error {
12196	var m map[string]*json.RawMessage
12197	err := json.Unmarshal(body, &m)
12198	if err != nil {
12199		return err
12200	}
12201	for k, v := range m {
12202		switch k {
12203		case "properties":
12204			if v != nil {
12205				var securityRulePropertiesFormat SecurityRulePropertiesFormat
12206				err = json.Unmarshal(*v, &securityRulePropertiesFormat)
12207				if err != nil {
12208					return err
12209				}
12210				sr.SecurityRulePropertiesFormat = &securityRulePropertiesFormat
12211			}
12212		case "name":
12213			if v != nil {
12214				var name string
12215				err = json.Unmarshal(*v, &name)
12216				if err != nil {
12217					return err
12218				}
12219				sr.Name = &name
12220			}
12221		case "etag":
12222			if v != nil {
12223				var etag string
12224				err = json.Unmarshal(*v, &etag)
12225				if err != nil {
12226					return err
12227				}
12228				sr.Etag = &etag
12229			}
12230		case "id":
12231			if v != nil {
12232				var ID string
12233				err = json.Unmarshal(*v, &ID)
12234				if err != nil {
12235					return err
12236				}
12237				sr.ID = &ID
12238			}
12239		}
12240	}
12241
12242	return nil
12243}
12244
12245// SecurityRuleAssociations all security rules associated with the network interface.
12246type SecurityRuleAssociations struct {
12247	NetworkInterfaceAssociation *InterfaceAssociation `json:"networkInterfaceAssociation,omitempty"`
12248	SubnetAssociation           *SubnetAssociation    `json:"subnetAssociation,omitempty"`
12249	// DefaultSecurityRules - Collection of default security rules of the network security group.
12250	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
12251	// EffectiveSecurityRules - Collection of effective security rules.
12252	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
12253}
12254
12255// SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that belongs
12256// to a network security group.
12257type SecurityRuleListResult struct {
12258	autorest.Response `json:"-"`
12259	// Value - The security rules in a network security group.
12260	Value *[]SecurityRule `json:"value,omitempty"`
12261	// NextLink - The URL to get the next set of results.
12262	NextLink *string `json:"nextLink,omitempty"`
12263}
12264
12265// SecurityRuleListResultIterator provides access to a complete listing of SecurityRule values.
12266type SecurityRuleListResultIterator struct {
12267	i    int
12268	page SecurityRuleListResultPage
12269}
12270
12271// Next advances to the next value.  If there was an error making
12272// the request the iterator does not advance and the error is returned.
12273func (iter *SecurityRuleListResultIterator) Next() error {
12274	iter.i++
12275	if iter.i < len(iter.page.Values()) {
12276		return nil
12277	}
12278	err := iter.page.Next()
12279	if err != nil {
12280		iter.i--
12281		return err
12282	}
12283	iter.i = 0
12284	return nil
12285}
12286
12287// NotDone returns true if the enumeration should be started or is not yet complete.
12288func (iter SecurityRuleListResultIterator) NotDone() bool {
12289	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12290}
12291
12292// Response returns the raw server response from the last page request.
12293func (iter SecurityRuleListResultIterator) Response() SecurityRuleListResult {
12294	return iter.page.Response()
12295}
12296
12297// Value returns the current value or a zero-initialized value if the
12298// iterator has advanced beyond the end of the collection.
12299func (iter SecurityRuleListResultIterator) Value() SecurityRule {
12300	if !iter.page.NotDone() {
12301		return SecurityRule{}
12302	}
12303	return iter.page.Values()[iter.i]
12304}
12305
12306// IsEmpty returns true if the ListResult contains no values.
12307func (srlr SecurityRuleListResult) IsEmpty() bool {
12308	return srlr.Value == nil || len(*srlr.Value) == 0
12309}
12310
12311// securityRuleListResultPreparer prepares a request to retrieve the next set of results.
12312// It returns nil if no more results exist.
12313func (srlr SecurityRuleListResult) securityRuleListResultPreparer() (*http.Request, error) {
12314	if srlr.NextLink == nil || len(to.String(srlr.NextLink)) < 1 {
12315		return nil, nil
12316	}
12317	return autorest.Prepare(&http.Request{},
12318		autorest.AsJSON(),
12319		autorest.AsGet(),
12320		autorest.WithBaseURL(to.String(srlr.NextLink)))
12321}
12322
12323// SecurityRuleListResultPage contains a page of SecurityRule values.
12324type SecurityRuleListResultPage struct {
12325	fn   func(SecurityRuleListResult) (SecurityRuleListResult, error)
12326	srlr SecurityRuleListResult
12327}
12328
12329// Next advances to the next page of values.  If there was an error making
12330// the request the page does not advance and the error is returned.
12331func (page *SecurityRuleListResultPage) Next() error {
12332	next, err := page.fn(page.srlr)
12333	if err != nil {
12334		return err
12335	}
12336	page.srlr = next
12337	return nil
12338}
12339
12340// NotDone returns true if the page enumeration should be started or is not yet complete.
12341func (page SecurityRuleListResultPage) NotDone() bool {
12342	return !page.srlr.IsEmpty()
12343}
12344
12345// Response returns the raw server response from the last page request.
12346func (page SecurityRuleListResultPage) Response() SecurityRuleListResult {
12347	return page.srlr
12348}
12349
12350// Values returns the slice of values for the current page or nil if there are no values.
12351func (page SecurityRuleListResultPage) Values() []SecurityRule {
12352	if page.srlr.IsEmpty() {
12353		return nil
12354	}
12355	return *page.srlr.Value
12356}
12357
12358// SecurityRulePropertiesFormat security rule resource.
12359type SecurityRulePropertiesFormat struct {
12360	// Description - A description for this rule. Restricted to 140 chars.
12361	Description *string `json:"description,omitempty"`
12362	// Protocol - Network protocol this rule applies to. Possible values are 'Tcp', 'Udp', and '*'. Possible values include: 'SecurityRuleProtocolTCP', 'SecurityRuleProtocolUDP', 'SecurityRuleProtocolAsterisk'
12363	Protocol SecurityRuleProtocol `json:"protocol,omitempty"`
12364	// SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterix '*' can also be used to match all ports.
12365	SourcePortRange *string `json:"sourcePortRange,omitempty"`
12366	// DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterix '*' can also be used to match all ports.
12367	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
12368	// SourceAddressPrefix - The CIDR or source IP range. Asterix '*' 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.
12369	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
12370	// SourceAddressPrefixes - The CIDR or source IP ranges.
12371	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
12372	// SourceApplicationSecurityGroups - The application security group specified as source.
12373	SourceApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"sourceApplicationSecurityGroups,omitempty"`
12374	// DestinationAddressPrefix - The destination address prefix. CIDR or destination IP range. Asterix '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used.
12375	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
12376	// DestinationAddressPrefixes - The destination address prefixes. CIDR or destination IP ranges.
12377	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
12378	// DestinationApplicationSecurityGroups - The application security group specified as destination.
12379	DestinationApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"destinationApplicationSecurityGroups,omitempty"`
12380	// SourcePortRanges - The source port ranges.
12381	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
12382	// DestinationPortRanges - The destination port ranges.
12383	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
12384	// Access - The network traffic is allowed or denied. Possible values are: 'Allow' and 'Deny'. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
12385	Access SecurityRuleAccess `json:"access,omitempty"`
12386	// 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.
12387	Priority *int32 `json:"priority,omitempty"`
12388	// Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outcoming traffic. Possible values are: 'Inbound' and 'Outbound'. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
12389	Direction SecurityRuleDirection `json:"direction,omitempty"`
12390	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
12391	ProvisioningState *string `json:"provisioningState,omitempty"`
12392}
12393
12394// SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
12395// operation.
12396type SecurityRulesCreateOrUpdateFuture struct {
12397	azure.Future
12398}
12399
12400// Result returns the result of the asynchronous operation.
12401// If the operation has not completed it will return an error.
12402func (future *SecurityRulesCreateOrUpdateFuture) Result(client SecurityRulesClient) (sr SecurityRule, err error) {
12403	var done bool
12404	done, err = future.Done(client)
12405	if err != nil {
12406		err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12407		return
12408	}
12409	if !done {
12410		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture")
12411		return
12412	}
12413	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12414	if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent {
12415		sr, err = client.CreateOrUpdateResponder(sr.Response.Response)
12416		if err != nil {
12417			err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request")
12418		}
12419	}
12420	return
12421}
12422
12423// SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
12424type SecurityRulesDeleteFuture struct {
12425	azure.Future
12426}
12427
12428// Result returns the result of the asynchronous operation.
12429// If the operation has not completed it will return an error.
12430func (future *SecurityRulesDeleteFuture) Result(client SecurityRulesClient) (ar autorest.Response, err error) {
12431	var done bool
12432	done, err = future.Done(client)
12433	if err != nil {
12434		err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure")
12435		return
12436	}
12437	if !done {
12438		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture")
12439		return
12440	}
12441	ar.Response = future.Response()
12442	return
12443}
12444
12445// ServiceEndpointPropertiesFormat the service endpoint properties.
12446type ServiceEndpointPropertiesFormat struct {
12447	// Service - The type of the endpoint service.
12448	Service *string `json:"service,omitempty"`
12449	// Locations - A list of locations.
12450	Locations *[]string `json:"locations,omitempty"`
12451	// ProvisioningState - The provisioning state of the resource.
12452	ProvisioningState *string `json:"provisioningState,omitempty"`
12453}
12454
12455// String ...
12456type String struct {
12457	autorest.Response `json:"-"`
12458	Value             *string `json:"value,omitempty"`
12459}
12460
12461// Subnet subnet in a virtual network resource.
12462type Subnet struct {
12463	autorest.Response `json:"-"`
12464	// SubnetPropertiesFormat - Properties of the subnet.
12465	*SubnetPropertiesFormat `json:"properties,omitempty"`
12466	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
12467	Name *string `json:"name,omitempty"`
12468	// Etag - A unique read-only string that changes whenever the resource is updated.
12469	Etag *string `json:"etag,omitempty"`
12470	// ID - Resource ID.
12471	ID *string `json:"id,omitempty"`
12472}
12473
12474// MarshalJSON is the custom marshaler for Subnet.
12475func (s Subnet) MarshalJSON() ([]byte, error) {
12476	objectMap := make(map[string]interface{})
12477	if s.SubnetPropertiesFormat != nil {
12478		objectMap["properties"] = s.SubnetPropertiesFormat
12479	}
12480	if s.Name != nil {
12481		objectMap["name"] = s.Name
12482	}
12483	if s.Etag != nil {
12484		objectMap["etag"] = s.Etag
12485	}
12486	if s.ID != nil {
12487		objectMap["id"] = s.ID
12488	}
12489	return json.Marshal(objectMap)
12490}
12491
12492// UnmarshalJSON is the custom unmarshaler for Subnet struct.
12493func (s *Subnet) UnmarshalJSON(body []byte) error {
12494	var m map[string]*json.RawMessage
12495	err := json.Unmarshal(body, &m)
12496	if err != nil {
12497		return err
12498	}
12499	for k, v := range m {
12500		switch k {
12501		case "properties":
12502			if v != nil {
12503				var subnetPropertiesFormat SubnetPropertiesFormat
12504				err = json.Unmarshal(*v, &subnetPropertiesFormat)
12505				if err != nil {
12506					return err
12507				}
12508				s.SubnetPropertiesFormat = &subnetPropertiesFormat
12509			}
12510		case "name":
12511			if v != nil {
12512				var name string
12513				err = json.Unmarshal(*v, &name)
12514				if err != nil {
12515					return err
12516				}
12517				s.Name = &name
12518			}
12519		case "etag":
12520			if v != nil {
12521				var etag string
12522				err = json.Unmarshal(*v, &etag)
12523				if err != nil {
12524					return err
12525				}
12526				s.Etag = &etag
12527			}
12528		case "id":
12529			if v != nil {
12530				var ID string
12531				err = json.Unmarshal(*v, &ID)
12532				if err != nil {
12533					return err
12534				}
12535				s.ID = &ID
12536			}
12537		}
12538	}
12539
12540	return nil
12541}
12542
12543// SubnetAssociation network interface and its custom security rules.
12544type SubnetAssociation struct {
12545	// ID - Subnet ID.
12546	ID *string `json:"id,omitempty"`
12547	// SecurityRules - Collection of custom security rules.
12548	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
12549}
12550
12551// SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual network
12552type SubnetListResult struct {
12553	autorest.Response `json:"-"`
12554	// Value - The subnets in a virtual network.
12555	Value *[]Subnet `json:"value,omitempty"`
12556	// NextLink - The URL to get the next set of results.
12557	NextLink *string `json:"nextLink,omitempty"`
12558}
12559
12560// SubnetListResultIterator provides access to a complete listing of Subnet values.
12561type SubnetListResultIterator struct {
12562	i    int
12563	page SubnetListResultPage
12564}
12565
12566// Next advances to the next value.  If there was an error making
12567// the request the iterator does not advance and the error is returned.
12568func (iter *SubnetListResultIterator) Next() error {
12569	iter.i++
12570	if iter.i < len(iter.page.Values()) {
12571		return nil
12572	}
12573	err := iter.page.Next()
12574	if err != nil {
12575		iter.i--
12576		return err
12577	}
12578	iter.i = 0
12579	return nil
12580}
12581
12582// NotDone returns true if the enumeration should be started or is not yet complete.
12583func (iter SubnetListResultIterator) NotDone() bool {
12584	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12585}
12586
12587// Response returns the raw server response from the last page request.
12588func (iter SubnetListResultIterator) Response() SubnetListResult {
12589	return iter.page.Response()
12590}
12591
12592// Value returns the current value or a zero-initialized value if the
12593// iterator has advanced beyond the end of the collection.
12594func (iter SubnetListResultIterator) Value() Subnet {
12595	if !iter.page.NotDone() {
12596		return Subnet{}
12597	}
12598	return iter.page.Values()[iter.i]
12599}
12600
12601// IsEmpty returns true if the ListResult contains no values.
12602func (slr SubnetListResult) IsEmpty() bool {
12603	return slr.Value == nil || len(*slr.Value) == 0
12604}
12605
12606// subnetListResultPreparer prepares a request to retrieve the next set of results.
12607// It returns nil if no more results exist.
12608func (slr SubnetListResult) subnetListResultPreparer() (*http.Request, error) {
12609	if slr.NextLink == nil || len(to.String(slr.NextLink)) < 1 {
12610		return nil, nil
12611	}
12612	return autorest.Prepare(&http.Request{},
12613		autorest.AsJSON(),
12614		autorest.AsGet(),
12615		autorest.WithBaseURL(to.String(slr.NextLink)))
12616}
12617
12618// SubnetListResultPage contains a page of Subnet values.
12619type SubnetListResultPage struct {
12620	fn  func(SubnetListResult) (SubnetListResult, error)
12621	slr SubnetListResult
12622}
12623
12624// Next advances to the next page of values.  If there was an error making
12625// the request the page does not advance and the error is returned.
12626func (page *SubnetListResultPage) Next() error {
12627	next, err := page.fn(page.slr)
12628	if err != nil {
12629		return err
12630	}
12631	page.slr = next
12632	return nil
12633}
12634
12635// NotDone returns true if the page enumeration should be started or is not yet complete.
12636func (page SubnetListResultPage) NotDone() bool {
12637	return !page.slr.IsEmpty()
12638}
12639
12640// Response returns the raw server response from the last page request.
12641func (page SubnetListResultPage) Response() SubnetListResult {
12642	return page.slr
12643}
12644
12645// Values returns the slice of values for the current page or nil if there are no values.
12646func (page SubnetListResultPage) Values() []Subnet {
12647	if page.slr.IsEmpty() {
12648		return nil
12649	}
12650	return *page.slr.Value
12651}
12652
12653// SubnetPropertiesFormat properties of the subnet.
12654type SubnetPropertiesFormat struct {
12655	// AddressPrefix - The address prefix for the subnet.
12656	AddressPrefix *string `json:"addressPrefix,omitempty"`
12657	// NetworkSecurityGroup - The reference of the NetworkSecurityGroup resource.
12658	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
12659	// RouteTable - The reference of the RouteTable resource.
12660	RouteTable *RouteTable `json:"routeTable,omitempty"`
12661	// ServiceEndpoints - An array of service endpoints.
12662	ServiceEndpoints *[]ServiceEndpointPropertiesFormat `json:"serviceEndpoints,omitempty"`
12663	// IPConfigurations - Gets an array of references to the network interface IP configurations using subnet.
12664	IPConfigurations *[]IPConfiguration `json:"ipConfigurations,omitempty"`
12665	// ResourceNavigationLinks - Gets an array of references to the external resources using subnet.
12666	ResourceNavigationLinks *[]ResourceNavigationLink `json:"resourceNavigationLinks,omitempty"`
12667	// ProvisioningState - The provisioning state of the resource.
12668	ProvisioningState *string `json:"provisioningState,omitempty"`
12669}
12670
12671// SubnetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
12672// operation.
12673type SubnetsCreateOrUpdateFuture struct {
12674	azure.Future
12675}
12676
12677// Result returns the result of the asynchronous operation.
12678// If the operation has not completed it will return an error.
12679func (future *SubnetsCreateOrUpdateFuture) Result(client SubnetsClient) (s Subnet, err error) {
12680	var done bool
12681	done, err = future.Done(client)
12682	if err != nil {
12683		err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
12684		return
12685	}
12686	if !done {
12687		err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture")
12688		return
12689	}
12690	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
12691	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
12692		s, err = client.CreateOrUpdateResponder(s.Response.Response)
12693		if err != nil {
12694			err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
12695		}
12696	}
12697	return
12698}
12699
12700// SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
12701type SubnetsDeleteFuture struct {
12702	azure.Future
12703}
12704
12705// Result returns the result of the asynchronous operation.
12706// If the operation has not completed it will return an error.
12707func (future *SubnetsDeleteFuture) Result(client SubnetsClient) (ar autorest.Response, err error) {
12708	var done bool
12709	done, err = future.Done(client)
12710	if err != nil {
12711		err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure")
12712		return
12713	}
12714	if !done {
12715		err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture")
12716		return
12717	}
12718	ar.Response = future.Response()
12719	return
12720}
12721
12722// SubResource reference to another subresource.
12723type SubResource struct {
12724	// ID - Resource ID.
12725	ID *string `json:"id,omitempty"`
12726}
12727
12728// TagsObject tags object for patch operations.
12729type TagsObject struct {
12730	// Tags - Resource tags.
12731	Tags map[string]*string `json:"tags"`
12732}
12733
12734// MarshalJSON is the custom marshaler for TagsObject.
12735func (toVar TagsObject) MarshalJSON() ([]byte, error) {
12736	objectMap := make(map[string]interface{})
12737	if toVar.Tags != nil {
12738		objectMap["tags"] = toVar.Tags
12739	}
12740	return json.Marshal(objectMap)
12741}
12742
12743// Topology topology of the specified resource group.
12744type Topology struct {
12745	autorest.Response `json:"-"`
12746	// ID - GUID representing the operation id.
12747	ID *string `json:"id,omitempty"`
12748	// CreatedDateTime - The datetime when the topology was initially created for the resource group.
12749	CreatedDateTime *date.Time `json:"createdDateTime,omitempty"`
12750	// LastModified - The datetime when the topology was last modified.
12751	LastModified *date.Time          `json:"lastModified,omitempty"`
12752	Resources    *[]TopologyResource `json:"resources,omitempty"`
12753}
12754
12755// TopologyAssociation resources that have an association with the parent resource.
12756type TopologyAssociation struct {
12757	// Name - The name of the resource that is associated with the parent resource.
12758	Name *string `json:"name,omitempty"`
12759	// ResourceID - The ID of the resource that is associated with the parent resource.
12760	ResourceID *string `json:"resourceId,omitempty"`
12761	// AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains'
12762	AssociationType AssociationType `json:"associationType,omitempty"`
12763}
12764
12765// TopologyParameters parameters that define the representation of topology.
12766type TopologyParameters struct {
12767	// TargetResourceGroupName - The name of the target resource group to perform topology on.
12768	TargetResourceGroupName *string `json:"targetResourceGroupName,omitempty"`
12769	// TargetVirtualNetwork - The reference of the Virtual Network resource.
12770	TargetVirtualNetwork *SubResource `json:"targetVirtualNetwork,omitempty"`
12771	// TargetSubnet - The reference of the Subnet resource.
12772	TargetSubnet *SubResource `json:"targetSubnet,omitempty"`
12773}
12774
12775// TopologyResource the network resource topology information for the given resource group.
12776type TopologyResource struct {
12777	// Name - Name of the resource.
12778	Name *string `json:"name,omitempty"`
12779	// ID - ID of the resource.
12780	ID *string `json:"id,omitempty"`
12781	// Location - Resource location.
12782	Location *string `json:"location,omitempty"`
12783	// Associations - Holds the associations the resource has with other resources in the resource group.
12784	Associations *[]TopologyAssociation `json:"associations,omitempty"`
12785}
12786
12787// TrafficAnalyticsConfigurationProperties parameters that define the configuration of traffic analytics.
12788type TrafficAnalyticsConfigurationProperties struct {
12789	// Enabled - Flag to enable/disable traffic analytics.
12790	Enabled *bool `json:"enabled,omitempty"`
12791	// WorkspaceID - The resource guid of the attached workspace
12792	WorkspaceID *string `json:"workspaceId,omitempty"`
12793	// WorkspaceRegion - The location of the attached workspace
12794	WorkspaceRegion *string `json:"workspaceRegion,omitempty"`
12795	// WorkspaceResourceID - Resource Id of the attached workspace
12796	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
12797}
12798
12799// TrafficAnalyticsProperties parameters that define the configuration of traffic analytics.
12800type TrafficAnalyticsProperties struct {
12801	NetworkWatcherFlowAnalyticsConfiguration *TrafficAnalyticsConfigurationProperties `json:"networkWatcherFlowAnalyticsConfiguration,omitempty"`
12802}
12803
12804// TroubleshootingDetails information gained from troubleshooting of specified resource.
12805type TroubleshootingDetails struct {
12806	// ID - The id of the get troubleshoot operation.
12807	ID *string `json:"id,omitempty"`
12808	// ReasonType - Reason type of failure.
12809	ReasonType *string `json:"reasonType,omitempty"`
12810	// Summary - A summary of troubleshooting.
12811	Summary *string `json:"summary,omitempty"`
12812	// Detail - Details on troubleshooting results.
12813	Detail *string `json:"detail,omitempty"`
12814	// RecommendedActions - List of recommended actions.
12815	RecommendedActions *[]TroubleshootingRecommendedActions `json:"recommendedActions,omitempty"`
12816}
12817
12818// TroubleshootingParameters parameters that define the resource to troubleshoot.
12819type TroubleshootingParameters struct {
12820	// TargetResourceID - The target resource to troubleshoot.
12821	TargetResourceID           *string `json:"targetResourceId,omitempty"`
12822	*TroubleshootingProperties `json:"properties,omitempty"`
12823}
12824
12825// MarshalJSON is the custom marshaler for TroubleshootingParameters.
12826func (tp TroubleshootingParameters) MarshalJSON() ([]byte, error) {
12827	objectMap := make(map[string]interface{})
12828	if tp.TargetResourceID != nil {
12829		objectMap["targetResourceId"] = tp.TargetResourceID
12830	}
12831	if tp.TroubleshootingProperties != nil {
12832		objectMap["properties"] = tp.TroubleshootingProperties
12833	}
12834	return json.Marshal(objectMap)
12835}
12836
12837// UnmarshalJSON is the custom unmarshaler for TroubleshootingParameters struct.
12838func (tp *TroubleshootingParameters) UnmarshalJSON(body []byte) error {
12839	var m map[string]*json.RawMessage
12840	err := json.Unmarshal(body, &m)
12841	if err != nil {
12842		return err
12843	}
12844	for k, v := range m {
12845		switch k {
12846		case "targetResourceId":
12847			if v != nil {
12848				var targetResourceID string
12849				err = json.Unmarshal(*v, &targetResourceID)
12850				if err != nil {
12851					return err
12852				}
12853				tp.TargetResourceID = &targetResourceID
12854			}
12855		case "properties":
12856			if v != nil {
12857				var troubleshootingProperties TroubleshootingProperties
12858				err = json.Unmarshal(*v, &troubleshootingProperties)
12859				if err != nil {
12860					return err
12861				}
12862				tp.TroubleshootingProperties = &troubleshootingProperties
12863			}
12864		}
12865	}
12866
12867	return nil
12868}
12869
12870// TroubleshootingProperties storage location provided for troubleshoot.
12871type TroubleshootingProperties struct {
12872	// StorageID - The ID for the storage account to save the troubleshoot result.
12873	StorageID *string `json:"storageId,omitempty"`
12874	// StoragePath - The path to the blob to save the troubleshoot result in.
12875	StoragePath *string `json:"storagePath,omitempty"`
12876}
12877
12878// TroubleshootingRecommendedActions recommended actions based on discovered issues.
12879type TroubleshootingRecommendedActions struct {
12880	// ActionID - ID of the recommended action.
12881	ActionID *string `json:"actionId,omitempty"`
12882	// ActionText - Description of recommended actions.
12883	ActionText *string `json:"actionText,omitempty"`
12884	// ActionURI - The uri linking to a documentation for the recommended troubleshooting actions.
12885	ActionURI *string `json:"actionUri,omitempty"`
12886	// ActionURIText - The information from the URI for the recommended troubleshooting actions.
12887	ActionURIText *string `json:"actionUriText,omitempty"`
12888}
12889
12890// TroubleshootingResult troubleshooting information gained from specified resource.
12891type TroubleshootingResult struct {
12892	autorest.Response `json:"-"`
12893	// StartTime - The start time of the troubleshooting.
12894	StartTime *date.Time `json:"startTime,omitempty"`
12895	// EndTime - The end time of the troubleshooting.
12896	EndTime *date.Time `json:"endTime,omitempty"`
12897	// Code - The result code of the troubleshooting.
12898	Code *string `json:"code,omitempty"`
12899	// Results - Information from troubleshooting.
12900	Results *[]TroubleshootingDetails `json:"results,omitempty"`
12901}
12902
12903// TunnelConnectionHealth virtualNetworkGatewayConnection properties
12904type TunnelConnectionHealth struct {
12905	// Tunnel - Tunnel name.
12906	Tunnel *string `json:"tunnel,omitempty"`
12907	// ConnectionStatus - Virtual network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
12908	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
12909	// IngressBytesTransferred - The Ingress Bytes Transferred in this connection
12910	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
12911	// EgressBytesTransferred - The Egress Bytes Transferred in this connection
12912	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
12913	// LastConnectionEstablishedUtcTime - The time at which connection was established in Utc format.
12914	LastConnectionEstablishedUtcTime *string `json:"lastConnectionEstablishedUtcTime,omitempty"`
12915}
12916
12917// Usage describes network resource usage.
12918type Usage struct {
12919	// ID - Resource identifier.
12920	ID *string `json:"id,omitempty"`
12921	// Unit - An enum describing the unit of measurement.
12922	Unit *string `json:"unit,omitempty"`
12923	// CurrentValue - The current value of the usage.
12924	CurrentValue *int64 `json:"currentValue,omitempty"`
12925	// Limit - The limit of usage.
12926	Limit *int64 `json:"limit,omitempty"`
12927	// Name - The name of the type of usage.
12928	Name *UsageName `json:"name,omitempty"`
12929}
12930
12931// UsageName the usage names.
12932type UsageName struct {
12933	// Value - A string describing the resource name.
12934	Value *string `json:"value,omitempty"`
12935	// LocalizedValue - A localized string describing the resource name.
12936	LocalizedValue *string `json:"localizedValue,omitempty"`
12937}
12938
12939// UsagesListResult the list usages operation response.
12940type UsagesListResult struct {
12941	autorest.Response `json:"-"`
12942	// Value - The list network resource usages.
12943	Value *[]Usage `json:"value,omitempty"`
12944	// NextLink - URL to get the next set of results.
12945	NextLink *string `json:"nextLink,omitempty"`
12946}
12947
12948// UsagesListResultIterator provides access to a complete listing of Usage values.
12949type UsagesListResultIterator struct {
12950	i    int
12951	page UsagesListResultPage
12952}
12953
12954// Next advances to the next value.  If there was an error making
12955// the request the iterator does not advance and the error is returned.
12956func (iter *UsagesListResultIterator) Next() error {
12957	iter.i++
12958	if iter.i < len(iter.page.Values()) {
12959		return nil
12960	}
12961	err := iter.page.Next()
12962	if err != nil {
12963		iter.i--
12964		return err
12965	}
12966	iter.i = 0
12967	return nil
12968}
12969
12970// NotDone returns true if the enumeration should be started or is not yet complete.
12971func (iter UsagesListResultIterator) NotDone() bool {
12972	return iter.page.NotDone() && iter.i < len(iter.page.Values())
12973}
12974
12975// Response returns the raw server response from the last page request.
12976func (iter UsagesListResultIterator) Response() UsagesListResult {
12977	return iter.page.Response()
12978}
12979
12980// Value returns the current value or a zero-initialized value if the
12981// iterator has advanced beyond the end of the collection.
12982func (iter UsagesListResultIterator) Value() Usage {
12983	if !iter.page.NotDone() {
12984		return Usage{}
12985	}
12986	return iter.page.Values()[iter.i]
12987}
12988
12989// IsEmpty returns true if the ListResult contains no values.
12990func (ulr UsagesListResult) IsEmpty() bool {
12991	return ulr.Value == nil || len(*ulr.Value) == 0
12992}
12993
12994// usagesListResultPreparer prepares a request to retrieve the next set of results.
12995// It returns nil if no more results exist.
12996func (ulr UsagesListResult) usagesListResultPreparer() (*http.Request, error) {
12997	if ulr.NextLink == nil || len(to.String(ulr.NextLink)) < 1 {
12998		return nil, nil
12999	}
13000	return autorest.Prepare(&http.Request{},
13001		autorest.AsJSON(),
13002		autorest.AsGet(),
13003		autorest.WithBaseURL(to.String(ulr.NextLink)))
13004}
13005
13006// UsagesListResultPage contains a page of Usage values.
13007type UsagesListResultPage struct {
13008	fn  func(UsagesListResult) (UsagesListResult, error)
13009	ulr UsagesListResult
13010}
13011
13012// Next advances to the next page of values.  If there was an error making
13013// the request the page does not advance and the error is returned.
13014func (page *UsagesListResultPage) Next() error {
13015	next, err := page.fn(page.ulr)
13016	if err != nil {
13017		return err
13018	}
13019	page.ulr = next
13020	return nil
13021}
13022
13023// NotDone returns true if the page enumeration should be started or is not yet complete.
13024func (page UsagesListResultPage) NotDone() bool {
13025	return !page.ulr.IsEmpty()
13026}
13027
13028// Response returns the raw server response from the last page request.
13029func (page UsagesListResultPage) Response() UsagesListResult {
13030	return page.ulr
13031}
13032
13033// Values returns the slice of values for the current page or nil if there are no values.
13034func (page UsagesListResultPage) Values() []Usage {
13035	if page.ulr.IsEmpty() {
13036		return nil
13037	}
13038	return *page.ulr.Value
13039}
13040
13041// VerificationIPFlowParameters parameters that define the IP flow to be verified.
13042type VerificationIPFlowParameters struct {
13043	// TargetResourceID - The ID of the target resource to perform next-hop on.
13044	TargetResourceID *string `json:"targetResourceId,omitempty"`
13045	// Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound'
13046	Direction Direction `json:"direction,omitempty"`
13047	// Protocol - Protocol to be verified on. Possible values include: 'ProtocolTCP', 'ProtocolUDP'
13048	Protocol Protocol `json:"protocol,omitempty"`
13049	// 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.
13050	LocalPort *string `json:"localPort,omitempty"`
13051	// 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.
13052	RemotePort *string `json:"remotePort,omitempty"`
13053	// LocalIPAddress - The local IP address. Acceptable values are valid IPv4 addresses.
13054	LocalIPAddress *string `json:"localIPAddress,omitempty"`
13055	// RemoteIPAddress - The remote IP address. Acceptable values are valid IPv4 addresses.
13056	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
13057	// 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).
13058	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
13059}
13060
13061// VerificationIPFlowResult results of IP flow verification on the target resource.
13062type VerificationIPFlowResult struct {
13063	autorest.Response `json:"-"`
13064	// Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny'
13065	Access Access `json:"access,omitempty"`
13066	// RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed.
13067	RuleName *string `json:"ruleName,omitempty"`
13068}
13069
13070// VirtualNetwork virtual Network resource.
13071type VirtualNetwork struct {
13072	autorest.Response `json:"-"`
13073	// VirtualNetworkPropertiesFormat - Properties of the virtual network.
13074	*VirtualNetworkPropertiesFormat `json:"properties,omitempty"`
13075	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
13076	Etag *string `json:"etag,omitempty"`
13077	// ID - Resource ID.
13078	ID *string `json:"id,omitempty"`
13079	// Name - Resource name.
13080	Name *string `json:"name,omitempty"`
13081	// Type - Resource type.
13082	Type *string `json:"type,omitempty"`
13083	// Location - Resource location.
13084	Location *string `json:"location,omitempty"`
13085	// Tags - Resource tags.
13086	Tags map[string]*string `json:"tags"`
13087}
13088
13089// MarshalJSON is the custom marshaler for VirtualNetwork.
13090func (vn VirtualNetwork) MarshalJSON() ([]byte, error) {
13091	objectMap := make(map[string]interface{})
13092	if vn.VirtualNetworkPropertiesFormat != nil {
13093		objectMap["properties"] = vn.VirtualNetworkPropertiesFormat
13094	}
13095	if vn.Etag != nil {
13096		objectMap["etag"] = vn.Etag
13097	}
13098	if vn.ID != nil {
13099		objectMap["id"] = vn.ID
13100	}
13101	if vn.Name != nil {
13102		objectMap["name"] = vn.Name
13103	}
13104	if vn.Type != nil {
13105		objectMap["type"] = vn.Type
13106	}
13107	if vn.Location != nil {
13108		objectMap["location"] = vn.Location
13109	}
13110	if vn.Tags != nil {
13111		objectMap["tags"] = vn.Tags
13112	}
13113	return json.Marshal(objectMap)
13114}
13115
13116// UnmarshalJSON is the custom unmarshaler for VirtualNetwork struct.
13117func (vn *VirtualNetwork) UnmarshalJSON(body []byte) error {
13118	var m map[string]*json.RawMessage
13119	err := json.Unmarshal(body, &m)
13120	if err != nil {
13121		return err
13122	}
13123	for k, v := range m {
13124		switch k {
13125		case "properties":
13126			if v != nil {
13127				var virtualNetworkPropertiesFormat VirtualNetworkPropertiesFormat
13128				err = json.Unmarshal(*v, &virtualNetworkPropertiesFormat)
13129				if err != nil {
13130					return err
13131				}
13132				vn.VirtualNetworkPropertiesFormat = &virtualNetworkPropertiesFormat
13133			}
13134		case "etag":
13135			if v != nil {
13136				var etag string
13137				err = json.Unmarshal(*v, &etag)
13138				if err != nil {
13139					return err
13140				}
13141				vn.Etag = &etag
13142			}
13143		case "id":
13144			if v != nil {
13145				var ID string
13146				err = json.Unmarshal(*v, &ID)
13147				if err != nil {
13148					return err
13149				}
13150				vn.ID = &ID
13151			}
13152		case "name":
13153			if v != nil {
13154				var name string
13155				err = json.Unmarshal(*v, &name)
13156				if err != nil {
13157					return err
13158				}
13159				vn.Name = &name
13160			}
13161		case "type":
13162			if v != nil {
13163				var typeVar string
13164				err = json.Unmarshal(*v, &typeVar)
13165				if err != nil {
13166					return err
13167				}
13168				vn.Type = &typeVar
13169			}
13170		case "location":
13171			if v != nil {
13172				var location string
13173				err = json.Unmarshal(*v, &location)
13174				if err != nil {
13175					return err
13176				}
13177				vn.Location = &location
13178			}
13179		case "tags":
13180			if v != nil {
13181				var tags map[string]*string
13182				err = json.Unmarshal(*v, &tags)
13183				if err != nil {
13184					return err
13185				}
13186				vn.Tags = tags
13187			}
13188		}
13189	}
13190
13191	return nil
13192}
13193
13194// VirtualNetworkConnectionGatewayReference a reference to VirtualNetworkGateway or LocalNetworkGateway resource.
13195type VirtualNetworkConnectionGatewayReference struct {
13196	// ID - The ID of VirtualNetworkGateway or LocalNetworkGateway resource.
13197	ID *string `json:"id,omitempty"`
13198}
13199
13200// VirtualNetworkGateway a common class for general resource information
13201type VirtualNetworkGateway struct {
13202	autorest.Response `json:"-"`
13203	// VirtualNetworkGatewayPropertiesFormat - Properties of the virtual network gateway.
13204	*VirtualNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
13205	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
13206	Etag *string `json:"etag,omitempty"`
13207	// ID - Resource ID.
13208	ID *string `json:"id,omitempty"`
13209	// Name - Resource name.
13210	Name *string `json:"name,omitempty"`
13211	// Type - Resource type.
13212	Type *string `json:"type,omitempty"`
13213	// Location - Resource location.
13214	Location *string `json:"location,omitempty"`
13215	// Tags - Resource tags.
13216	Tags map[string]*string `json:"tags"`
13217}
13218
13219// MarshalJSON is the custom marshaler for VirtualNetworkGateway.
13220func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) {
13221	objectMap := make(map[string]interface{})
13222	if vng.VirtualNetworkGatewayPropertiesFormat != nil {
13223		objectMap["properties"] = vng.VirtualNetworkGatewayPropertiesFormat
13224	}
13225	if vng.Etag != nil {
13226		objectMap["etag"] = vng.Etag
13227	}
13228	if vng.ID != nil {
13229		objectMap["id"] = vng.ID
13230	}
13231	if vng.Name != nil {
13232		objectMap["name"] = vng.Name
13233	}
13234	if vng.Type != nil {
13235		objectMap["type"] = vng.Type
13236	}
13237	if vng.Location != nil {
13238		objectMap["location"] = vng.Location
13239	}
13240	if vng.Tags != nil {
13241		objectMap["tags"] = vng.Tags
13242	}
13243	return json.Marshal(objectMap)
13244}
13245
13246// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGateway struct.
13247func (vng *VirtualNetworkGateway) UnmarshalJSON(body []byte) error {
13248	var m map[string]*json.RawMessage
13249	err := json.Unmarshal(body, &m)
13250	if err != nil {
13251		return err
13252	}
13253	for k, v := range m {
13254		switch k {
13255		case "properties":
13256			if v != nil {
13257				var virtualNetworkGatewayPropertiesFormat VirtualNetworkGatewayPropertiesFormat
13258				err = json.Unmarshal(*v, &virtualNetworkGatewayPropertiesFormat)
13259				if err != nil {
13260					return err
13261				}
13262				vng.VirtualNetworkGatewayPropertiesFormat = &virtualNetworkGatewayPropertiesFormat
13263			}
13264		case "etag":
13265			if v != nil {
13266				var etag string
13267				err = json.Unmarshal(*v, &etag)
13268				if err != nil {
13269					return err
13270				}
13271				vng.Etag = &etag
13272			}
13273		case "id":
13274			if v != nil {
13275				var ID string
13276				err = json.Unmarshal(*v, &ID)
13277				if err != nil {
13278					return err
13279				}
13280				vng.ID = &ID
13281			}
13282		case "name":
13283			if v != nil {
13284				var name string
13285				err = json.Unmarshal(*v, &name)
13286				if err != nil {
13287					return err
13288				}
13289				vng.Name = &name
13290			}
13291		case "type":
13292			if v != nil {
13293				var typeVar string
13294				err = json.Unmarshal(*v, &typeVar)
13295				if err != nil {
13296					return err
13297				}
13298				vng.Type = &typeVar
13299			}
13300		case "location":
13301			if v != nil {
13302				var location string
13303				err = json.Unmarshal(*v, &location)
13304				if err != nil {
13305					return err
13306				}
13307				vng.Location = &location
13308			}
13309		case "tags":
13310			if v != nil {
13311				var tags map[string]*string
13312				err = json.Unmarshal(*v, &tags)
13313				if err != nil {
13314					return err
13315				}
13316				vng.Tags = tags
13317			}
13318		}
13319	}
13320
13321	return nil
13322}
13323
13324// VirtualNetworkGatewayConnection a common class for general resource information
13325type VirtualNetworkGatewayConnection struct {
13326	autorest.Response `json:"-"`
13327	// VirtualNetworkGatewayConnectionPropertiesFormat - Properties of the virtual network gateway connection.
13328	*VirtualNetworkGatewayConnectionPropertiesFormat `json:"properties,omitempty"`
13329	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
13330	Etag *string `json:"etag,omitempty"`
13331	// ID - Resource ID.
13332	ID *string `json:"id,omitempty"`
13333	// Name - Resource name.
13334	Name *string `json:"name,omitempty"`
13335	// Type - Resource type.
13336	Type *string `json:"type,omitempty"`
13337	// Location - Resource location.
13338	Location *string `json:"location,omitempty"`
13339	// Tags - Resource tags.
13340	Tags map[string]*string `json:"tags"`
13341}
13342
13343// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnection.
13344func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) {
13345	objectMap := make(map[string]interface{})
13346	if vngc.VirtualNetworkGatewayConnectionPropertiesFormat != nil {
13347		objectMap["properties"] = vngc.VirtualNetworkGatewayConnectionPropertiesFormat
13348	}
13349	if vngc.Etag != nil {
13350		objectMap["etag"] = vngc.Etag
13351	}
13352	if vngc.ID != nil {
13353		objectMap["id"] = vngc.ID
13354	}
13355	if vngc.Name != nil {
13356		objectMap["name"] = vngc.Name
13357	}
13358	if vngc.Type != nil {
13359		objectMap["type"] = vngc.Type
13360	}
13361	if vngc.Location != nil {
13362		objectMap["location"] = vngc.Location
13363	}
13364	if vngc.Tags != nil {
13365		objectMap["tags"] = vngc.Tags
13366	}
13367	return json.Marshal(objectMap)
13368}
13369
13370// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnection struct.
13371func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error {
13372	var m map[string]*json.RawMessage
13373	err := json.Unmarshal(body, &m)
13374	if err != nil {
13375		return err
13376	}
13377	for k, v := range m {
13378		switch k {
13379		case "properties":
13380			if v != nil {
13381				var virtualNetworkGatewayConnectionPropertiesFormat VirtualNetworkGatewayConnectionPropertiesFormat
13382				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionPropertiesFormat)
13383				if err != nil {
13384					return err
13385				}
13386				vngc.VirtualNetworkGatewayConnectionPropertiesFormat = &virtualNetworkGatewayConnectionPropertiesFormat
13387			}
13388		case "etag":
13389			if v != nil {
13390				var etag string
13391				err = json.Unmarshal(*v, &etag)
13392				if err != nil {
13393					return err
13394				}
13395				vngc.Etag = &etag
13396			}
13397		case "id":
13398			if v != nil {
13399				var ID string
13400				err = json.Unmarshal(*v, &ID)
13401				if err != nil {
13402					return err
13403				}
13404				vngc.ID = &ID
13405			}
13406		case "name":
13407			if v != nil {
13408				var name string
13409				err = json.Unmarshal(*v, &name)
13410				if err != nil {
13411					return err
13412				}
13413				vngc.Name = &name
13414			}
13415		case "type":
13416			if v != nil {
13417				var typeVar string
13418				err = json.Unmarshal(*v, &typeVar)
13419				if err != nil {
13420					return err
13421				}
13422				vngc.Type = &typeVar
13423			}
13424		case "location":
13425			if v != nil {
13426				var location string
13427				err = json.Unmarshal(*v, &location)
13428				if err != nil {
13429					return err
13430				}
13431				vngc.Location = &location
13432			}
13433		case "tags":
13434			if v != nil {
13435				var tags map[string]*string
13436				err = json.Unmarshal(*v, &tags)
13437				if err != nil {
13438					return err
13439				}
13440				vngc.Tags = tags
13441			}
13442		}
13443	}
13444
13445	return nil
13446}
13447
13448// VirtualNetworkGatewayConnectionListEntity a common class for general resource information
13449type VirtualNetworkGatewayConnectionListEntity struct {
13450	autorest.Response `json:"-"`
13451	// VirtualNetworkGatewayConnectionListEntityPropertiesFormat - Properties of the virtual network gateway connection.
13452	*VirtualNetworkGatewayConnectionListEntityPropertiesFormat `json:"properties,omitempty"`
13453	// Etag - Gets a unique read-only string that changes whenever the resource is updated.
13454	Etag *string `json:"etag,omitempty"`
13455	// ID - Resource ID.
13456	ID *string `json:"id,omitempty"`
13457	// Name - Resource name.
13458	Name *string `json:"name,omitempty"`
13459	// Type - Resource type.
13460	Type *string `json:"type,omitempty"`
13461	// Location - Resource location.
13462	Location *string `json:"location,omitempty"`
13463	// Tags - Resource tags.
13464	Tags map[string]*string `json:"tags"`
13465}
13466
13467// MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntity.
13468func (vngcle VirtualNetworkGatewayConnectionListEntity) MarshalJSON() ([]byte, error) {
13469	objectMap := make(map[string]interface{})
13470	if vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat != nil {
13471		objectMap["properties"] = vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat
13472	}
13473	if vngcle.Etag != nil {
13474		objectMap["etag"] = vngcle.Etag
13475	}
13476	if vngcle.ID != nil {
13477		objectMap["id"] = vngcle.ID
13478	}
13479	if vngcle.Name != nil {
13480		objectMap["name"] = vngcle.Name
13481	}
13482	if vngcle.Type != nil {
13483		objectMap["type"] = vngcle.Type
13484	}
13485	if vngcle.Location != nil {
13486		objectMap["location"] = vngcle.Location
13487	}
13488	if vngcle.Tags != nil {
13489		objectMap["tags"] = vngcle.Tags
13490	}
13491	return json.Marshal(objectMap)
13492}
13493
13494// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnectionListEntity struct.
13495func (vngcle *VirtualNetworkGatewayConnectionListEntity) UnmarshalJSON(body []byte) error {
13496	var m map[string]*json.RawMessage
13497	err := json.Unmarshal(body, &m)
13498	if err != nil {
13499		return err
13500	}
13501	for k, v := range m {
13502		switch k {
13503		case "properties":
13504			if v != nil {
13505				var virtualNetworkGatewayConnectionListEntityPropertiesFormat VirtualNetworkGatewayConnectionListEntityPropertiesFormat
13506				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionListEntityPropertiesFormat)
13507				if err != nil {
13508					return err
13509				}
13510				vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat = &virtualNetworkGatewayConnectionListEntityPropertiesFormat
13511			}
13512		case "etag":
13513			if v != nil {
13514				var etag string
13515				err = json.Unmarshal(*v, &etag)
13516				if err != nil {
13517					return err
13518				}
13519				vngcle.Etag = &etag
13520			}
13521		case "id":
13522			if v != nil {
13523				var ID string
13524				err = json.Unmarshal(*v, &ID)
13525				if err != nil {
13526					return err
13527				}
13528				vngcle.ID = &ID
13529			}
13530		case "name":
13531			if v != nil {
13532				var name string
13533				err = json.Unmarshal(*v, &name)
13534				if err != nil {
13535					return err
13536				}
13537				vngcle.Name = &name
13538			}
13539		case "type":
13540			if v != nil {
13541				var typeVar string
13542				err = json.Unmarshal(*v, &typeVar)
13543				if err != nil {
13544					return err
13545				}
13546				vngcle.Type = &typeVar
13547			}
13548		case "location":
13549			if v != nil {
13550				var location string
13551				err = json.Unmarshal(*v, &location)
13552				if err != nil {
13553					return err
13554				}
13555				vngcle.Location = &location
13556			}
13557		case "tags":
13558			if v != nil {
13559				var tags map[string]*string
13560				err = json.Unmarshal(*v, &tags)
13561				if err != nil {
13562					return err
13563				}
13564				vngcle.Tags = tags
13565			}
13566		}
13567	}
13568
13569	return nil
13570}
13571
13572// VirtualNetworkGatewayConnectionListEntityPropertiesFormat virtualNetworkGatewayConnection properties
13573type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct {
13574	// AuthorizationKey - The authorizationKey.
13575	AuthorizationKey *string `json:"authorizationKey,omitempty"`
13576	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
13577	VirtualNetworkGateway1 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway1,omitempty"`
13578	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
13579	VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"`
13580	// LocalNetworkGateway2 - The reference to local network gateway resource.
13581	LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"`
13582	// ConnectionType - Gateway connection type. Possible values are: 'Ipsec','Vnet2Vnet','ExpressRoute', and 'VPNClient. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
13583	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
13584	// RoutingWeight - The routing weight.
13585	RoutingWeight *int32 `json:"routingWeight,omitempty"`
13586	// SharedKey - The IPSec shared key.
13587	SharedKey *string `json:"sharedKey,omitempty"`
13588	// ConnectionStatus - Virtual network Gateway connection status. Possible values are 'Unknown', 'Connecting', 'Connected' and 'NotConnected'. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
13589	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
13590	// TunnelConnectionStatus - Collection of all tunnels' connection health status.
13591	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
13592	// EgressBytesTransferred - The egress bytes transferred in this connection.
13593	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
13594	// IngressBytesTransferred - The ingress bytes transferred in this connection.
13595	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
13596	// Peer - The reference to peerings resource.
13597	Peer *SubResource `json:"peer,omitempty"`
13598	// EnableBgp - EnableBgp flag
13599	EnableBgp *bool `json:"enableBgp,omitempty"`
13600	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
13601	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
13602	// IpsecPolicies - The IPSec Policies to be considered by this connection.
13603	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
13604	// ResourceGUID - The resource GUID property of the VirtualNetworkGatewayConnection resource.
13605	ResourceGUID *string `json:"resourceGuid,omitempty"`
13606	// ProvisioningState - The provisioning state of the VirtualNetworkGatewayConnection resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13607	ProvisioningState *string `json:"provisioningState,omitempty"`
13608}
13609
13610// VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API service call
13611type VirtualNetworkGatewayConnectionListResult struct {
13612	autorest.Response `json:"-"`
13613	// Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group.
13614	Value *[]VirtualNetworkGatewayConnection `json:"value,omitempty"`
13615	// NextLink - The URL to get the next set of results.
13616	NextLink *string `json:"nextLink,omitempty"`
13617}
13618
13619// VirtualNetworkGatewayConnectionListResultIterator provides access to a complete listing of
13620// VirtualNetworkGatewayConnection values.
13621type VirtualNetworkGatewayConnectionListResultIterator struct {
13622	i    int
13623	page VirtualNetworkGatewayConnectionListResultPage
13624}
13625
13626// Next advances to the next value.  If there was an error making
13627// the request the iterator does not advance and the error is returned.
13628func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error {
13629	iter.i++
13630	if iter.i < len(iter.page.Values()) {
13631		return nil
13632	}
13633	err := iter.page.Next()
13634	if err != nil {
13635		iter.i--
13636		return err
13637	}
13638	iter.i = 0
13639	return nil
13640}
13641
13642// NotDone returns true if the enumeration should be started or is not yet complete.
13643func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool {
13644	return iter.page.NotDone() && iter.i < len(iter.page.Values())
13645}
13646
13647// Response returns the raw server response from the last page request.
13648func (iter VirtualNetworkGatewayConnectionListResultIterator) Response() VirtualNetworkGatewayConnectionListResult {
13649	return iter.page.Response()
13650}
13651
13652// Value returns the current value or a zero-initialized value if the
13653// iterator has advanced beyond the end of the collection.
13654func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNetworkGatewayConnection {
13655	if !iter.page.NotDone() {
13656		return VirtualNetworkGatewayConnection{}
13657	}
13658	return iter.page.Values()[iter.i]
13659}
13660
13661// IsEmpty returns true if the ListResult contains no values.
13662func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool {
13663	return vngclr.Value == nil || len(*vngclr.Value) == 0
13664}
13665
13666// virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results.
13667// It returns nil if no more results exist.
13668func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer() (*http.Request, error) {
13669	if vngclr.NextLink == nil || len(to.String(vngclr.NextLink)) < 1 {
13670		return nil, nil
13671	}
13672	return autorest.Prepare(&http.Request{},
13673		autorest.AsJSON(),
13674		autorest.AsGet(),
13675		autorest.WithBaseURL(to.String(vngclr.NextLink)))
13676}
13677
13678// VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values.
13679type VirtualNetworkGatewayConnectionListResultPage struct {
13680	fn     func(VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)
13681	vngclr VirtualNetworkGatewayConnectionListResult
13682}
13683
13684// Next advances to the next page of values.  If there was an error making
13685// the request the page does not advance and the error is returned.
13686func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error {
13687	next, err := page.fn(page.vngclr)
13688	if err != nil {
13689		return err
13690	}
13691	page.vngclr = next
13692	return nil
13693}
13694
13695// NotDone returns true if the page enumeration should be started or is not yet complete.
13696func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool {
13697	return !page.vngclr.IsEmpty()
13698}
13699
13700// Response returns the raw server response from the last page request.
13701func (page VirtualNetworkGatewayConnectionListResultPage) Response() VirtualNetworkGatewayConnectionListResult {
13702	return page.vngclr
13703}
13704
13705// Values returns the slice of values for the current page or nil if there are no values.
13706func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetworkGatewayConnection {
13707	if page.vngclr.IsEmpty() {
13708		return nil
13709	}
13710	return *page.vngclr.Value
13711}
13712
13713// VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties
13714type VirtualNetworkGatewayConnectionPropertiesFormat struct {
13715	// AuthorizationKey - The authorizationKey.
13716	AuthorizationKey *string `json:"authorizationKey,omitempty"`
13717	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
13718	VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"`
13719	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
13720	VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"`
13721	// LocalNetworkGateway2 - The reference to local network gateway resource.
13722	LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"`
13723	// ConnectionType - Gateway connection type. Possible values are: 'Ipsec','Vnet2Vnet','ExpressRoute', and 'VPNClient. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
13724	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
13725	// RoutingWeight - The routing weight.
13726	RoutingWeight *int32 `json:"routingWeight,omitempty"`
13727	// SharedKey - The IPSec shared key.
13728	SharedKey *string `json:"sharedKey,omitempty"`
13729	// ConnectionStatus - Virtual network Gateway connection status. Possible values are 'Unknown', 'Connecting', 'Connected' and 'NotConnected'. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
13730	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
13731	// TunnelConnectionStatus - Collection of all tunnels' connection health status.
13732	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
13733	// EgressBytesTransferred - The egress bytes transferred in this connection.
13734	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
13735	// IngressBytesTransferred - The ingress bytes transferred in this connection.
13736	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
13737	// Peer - The reference to peerings resource.
13738	Peer *SubResource `json:"peer,omitempty"`
13739	// EnableBgp - EnableBgp flag
13740	EnableBgp *bool `json:"enableBgp,omitempty"`
13741	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
13742	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
13743	// IpsecPolicies - The IPSec Policies to be considered by this connection.
13744	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
13745	// ResourceGUID - The resource GUID property of the VirtualNetworkGatewayConnection resource.
13746	ResourceGUID *string `json:"resourceGuid,omitempty"`
13747	// ProvisioningState - The provisioning state of the VirtualNetworkGatewayConnection resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13748	ProvisioningState *string `json:"provisioningState,omitempty"`
13749}
13750
13751// VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
13752// a long-running operation.
13753type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct {
13754	azure.Future
13755}
13756
13757// Result returns the result of the asynchronous operation.
13758// If the operation has not completed it will return an error.
13759func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
13760	var done bool
13761	done, err = future.Done(client)
13762	if err != nil {
13763		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
13764		return
13765	}
13766	if !done {
13767		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture")
13768		return
13769	}
13770	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13771	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
13772		vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response)
13773		if err != nil {
13774			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request")
13775		}
13776	}
13777	return
13778}
13779
13780// VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
13781// long-running operation.
13782type VirtualNetworkGatewayConnectionsDeleteFuture struct {
13783	azure.Future
13784}
13785
13786// Result returns the result of the asynchronous operation.
13787// If the operation has not completed it will return an error.
13788func (future *VirtualNetworkGatewayConnectionsDeleteFuture) Result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) {
13789	var done bool
13790	done, err = future.Done(client)
13791	if err != nil {
13792		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
13793		return
13794	}
13795	if !done {
13796		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture")
13797		return
13798	}
13799	ar.Response = future.Response()
13800	return
13801}
13802
13803// VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the results of
13804// a long-running operation.
13805type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct {
13806	azure.Future
13807}
13808
13809// Result returns the result of the asynchronous operation.
13810// If the operation has not completed it will return an error.
13811func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) {
13812	var done bool
13813	done, err = future.Done(client)
13814	if err != nil {
13815		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure")
13816		return
13817	}
13818	if !done {
13819		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture")
13820		return
13821	}
13822	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13823	if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent {
13824		crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response)
13825		if err != nil {
13826			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request")
13827		}
13828	}
13829	return
13830}
13831
13832// VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the results of a
13833// long-running operation.
13834type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct {
13835	azure.Future
13836}
13837
13838// Result returns the result of the asynchronous operation.
13839// If the operation has not completed it will return an error.
13840func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) Result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) {
13841	var done bool
13842	done, err = future.Done(client)
13843	if err != nil {
13844		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure")
13845		return
13846	}
13847	if !done {
13848		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture")
13849		return
13850	}
13851	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13852	if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent {
13853		csk, err = client.SetSharedKeyResponder(csk.Response.Response)
13854		if err != nil {
13855			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request")
13856		}
13857	}
13858	return
13859}
13860
13861// VirtualNetworkGatewayConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
13862// long-running operation.
13863type VirtualNetworkGatewayConnectionsUpdateTagsFuture struct {
13864	azure.Future
13865}
13866
13867// Result returns the result of the asynchronous operation.
13868// If the operation has not completed it will return an error.
13869func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) Result(client VirtualNetworkGatewayConnectionsClient) (vngcle VirtualNetworkGatewayConnectionListEntity, err error) {
13870	var done bool
13871	done, err = future.Done(client)
13872	if err != nil {
13873		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
13874		return
13875	}
13876	if !done {
13877		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsUpdateTagsFuture")
13878		return
13879	}
13880	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
13881	if vngcle.Response.Response, err = future.GetResult(sender); err == nil && vngcle.Response.Response.StatusCode != http.StatusNoContent {
13882		vngcle, err = client.UpdateTagsResponder(vngcle.Response.Response)
13883		if err != nil {
13884			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", vngcle.Response.Response, "Failure responding to request")
13885		}
13886	}
13887	return
13888}
13889
13890// VirtualNetworkGatewayIPConfiguration IP configuration for virtual network gateway
13891type VirtualNetworkGatewayIPConfiguration struct {
13892	// VirtualNetworkGatewayIPConfigurationPropertiesFormat - Properties of the virtual network gateway ip configuration.
13893	*VirtualNetworkGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
13894	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
13895	Name *string `json:"name,omitempty"`
13896	// Etag - A unique read-only string that changes whenever the resource is updated.
13897	Etag *string `json:"etag,omitempty"`
13898	// ID - Resource ID.
13899	ID *string `json:"id,omitempty"`
13900}
13901
13902// MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfiguration.
13903func (vngic VirtualNetworkGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
13904	objectMap := make(map[string]interface{})
13905	if vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat != nil {
13906		objectMap["properties"] = vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat
13907	}
13908	if vngic.Name != nil {
13909		objectMap["name"] = vngic.Name
13910	}
13911	if vngic.Etag != nil {
13912		objectMap["etag"] = vngic.Etag
13913	}
13914	if vngic.ID != nil {
13915		objectMap["id"] = vngic.ID
13916	}
13917	return json.Marshal(objectMap)
13918}
13919
13920// UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayIPConfiguration struct.
13921func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
13922	var m map[string]*json.RawMessage
13923	err := json.Unmarshal(body, &m)
13924	if err != nil {
13925		return err
13926	}
13927	for k, v := range m {
13928		switch k {
13929		case "properties":
13930			if v != nil {
13931				var virtualNetworkGatewayIPConfigurationPropertiesFormat VirtualNetworkGatewayIPConfigurationPropertiesFormat
13932				err = json.Unmarshal(*v, &virtualNetworkGatewayIPConfigurationPropertiesFormat)
13933				if err != nil {
13934					return err
13935				}
13936				vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat = &virtualNetworkGatewayIPConfigurationPropertiesFormat
13937			}
13938		case "name":
13939			if v != nil {
13940				var name string
13941				err = json.Unmarshal(*v, &name)
13942				if err != nil {
13943					return err
13944				}
13945				vngic.Name = &name
13946			}
13947		case "etag":
13948			if v != nil {
13949				var etag string
13950				err = json.Unmarshal(*v, &etag)
13951				if err != nil {
13952					return err
13953				}
13954				vngic.Etag = &etag
13955			}
13956		case "id":
13957			if v != nil {
13958				var ID string
13959				err = json.Unmarshal(*v, &ID)
13960				if err != nil {
13961					return err
13962				}
13963				vngic.ID = &ID
13964			}
13965		}
13966	}
13967
13968	return nil
13969}
13970
13971// VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration
13972type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct {
13973	// PrivateIPAllocationMethod - The private IP allocation method. Possible values are: 'Static' and 'Dynamic'. Possible values include: 'Static', 'Dynamic'
13974	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
13975	// Subnet - The reference of the subnet resource.
13976	Subnet *SubResource `json:"subnet,omitempty"`
13977	// PublicIPAddress - The reference of the public IP resource.
13978	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
13979	// ProvisioningState - The provisioning state of the public IP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
13980	ProvisioningState *string `json:"provisioningState,omitempty"`
13981}
13982
13983// VirtualNetworkGatewayListConnectionsResult response for the VirtualNetworkGatewayListConnections API service
13984// call
13985type VirtualNetworkGatewayListConnectionsResult struct {
13986	autorest.Response `json:"-"`
13987	// Value - Gets a list of VirtualNetworkGatewayConnection resources that exists in a resource group.
13988	Value *[]VirtualNetworkGatewayConnectionListEntity `json:"value,omitempty"`
13989	// NextLink - The URL to get the next set of results.
13990	NextLink *string `json:"nextLink,omitempty"`
13991}
13992
13993// VirtualNetworkGatewayListConnectionsResultIterator provides access to a complete listing of
13994// VirtualNetworkGatewayConnectionListEntity values.
13995type VirtualNetworkGatewayListConnectionsResultIterator struct {
13996	i    int
13997	page VirtualNetworkGatewayListConnectionsResultPage
13998}
13999
14000// Next advances to the next value.  If there was an error making
14001// the request the iterator does not advance and the error is returned.
14002func (iter *VirtualNetworkGatewayListConnectionsResultIterator) Next() error {
14003	iter.i++
14004	if iter.i < len(iter.page.Values()) {
14005		return nil
14006	}
14007	err := iter.page.Next()
14008	if err != nil {
14009		iter.i--
14010		return err
14011	}
14012	iter.i = 0
14013	return nil
14014}
14015
14016// NotDone returns true if the enumeration should be started or is not yet complete.
14017func (iter VirtualNetworkGatewayListConnectionsResultIterator) NotDone() bool {
14018	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14019}
14020
14021// Response returns the raw server response from the last page request.
14022func (iter VirtualNetworkGatewayListConnectionsResultIterator) Response() VirtualNetworkGatewayListConnectionsResult {
14023	return iter.page.Response()
14024}
14025
14026// Value returns the current value or a zero-initialized value if the
14027// iterator has advanced beyond the end of the collection.
14028func (iter VirtualNetworkGatewayListConnectionsResultIterator) Value() VirtualNetworkGatewayConnectionListEntity {
14029	if !iter.page.NotDone() {
14030		return VirtualNetworkGatewayConnectionListEntity{}
14031	}
14032	return iter.page.Values()[iter.i]
14033}
14034
14035// IsEmpty returns true if the ListResult contains no values.
14036func (vnglcr VirtualNetworkGatewayListConnectionsResult) IsEmpty() bool {
14037	return vnglcr.Value == nil || len(*vnglcr.Value) == 0
14038}
14039
14040// virtualNetworkGatewayListConnectionsResultPreparer prepares a request to retrieve the next set of results.
14041// It returns nil if no more results exist.
14042func (vnglcr VirtualNetworkGatewayListConnectionsResult) virtualNetworkGatewayListConnectionsResultPreparer() (*http.Request, error) {
14043	if vnglcr.NextLink == nil || len(to.String(vnglcr.NextLink)) < 1 {
14044		return nil, nil
14045	}
14046	return autorest.Prepare(&http.Request{},
14047		autorest.AsJSON(),
14048		autorest.AsGet(),
14049		autorest.WithBaseURL(to.String(vnglcr.NextLink)))
14050}
14051
14052// VirtualNetworkGatewayListConnectionsResultPage contains a page of VirtualNetworkGatewayConnectionListEntity
14053// values.
14054type VirtualNetworkGatewayListConnectionsResultPage struct {
14055	fn     func(VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)
14056	vnglcr VirtualNetworkGatewayListConnectionsResult
14057}
14058
14059// Next advances to the next page of values.  If there was an error making
14060// the request the page does not advance and the error is returned.
14061func (page *VirtualNetworkGatewayListConnectionsResultPage) Next() error {
14062	next, err := page.fn(page.vnglcr)
14063	if err != nil {
14064		return err
14065	}
14066	page.vnglcr = next
14067	return nil
14068}
14069
14070// NotDone returns true if the page enumeration should be started or is not yet complete.
14071func (page VirtualNetworkGatewayListConnectionsResultPage) NotDone() bool {
14072	return !page.vnglcr.IsEmpty()
14073}
14074
14075// Response returns the raw server response from the last page request.
14076func (page VirtualNetworkGatewayListConnectionsResultPage) Response() VirtualNetworkGatewayListConnectionsResult {
14077	return page.vnglcr
14078}
14079
14080// Values returns the slice of values for the current page or nil if there are no values.
14081func (page VirtualNetworkGatewayListConnectionsResultPage) Values() []VirtualNetworkGatewayConnectionListEntity {
14082	if page.vnglcr.IsEmpty() {
14083		return nil
14084	}
14085	return *page.vnglcr.Value
14086}
14087
14088// VirtualNetworkGatewayListResult response for the ListVirtualNetworkGateways API service call.
14089type VirtualNetworkGatewayListResult struct {
14090	autorest.Response `json:"-"`
14091	// Value - Gets a list of VirtualNetworkGateway resources that exists in a resource group.
14092	Value *[]VirtualNetworkGateway `json:"value,omitempty"`
14093	// NextLink - The URL to get the next set of results.
14094	NextLink *string `json:"nextLink,omitempty"`
14095}
14096
14097// VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway values.
14098type VirtualNetworkGatewayListResultIterator struct {
14099	i    int
14100	page VirtualNetworkGatewayListResultPage
14101}
14102
14103// Next advances to the next value.  If there was an error making
14104// the request the iterator does not advance and the error is returned.
14105func (iter *VirtualNetworkGatewayListResultIterator) Next() error {
14106	iter.i++
14107	if iter.i < len(iter.page.Values()) {
14108		return nil
14109	}
14110	err := iter.page.Next()
14111	if err != nil {
14112		iter.i--
14113		return err
14114	}
14115	iter.i = 0
14116	return nil
14117}
14118
14119// NotDone returns true if the enumeration should be started or is not yet complete.
14120func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool {
14121	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14122}
14123
14124// Response returns the raw server response from the last page request.
14125func (iter VirtualNetworkGatewayListResultIterator) Response() VirtualNetworkGatewayListResult {
14126	return iter.page.Response()
14127}
14128
14129// Value returns the current value or a zero-initialized value if the
14130// iterator has advanced beyond the end of the collection.
14131func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGateway {
14132	if !iter.page.NotDone() {
14133		return VirtualNetworkGateway{}
14134	}
14135	return iter.page.Values()[iter.i]
14136}
14137
14138// IsEmpty returns true if the ListResult contains no values.
14139func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool {
14140	return vnglr.Value == nil || len(*vnglr.Value) == 0
14141}
14142
14143// virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
14144// It returns nil if no more results exist.
14145func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer() (*http.Request, error) {
14146	if vnglr.NextLink == nil || len(to.String(vnglr.NextLink)) < 1 {
14147		return nil, nil
14148	}
14149	return autorest.Prepare(&http.Request{},
14150		autorest.AsJSON(),
14151		autorest.AsGet(),
14152		autorest.WithBaseURL(to.String(vnglr.NextLink)))
14153}
14154
14155// VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values.
14156type VirtualNetworkGatewayListResultPage struct {
14157	fn    func(VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)
14158	vnglr VirtualNetworkGatewayListResult
14159}
14160
14161// Next advances to the next page of values.  If there was an error making
14162// the request the page does not advance and the error is returned.
14163func (page *VirtualNetworkGatewayListResultPage) Next() error {
14164	next, err := page.fn(page.vnglr)
14165	if err != nil {
14166		return err
14167	}
14168	page.vnglr = next
14169	return nil
14170}
14171
14172// NotDone returns true if the page enumeration should be started or is not yet complete.
14173func (page VirtualNetworkGatewayListResultPage) NotDone() bool {
14174	return !page.vnglr.IsEmpty()
14175}
14176
14177// Response returns the raw server response from the last page request.
14178func (page VirtualNetworkGatewayListResultPage) Response() VirtualNetworkGatewayListResult {
14179	return page.vnglr
14180}
14181
14182// Values returns the slice of values for the current page or nil if there are no values.
14183func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway {
14184	if page.vnglr.IsEmpty() {
14185		return nil
14186	}
14187	return *page.vnglr.Value
14188}
14189
14190// VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties
14191type VirtualNetworkGatewayPropertiesFormat struct {
14192	// IPConfigurations - IP configurations for virtual network gateway.
14193	IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"`
14194	// GatewayType - The type of this virtual network gateway. Possible values are: 'Vpn' and 'ExpressRoute'. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute'
14195	GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"`
14196	// VpnType - The type of this virtual network gateway. Possible values are: 'PolicyBased' and 'RouteBased'. Possible values include: 'PolicyBased', 'RouteBased'
14197	VpnType VpnType `json:"vpnType,omitempty"`
14198	// EnableBgp - Whether BGP is enabled for this virtual network gateway or not.
14199	EnableBgp *bool `json:"enableBgp,omitempty"`
14200	// ActiveActive - ActiveActive flag
14201	ActiveActive *bool `json:"activeActive,omitempty"`
14202	// 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.
14203	GatewayDefaultSite *SubResource `json:"gatewayDefaultSite,omitempty"`
14204	// Sku - The reference of the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.
14205	Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"`
14206	// VpnClientConfiguration - The reference of the VpnClientConfiguration resource which represents the P2S VpnClient configurations.
14207	VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"`
14208	// BgpSettings - Virtual network gateway's BGP speaker settings.
14209	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
14210	// ResourceGUID - The resource GUID property of the VirtualNetworkGateway resource.
14211	ResourceGUID *string `json:"resourceGuid,omitempty"`
14212	// ProvisioningState - The provisioning state of the VirtualNetworkGateway resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14213	ProvisioningState *string `json:"provisioningState,omitempty"`
14214}
14215
14216// VirtualNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14217// long-running operation.
14218type VirtualNetworkGatewaysCreateOrUpdateFuture struct {
14219	azure.Future
14220}
14221
14222// Result returns the result of the asynchronous operation.
14223// If the operation has not completed it will return an error.
14224func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
14225	var done bool
14226	done, err = future.Done(client)
14227	if err != nil {
14228		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14229		return
14230	}
14231	if !done {
14232		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
14233		return
14234	}
14235	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14236	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
14237		vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
14238		if err != nil {
14239			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
14240		}
14241	}
14242	return
14243}
14244
14245// VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
14246// operation.
14247type VirtualNetworkGatewaysDeleteFuture struct {
14248	azure.Future
14249}
14250
14251// Result returns the result of the asynchronous operation.
14252// If the operation has not completed it will return an error.
14253func (future *VirtualNetworkGatewaysDeleteFuture) Result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
14254	var done bool
14255	done, err = future.Done(client)
14256	if err != nil {
14257		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
14258		return
14259	}
14260	if !done {
14261		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
14262		return
14263	}
14264	ar.Response = future.Response()
14265	return
14266}
14267
14268// VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the results of
14269// a long-running operation.
14270type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct {
14271	azure.Future
14272}
14273
14274// Result returns the result of the asynchronous operation.
14275// If the operation has not completed it will return an error.
14276func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
14277	var done bool
14278	done, err = future.Done(client)
14279	if err != nil {
14280		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
14281		return
14282	}
14283	if !done {
14284		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
14285		return
14286	}
14287	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14288	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
14289		s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
14290		if err != nil {
14291			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
14292		}
14293	}
14294	return
14295}
14296
14297// VirtualNetworkGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results of a
14298// long-running operation.
14299type VirtualNetworkGatewaysGenerateVpnProfileFuture struct {
14300	azure.Future
14301}
14302
14303// Result returns the result of the asynchronous operation.
14304// If the operation has not completed it will return an error.
14305func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
14306	var done bool
14307	done, err = future.Done(client)
14308	if err != nil {
14309		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
14310		return
14311	}
14312	if !done {
14313		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
14314		return
14315	}
14316	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14317	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
14318		s, err = client.GenerateVpnProfileResponder(s.Response.Response)
14319		if err != nil {
14320			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
14321		}
14322	}
14323	return
14324}
14325
14326// VirtualNetworkGatewaysGetAdvertisedRoutesFuture an abstraction for monitoring and retrieving the results of a
14327// long-running operation.
14328type VirtualNetworkGatewaysGetAdvertisedRoutesFuture struct {
14329	azure.Future
14330}
14331
14332// Result returns the result of the asynchronous operation.
14333// If the operation has not completed it will return an error.
14334func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
14335	var done bool
14336	done, err = future.Done(client)
14337	if err != nil {
14338		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
14339		return
14340	}
14341	if !done {
14342		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
14343		return
14344	}
14345	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14346	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
14347		grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
14348		if err != nil {
14349			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
14350		}
14351	}
14352	return
14353}
14354
14355// VirtualNetworkGatewaysGetBgpPeerStatusFuture an abstraction for monitoring and retrieving the results of a
14356// long-running operation.
14357type VirtualNetworkGatewaysGetBgpPeerStatusFuture struct {
14358	azure.Future
14359}
14360
14361// Result returns the result of the asynchronous operation.
14362// If the operation has not completed it will return an error.
14363func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) Result(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
14364	var done bool
14365	done, err = future.Done(client)
14366	if err != nil {
14367		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
14368		return
14369	}
14370	if !done {
14371		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
14372		return
14373	}
14374	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14375	if bpslr.Response.Response, err = future.GetResult(sender); err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
14376		bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
14377		if err != nil {
14378			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
14379		}
14380	}
14381	return
14382}
14383
14384// VirtualNetworkGatewaysGetLearnedRoutesFuture an abstraction for monitoring and retrieving the results of a
14385// long-running operation.
14386type VirtualNetworkGatewaysGetLearnedRoutesFuture struct {
14387	azure.Future
14388}
14389
14390// Result returns the result of the asynchronous operation.
14391// If the operation has not completed it will return an error.
14392func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) Result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
14393	var done bool
14394	done, err = future.Done(client)
14395	if err != nil {
14396		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
14397		return
14398	}
14399	if !done {
14400		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
14401		return
14402	}
14403	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14404	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
14405		grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
14406		if err != nil {
14407			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
14408		}
14409	}
14410	return
14411}
14412
14413// VirtualNetworkGatewaysGetVpnProfilePackageURLFuture an abstraction for monitoring and retrieving the results of
14414// a long-running operation.
14415type VirtualNetworkGatewaysGetVpnProfilePackageURLFuture struct {
14416	azure.Future
14417}
14418
14419// Result returns the result of the asynchronous operation.
14420// If the operation has not completed it will return an error.
14421func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) Result(client VirtualNetworkGatewaysClient) (s String, err error) {
14422	var done bool
14423	done, err = future.Done(client)
14424	if err != nil {
14425		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
14426		return
14427	}
14428	if !done {
14429		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
14430		return
14431	}
14432	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14433	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
14434		s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
14435		if err != nil {
14436			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
14437		}
14438	}
14439	return
14440}
14441
14442// VirtualNetworkGatewaySku virtualNetworkGatewaySku details
14443type VirtualNetworkGatewaySku struct {
14444	// Name - Gateway SKU name. Possible values include: 'VirtualNetworkGatewaySkuNameBasic', 'VirtualNetworkGatewaySkuNameHighPerformance', 'VirtualNetworkGatewaySkuNameStandard', 'VirtualNetworkGatewaySkuNameUltraPerformance', 'VirtualNetworkGatewaySkuNameVpnGw1', 'VirtualNetworkGatewaySkuNameVpnGw2', 'VirtualNetworkGatewaySkuNameVpnGw3'
14445	Name VirtualNetworkGatewaySkuName `json:"name,omitempty"`
14446	// Tier - Gateway SKU tier. Possible values include: 'VirtualNetworkGatewaySkuTierBasic', 'VirtualNetworkGatewaySkuTierHighPerformance', 'VirtualNetworkGatewaySkuTierStandard', 'VirtualNetworkGatewaySkuTierUltraPerformance', 'VirtualNetworkGatewaySkuTierVpnGw1', 'VirtualNetworkGatewaySkuTierVpnGw2', 'VirtualNetworkGatewaySkuTierVpnGw3'
14447	Tier VirtualNetworkGatewaySkuTier `json:"tier,omitempty"`
14448	// Capacity - The capacity.
14449	Capacity *int32 `json:"capacity,omitempty"`
14450}
14451
14452// VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a long-running
14453// operation.
14454type VirtualNetworkGatewaysResetFuture struct {
14455	azure.Future
14456}
14457
14458// Result returns the result of the asynchronous operation.
14459// If the operation has not completed it will return an error.
14460func (future *VirtualNetworkGatewaysResetFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
14461	var done bool
14462	done, err = future.Done(client)
14463	if err != nil {
14464		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
14465		return
14466	}
14467	if !done {
14468		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
14469		return
14470	}
14471	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14472	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
14473		vng, err = client.ResetResponder(vng.Response.Response)
14474		if err != nil {
14475			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
14476		}
14477	}
14478	return
14479}
14480
14481// VirtualNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
14482// long-running operation.
14483type VirtualNetworkGatewaysUpdateTagsFuture struct {
14484	azure.Future
14485}
14486
14487// Result returns the result of the asynchronous operation.
14488// If the operation has not completed it will return an error.
14489func (future *VirtualNetworkGatewaysUpdateTagsFuture) Result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
14490	var done bool
14491	done, err = future.Done(client)
14492	if err != nil {
14493		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
14494		return
14495	}
14496	if !done {
14497		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
14498		return
14499	}
14500	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14501	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
14502		vng, err = client.UpdateTagsResponder(vng.Response.Response)
14503		if err != nil {
14504			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
14505		}
14506	}
14507	return
14508}
14509
14510// VirtualNetworkListResult response for the ListVirtualNetworks API service call.
14511type VirtualNetworkListResult struct {
14512	autorest.Response `json:"-"`
14513	// Value - Gets a list of VirtualNetwork resources in a resource group.
14514	Value *[]VirtualNetwork `json:"value,omitempty"`
14515	// NextLink - The URL to get the next set of results.
14516	NextLink *string `json:"nextLink,omitempty"`
14517}
14518
14519// VirtualNetworkListResultIterator provides access to a complete listing of VirtualNetwork values.
14520type VirtualNetworkListResultIterator struct {
14521	i    int
14522	page VirtualNetworkListResultPage
14523}
14524
14525// Next advances to the next value.  If there was an error making
14526// the request the iterator does not advance and the error is returned.
14527func (iter *VirtualNetworkListResultIterator) Next() error {
14528	iter.i++
14529	if iter.i < len(iter.page.Values()) {
14530		return nil
14531	}
14532	err := iter.page.Next()
14533	if err != nil {
14534		iter.i--
14535		return err
14536	}
14537	iter.i = 0
14538	return nil
14539}
14540
14541// NotDone returns true if the enumeration should be started or is not yet complete.
14542func (iter VirtualNetworkListResultIterator) NotDone() bool {
14543	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14544}
14545
14546// Response returns the raw server response from the last page request.
14547func (iter VirtualNetworkListResultIterator) Response() VirtualNetworkListResult {
14548	return iter.page.Response()
14549}
14550
14551// Value returns the current value or a zero-initialized value if the
14552// iterator has advanced beyond the end of the collection.
14553func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork {
14554	if !iter.page.NotDone() {
14555		return VirtualNetwork{}
14556	}
14557	return iter.page.Values()[iter.i]
14558}
14559
14560// IsEmpty returns true if the ListResult contains no values.
14561func (vnlr VirtualNetworkListResult) IsEmpty() bool {
14562	return vnlr.Value == nil || len(*vnlr.Value) == 0
14563}
14564
14565// virtualNetworkListResultPreparer prepares a request to retrieve the next set of results.
14566// It returns nil if no more results exist.
14567func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer() (*http.Request, error) {
14568	if vnlr.NextLink == nil || len(to.String(vnlr.NextLink)) < 1 {
14569		return nil, nil
14570	}
14571	return autorest.Prepare(&http.Request{},
14572		autorest.AsJSON(),
14573		autorest.AsGet(),
14574		autorest.WithBaseURL(to.String(vnlr.NextLink)))
14575}
14576
14577// VirtualNetworkListResultPage contains a page of VirtualNetwork values.
14578type VirtualNetworkListResultPage struct {
14579	fn   func(VirtualNetworkListResult) (VirtualNetworkListResult, error)
14580	vnlr VirtualNetworkListResult
14581}
14582
14583// Next advances to the next page of values.  If there was an error making
14584// the request the page does not advance and the error is returned.
14585func (page *VirtualNetworkListResultPage) Next() error {
14586	next, err := page.fn(page.vnlr)
14587	if err != nil {
14588		return err
14589	}
14590	page.vnlr = next
14591	return nil
14592}
14593
14594// NotDone returns true if the page enumeration should be started or is not yet complete.
14595func (page VirtualNetworkListResultPage) NotDone() bool {
14596	return !page.vnlr.IsEmpty()
14597}
14598
14599// Response returns the raw server response from the last page request.
14600func (page VirtualNetworkListResultPage) Response() VirtualNetworkListResult {
14601	return page.vnlr
14602}
14603
14604// Values returns the slice of values for the current page or nil if there are no values.
14605func (page VirtualNetworkListResultPage) Values() []VirtualNetwork {
14606	if page.vnlr.IsEmpty() {
14607		return nil
14608	}
14609	return *page.vnlr.Value
14610}
14611
14612// VirtualNetworkListUsageResult response for the virtual networks GetUsage API service call.
14613type VirtualNetworkListUsageResult struct {
14614	autorest.Response `json:"-"`
14615	// Value - VirtualNetwork usage stats.
14616	Value *[]VirtualNetworkUsage `json:"value,omitempty"`
14617	// NextLink - The URL to get the next set of results.
14618	NextLink *string `json:"nextLink,omitempty"`
14619}
14620
14621// VirtualNetworkListUsageResultIterator provides access to a complete listing of VirtualNetworkUsage values.
14622type VirtualNetworkListUsageResultIterator struct {
14623	i    int
14624	page VirtualNetworkListUsageResultPage
14625}
14626
14627// Next advances to the next value.  If there was an error making
14628// the request the iterator does not advance and the error is returned.
14629func (iter *VirtualNetworkListUsageResultIterator) Next() error {
14630	iter.i++
14631	if iter.i < len(iter.page.Values()) {
14632		return nil
14633	}
14634	err := iter.page.Next()
14635	if err != nil {
14636		iter.i--
14637		return err
14638	}
14639	iter.i = 0
14640	return nil
14641}
14642
14643// NotDone returns true if the enumeration should be started or is not yet complete.
14644func (iter VirtualNetworkListUsageResultIterator) NotDone() bool {
14645	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14646}
14647
14648// Response returns the raw server response from the last page request.
14649func (iter VirtualNetworkListUsageResultIterator) Response() VirtualNetworkListUsageResult {
14650	return iter.page.Response()
14651}
14652
14653// Value returns the current value or a zero-initialized value if the
14654// iterator has advanced beyond the end of the collection.
14655func (iter VirtualNetworkListUsageResultIterator) Value() VirtualNetworkUsage {
14656	if !iter.page.NotDone() {
14657		return VirtualNetworkUsage{}
14658	}
14659	return iter.page.Values()[iter.i]
14660}
14661
14662// IsEmpty returns true if the ListResult contains no values.
14663func (vnlur VirtualNetworkListUsageResult) IsEmpty() bool {
14664	return vnlur.Value == nil || len(*vnlur.Value) == 0
14665}
14666
14667// virtualNetworkListUsageResultPreparer prepares a request to retrieve the next set of results.
14668// It returns nil if no more results exist.
14669func (vnlur VirtualNetworkListUsageResult) virtualNetworkListUsageResultPreparer() (*http.Request, error) {
14670	if vnlur.NextLink == nil || len(to.String(vnlur.NextLink)) < 1 {
14671		return nil, nil
14672	}
14673	return autorest.Prepare(&http.Request{},
14674		autorest.AsJSON(),
14675		autorest.AsGet(),
14676		autorest.WithBaseURL(to.String(vnlur.NextLink)))
14677}
14678
14679// VirtualNetworkListUsageResultPage contains a page of VirtualNetworkUsage values.
14680type VirtualNetworkListUsageResultPage struct {
14681	fn    func(VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)
14682	vnlur VirtualNetworkListUsageResult
14683}
14684
14685// Next 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 *VirtualNetworkListUsageResultPage) Next() error {
14688	next, err := page.fn(page.vnlur)
14689	if err != nil {
14690		return err
14691	}
14692	page.vnlur = next
14693	return nil
14694}
14695
14696// NotDone returns true if the page enumeration should be started or is not yet complete.
14697func (page VirtualNetworkListUsageResultPage) NotDone() bool {
14698	return !page.vnlur.IsEmpty()
14699}
14700
14701// Response returns the raw server response from the last page request.
14702func (page VirtualNetworkListUsageResultPage) Response() VirtualNetworkListUsageResult {
14703	return page.vnlur
14704}
14705
14706// Values returns the slice of values for the current page or nil if there are no values.
14707func (page VirtualNetworkListUsageResultPage) Values() []VirtualNetworkUsage {
14708	if page.vnlur.IsEmpty() {
14709		return nil
14710	}
14711	return *page.vnlur.Value
14712}
14713
14714// VirtualNetworkPeering peerings in a virtual network resource.
14715type VirtualNetworkPeering struct {
14716	autorest.Response `json:"-"`
14717	// VirtualNetworkPeeringPropertiesFormat - Properties of the virtual network peering.
14718	*VirtualNetworkPeeringPropertiesFormat `json:"properties,omitempty"`
14719	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
14720	Name *string `json:"name,omitempty"`
14721	// Etag - A unique read-only string that changes whenever the resource is updated.
14722	Etag *string `json:"etag,omitempty"`
14723	// ID - Resource ID.
14724	ID *string `json:"id,omitempty"`
14725}
14726
14727// MarshalJSON is the custom marshaler for VirtualNetworkPeering.
14728func (vnp VirtualNetworkPeering) MarshalJSON() ([]byte, error) {
14729	objectMap := make(map[string]interface{})
14730	if vnp.VirtualNetworkPeeringPropertiesFormat != nil {
14731		objectMap["properties"] = vnp.VirtualNetworkPeeringPropertiesFormat
14732	}
14733	if vnp.Name != nil {
14734		objectMap["name"] = vnp.Name
14735	}
14736	if vnp.Etag != nil {
14737		objectMap["etag"] = vnp.Etag
14738	}
14739	if vnp.ID != nil {
14740		objectMap["id"] = vnp.ID
14741	}
14742	return json.Marshal(objectMap)
14743}
14744
14745// UnmarshalJSON is the custom unmarshaler for VirtualNetworkPeering struct.
14746func (vnp *VirtualNetworkPeering) UnmarshalJSON(body []byte) error {
14747	var m map[string]*json.RawMessage
14748	err := json.Unmarshal(body, &m)
14749	if err != nil {
14750		return err
14751	}
14752	for k, v := range m {
14753		switch k {
14754		case "properties":
14755			if v != nil {
14756				var virtualNetworkPeeringPropertiesFormat VirtualNetworkPeeringPropertiesFormat
14757				err = json.Unmarshal(*v, &virtualNetworkPeeringPropertiesFormat)
14758				if err != nil {
14759					return err
14760				}
14761				vnp.VirtualNetworkPeeringPropertiesFormat = &virtualNetworkPeeringPropertiesFormat
14762			}
14763		case "name":
14764			if v != nil {
14765				var name string
14766				err = json.Unmarshal(*v, &name)
14767				if err != nil {
14768					return err
14769				}
14770				vnp.Name = &name
14771			}
14772		case "etag":
14773			if v != nil {
14774				var etag string
14775				err = json.Unmarshal(*v, &etag)
14776				if err != nil {
14777					return err
14778				}
14779				vnp.Etag = &etag
14780			}
14781		case "id":
14782			if v != nil {
14783				var ID string
14784				err = json.Unmarshal(*v, &ID)
14785				if err != nil {
14786					return err
14787				}
14788				vnp.ID = &ID
14789			}
14790		}
14791	}
14792
14793	return nil
14794}
14795
14796// VirtualNetworkPeeringListResult response for ListSubnets API service call. Retrieves all subnets that belong to
14797// a virtual network.
14798type VirtualNetworkPeeringListResult struct {
14799	autorest.Response `json:"-"`
14800	// Value - The peerings in a virtual network.
14801	Value *[]VirtualNetworkPeering `json:"value,omitempty"`
14802	// NextLink - The URL to get the next set of results.
14803	NextLink *string `json:"nextLink,omitempty"`
14804}
14805
14806// VirtualNetworkPeeringListResultIterator provides access to a complete listing of VirtualNetworkPeering values.
14807type VirtualNetworkPeeringListResultIterator struct {
14808	i    int
14809	page VirtualNetworkPeeringListResultPage
14810}
14811
14812// Next advances to the next value.  If there was an error making
14813// the request the iterator does not advance and the error is returned.
14814func (iter *VirtualNetworkPeeringListResultIterator) Next() error {
14815	iter.i++
14816	if iter.i < len(iter.page.Values()) {
14817		return nil
14818	}
14819	err := iter.page.Next()
14820	if err != nil {
14821		iter.i--
14822		return err
14823	}
14824	iter.i = 0
14825	return nil
14826}
14827
14828// NotDone returns true if the enumeration should be started or is not yet complete.
14829func (iter VirtualNetworkPeeringListResultIterator) NotDone() bool {
14830	return iter.page.NotDone() && iter.i < len(iter.page.Values())
14831}
14832
14833// Response returns the raw server response from the last page request.
14834func (iter VirtualNetworkPeeringListResultIterator) Response() VirtualNetworkPeeringListResult {
14835	return iter.page.Response()
14836}
14837
14838// Value returns the current value or a zero-initialized value if the
14839// iterator has advanced beyond the end of the collection.
14840func (iter VirtualNetworkPeeringListResultIterator) Value() VirtualNetworkPeering {
14841	if !iter.page.NotDone() {
14842		return VirtualNetworkPeering{}
14843	}
14844	return iter.page.Values()[iter.i]
14845}
14846
14847// IsEmpty returns true if the ListResult contains no values.
14848func (vnplr VirtualNetworkPeeringListResult) IsEmpty() bool {
14849	return vnplr.Value == nil || len(*vnplr.Value) == 0
14850}
14851
14852// virtualNetworkPeeringListResultPreparer prepares a request to retrieve the next set of results.
14853// It returns nil if no more results exist.
14854func (vnplr VirtualNetworkPeeringListResult) virtualNetworkPeeringListResultPreparer() (*http.Request, error) {
14855	if vnplr.NextLink == nil || len(to.String(vnplr.NextLink)) < 1 {
14856		return nil, nil
14857	}
14858	return autorest.Prepare(&http.Request{},
14859		autorest.AsJSON(),
14860		autorest.AsGet(),
14861		autorest.WithBaseURL(to.String(vnplr.NextLink)))
14862}
14863
14864// VirtualNetworkPeeringListResultPage contains a page of VirtualNetworkPeering values.
14865type VirtualNetworkPeeringListResultPage struct {
14866	fn    func(VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)
14867	vnplr VirtualNetworkPeeringListResult
14868}
14869
14870// Next advances to the next page of values.  If there was an error making
14871// the request the page does not advance and the error is returned.
14872func (page *VirtualNetworkPeeringListResultPage) Next() error {
14873	next, err := page.fn(page.vnplr)
14874	if err != nil {
14875		return err
14876	}
14877	page.vnplr = next
14878	return nil
14879}
14880
14881// NotDone returns true if the page enumeration should be started or is not yet complete.
14882func (page VirtualNetworkPeeringListResultPage) NotDone() bool {
14883	return !page.vnplr.IsEmpty()
14884}
14885
14886// Response returns the raw server response from the last page request.
14887func (page VirtualNetworkPeeringListResultPage) Response() VirtualNetworkPeeringListResult {
14888	return page.vnplr
14889}
14890
14891// Values returns the slice of values for the current page or nil if there are no values.
14892func (page VirtualNetworkPeeringListResultPage) Values() []VirtualNetworkPeering {
14893	if page.vnplr.IsEmpty() {
14894		return nil
14895	}
14896	return *page.vnplr.Value
14897}
14898
14899// VirtualNetworkPeeringPropertiesFormat properties of the virtual network peering.
14900type VirtualNetworkPeeringPropertiesFormat struct {
14901	// AllowVirtualNetworkAccess - Whether the VMs in the linked virtual network space would be able to access all the VMs in local Virtual network space.
14902	AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"`
14903	// AllowForwardedTraffic - Whether the forwarded traffic from the VMs in the remote virtual network will be allowed/disallowed.
14904	AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"`
14905	// AllowGatewayTransit - If gateway links can be used in remote virtual networking to link to this virtual network.
14906	AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"`
14907	// 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.
14908	UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"`
14909	// 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).
14910	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
14911	// RemoteAddressSpace - The reference of the remote virtual network address space.
14912	RemoteAddressSpace *AddressSpace `json:"remoteAddressSpace,omitempty"`
14913	// PeeringState - The status of the virtual network peering. Possible values are 'Initiated', 'Connected', and 'Disconnected'. Possible values include: 'Initiated', 'Connected', 'Disconnected'
14914	PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"`
14915	// ProvisioningState - The provisioning state of the resource.
14916	ProvisioningState *string `json:"provisioningState,omitempty"`
14917}
14918
14919// VirtualNetworkPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
14920// long-running operation.
14921type VirtualNetworkPeeringsCreateOrUpdateFuture struct {
14922	azure.Future
14923}
14924
14925// Result returns the result of the asynchronous operation.
14926// If the operation has not completed it will return an error.
14927func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) Result(client VirtualNetworkPeeringsClient) (vnp VirtualNetworkPeering, err error) {
14928	var done bool
14929	done, err = future.Done(client)
14930	if err != nil {
14931		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
14932		return
14933	}
14934	if !done {
14935		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsCreateOrUpdateFuture")
14936		return
14937	}
14938	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
14939	if vnp.Response.Response, err = future.GetResult(sender); err == nil && vnp.Response.Response.StatusCode != http.StatusNoContent {
14940		vnp, err = client.CreateOrUpdateResponder(vnp.Response.Response)
14941		if err != nil {
14942			err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", vnp.Response.Response, "Failure responding to request")
14943		}
14944	}
14945	return
14946}
14947
14948// VirtualNetworkPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
14949// operation.
14950type VirtualNetworkPeeringsDeleteFuture struct {
14951	azure.Future
14952}
14953
14954// Result returns the result of the asynchronous operation.
14955// If the operation has not completed it will return an error.
14956func (future *VirtualNetworkPeeringsDeleteFuture) Result(client VirtualNetworkPeeringsClient) (ar autorest.Response, err error) {
14957	var done bool
14958	done, err = future.Done(client)
14959	if err != nil {
14960		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
14961		return
14962	}
14963	if !done {
14964		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsDeleteFuture")
14965		return
14966	}
14967	ar.Response = future.Response()
14968	return
14969}
14970
14971// VirtualNetworkPropertiesFormat properties of the virtual network.
14972type VirtualNetworkPropertiesFormat struct {
14973	// AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
14974	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
14975	// DhcpOptions - The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.
14976	DhcpOptions *DhcpOptions `json:"dhcpOptions,omitempty"`
14977	// Subnets - A list of subnets in a Virtual Network.
14978	Subnets *[]Subnet `json:"subnets,omitempty"`
14979	// VirtualNetworkPeerings - A list of peerings in a Virtual Network.
14980	VirtualNetworkPeerings *[]VirtualNetworkPeering `json:"virtualNetworkPeerings,omitempty"`
14981	// ResourceGUID - The resourceGuid property of the Virtual Network resource.
14982	ResourceGUID *string `json:"resourceGuid,omitempty"`
14983	// ProvisioningState - The provisioning state of the PublicIP resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
14984	ProvisioningState *string `json:"provisioningState,omitempty"`
14985	// EnableDdosProtection - Indicates if DDoS protection is enabled for all the protected resources in a Virtual Network.
14986	EnableDdosProtection *bool `json:"enableDdosProtection,omitempty"`
14987	// EnableVMProtection - Indicates if Vm protection is enabled for all the subnets in a Virtual Network.
14988	EnableVMProtection *bool `json:"enableVmProtection,omitempty"`
14989}
14990
14991// VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
14992// operation.
14993type VirtualNetworksCreateOrUpdateFuture struct {
14994	azure.Future
14995}
14996
14997// Result returns the result of the asynchronous operation.
14998// If the operation has not completed it will return an error.
14999func (future *VirtualNetworksCreateOrUpdateFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
15000	var done bool
15001	done, err = future.Done(client)
15002	if err != nil {
15003		err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
15004		return
15005	}
15006	if !done {
15007		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture")
15008		return
15009	}
15010	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15011	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
15012		vn, err = client.CreateOrUpdateResponder(vn.Response.Response)
15013		if err != nil {
15014			err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request")
15015		}
15016	}
15017	return
15018}
15019
15020// VirtualNetworksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
15021// operation.
15022type VirtualNetworksDeleteFuture struct {
15023	azure.Future
15024}
15025
15026// Result returns the result of the asynchronous operation.
15027// If the operation has not completed it will return an error.
15028func (future *VirtualNetworksDeleteFuture) Result(client VirtualNetworksClient) (ar autorest.Response, err error) {
15029	var done bool
15030	done, err = future.Done(client)
15031	if err != nil {
15032		err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure")
15033		return
15034	}
15035	if !done {
15036		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture")
15037		return
15038	}
15039	ar.Response = future.Response()
15040	return
15041}
15042
15043// VirtualNetworksUpdateTagsFuture an abstraction for monitoring and retrieving the results of a long-running
15044// operation.
15045type VirtualNetworksUpdateTagsFuture struct {
15046	azure.Future
15047}
15048
15049// Result returns the result of the asynchronous operation.
15050// If the operation has not completed it will return an error.
15051func (future *VirtualNetworksUpdateTagsFuture) Result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
15052	var done bool
15053	done, err = future.Done(client)
15054	if err != nil {
15055		err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", future.Response(), "Polling failure")
15056		return
15057	}
15058	if !done {
15059		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksUpdateTagsFuture")
15060		return
15061	}
15062	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15063	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
15064		vn, err = client.UpdateTagsResponder(vn.Response.Response)
15065		if err != nil {
15066			err = autorest.NewErrorWithError(err, "network.VirtualNetworksUpdateTagsFuture", "Result", vn.Response.Response, "Failure responding to request")
15067		}
15068	}
15069	return
15070}
15071
15072// VirtualNetworkUsage usage details for subnet.
15073type VirtualNetworkUsage struct {
15074	// CurrentValue - Indicates number of IPs used from the Subnet.
15075	CurrentValue *float64 `json:"currentValue,omitempty"`
15076	// ID - Subnet identifier.
15077	ID *string `json:"id,omitempty"`
15078	// Limit - Indicates the size of the subnet.
15079	Limit *float64 `json:"limit,omitempty"`
15080	// Name - The name containing common and localized value for usage.
15081	Name *VirtualNetworkUsageName `json:"name,omitempty"`
15082	// Unit - Usage units. Returns 'Count'
15083	Unit *string `json:"unit,omitempty"`
15084}
15085
15086// VirtualNetworkUsageName usage strings container.
15087type VirtualNetworkUsageName struct {
15088	// LocalizedValue - Localized subnet size and usage string.
15089	LocalizedValue *string `json:"localizedValue,omitempty"`
15090	// Value - Subnet size and usage string.
15091	Value *string `json:"value,omitempty"`
15092}
15093
15094// VpnClientConfiguration vpnClientConfiguration for P2S client.
15095type VpnClientConfiguration struct {
15096	// VpnClientAddressPool - The reference of the address space resource which represents Address space for P2S VpnClient.
15097	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
15098	// VpnClientRootCertificates - VpnClientRootCertificate for virtual network gateway.
15099	VpnClientRootCertificates *[]VpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
15100	// VpnClientRevokedCertificates - VpnClientRevokedCertificate for Virtual network gateway.
15101	VpnClientRevokedCertificates *[]VpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
15102	// VpnClientProtocols - VpnClientProtocols for Virtual network gateway.
15103	VpnClientProtocols *[]VpnClientProtocol `json:"vpnClientProtocols,omitempty"`
15104	// RadiusServerAddress - The radius server address property of the VirtualNetworkGateway resource for vpn client connection.
15105	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
15106	// RadiusServerSecret - The radius secret property of the VirtualNetworkGateway resource for vpn client connection.
15107	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
15108}
15109
15110// VpnClientParameters vpn Client Parameters for package generation
15111type VpnClientParameters struct {
15112	// ProcessorArchitecture - VPN client Processor Architecture. Possible values are: 'AMD64' and 'X86'. Possible values include: 'Amd64', 'X86'
15113	ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"`
15114	// AuthenticationMethod - VPN client Authentication Method. Possible values are: 'EAPTLS' and 'EAPMSCHAPv2'. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
15115	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
15116	// 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.
15117	RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"`
15118	// ClientRootCertificates - A list of client root certificates public certificate data encoded as Base-64 strings. Optional parameter for external radius based authentication with EAPTLS.
15119	ClientRootCertificates *[]string `json:"clientRootCertificates,omitempty"`
15120}
15121
15122// VpnClientRevokedCertificate VPN client revoked certificate of virtual network gateway.
15123type VpnClientRevokedCertificate struct {
15124	// VpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
15125	*VpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
15126	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
15127	Name *string `json:"name,omitempty"`
15128	// Etag - A unique read-only string that changes whenever the resource is updated.
15129	Etag *string `json:"etag,omitempty"`
15130	// ID - Resource ID.
15131	ID *string `json:"id,omitempty"`
15132}
15133
15134// MarshalJSON is the custom marshaler for VpnClientRevokedCertificate.
15135func (vcrc VpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
15136	objectMap := make(map[string]interface{})
15137	if vcrc.VpnClientRevokedCertificatePropertiesFormat != nil {
15138		objectMap["properties"] = vcrc.VpnClientRevokedCertificatePropertiesFormat
15139	}
15140	if vcrc.Name != nil {
15141		objectMap["name"] = vcrc.Name
15142	}
15143	if vcrc.Etag != nil {
15144		objectMap["etag"] = vcrc.Etag
15145	}
15146	if vcrc.ID != nil {
15147		objectMap["id"] = vcrc.ID
15148	}
15149	return json.Marshal(objectMap)
15150}
15151
15152// UnmarshalJSON is the custom unmarshaler for VpnClientRevokedCertificate struct.
15153func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
15154	var m map[string]*json.RawMessage
15155	err := json.Unmarshal(body, &m)
15156	if err != nil {
15157		return err
15158	}
15159	for k, v := range m {
15160		switch k {
15161		case "properties":
15162			if v != nil {
15163				var vpnClientRevokedCertificatePropertiesFormat VpnClientRevokedCertificatePropertiesFormat
15164				err = json.Unmarshal(*v, &vpnClientRevokedCertificatePropertiesFormat)
15165				if err != nil {
15166					return err
15167				}
15168				vcrc.VpnClientRevokedCertificatePropertiesFormat = &vpnClientRevokedCertificatePropertiesFormat
15169			}
15170		case "name":
15171			if v != nil {
15172				var name string
15173				err = json.Unmarshal(*v, &name)
15174				if err != nil {
15175					return err
15176				}
15177				vcrc.Name = &name
15178			}
15179		case "etag":
15180			if v != nil {
15181				var etag string
15182				err = json.Unmarshal(*v, &etag)
15183				if err != nil {
15184					return err
15185				}
15186				vcrc.Etag = &etag
15187			}
15188		case "id":
15189			if v != nil {
15190				var ID string
15191				err = json.Unmarshal(*v, &ID)
15192				if err != nil {
15193					return err
15194				}
15195				vcrc.ID = &ID
15196			}
15197		}
15198	}
15199
15200	return nil
15201}
15202
15203// VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual network
15204// gateway.
15205type VpnClientRevokedCertificatePropertiesFormat struct {
15206	// Thumbprint - The revoked VPN client certificate thumbprint.
15207	Thumbprint *string `json:"thumbprint,omitempty"`
15208	// ProvisioningState - The provisioning state of the VPN client revoked certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
15209	ProvisioningState *string `json:"provisioningState,omitempty"`
15210}
15211
15212// VpnClientRootCertificate VPN client root certificate of virtual network gateway
15213type VpnClientRootCertificate struct {
15214	// VpnClientRootCertificatePropertiesFormat - Properties of the vpn client root certificate.
15215	*VpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
15216	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
15217	Name *string `json:"name,omitempty"`
15218	// Etag - A unique read-only string that changes whenever the resource is updated.
15219	Etag *string `json:"etag,omitempty"`
15220	// ID - Resource ID.
15221	ID *string `json:"id,omitempty"`
15222}
15223
15224// MarshalJSON is the custom marshaler for VpnClientRootCertificate.
15225func (vcrc VpnClientRootCertificate) MarshalJSON() ([]byte, error) {
15226	objectMap := make(map[string]interface{})
15227	if vcrc.VpnClientRootCertificatePropertiesFormat != nil {
15228		objectMap["properties"] = vcrc.VpnClientRootCertificatePropertiesFormat
15229	}
15230	if vcrc.Name != nil {
15231		objectMap["name"] = vcrc.Name
15232	}
15233	if vcrc.Etag != nil {
15234		objectMap["etag"] = vcrc.Etag
15235	}
15236	if vcrc.ID != nil {
15237		objectMap["id"] = vcrc.ID
15238	}
15239	return json.Marshal(objectMap)
15240}
15241
15242// UnmarshalJSON is the custom unmarshaler for VpnClientRootCertificate struct.
15243func (vcrc *VpnClientRootCertificate) UnmarshalJSON(body []byte) error {
15244	var m map[string]*json.RawMessage
15245	err := json.Unmarshal(body, &m)
15246	if err != nil {
15247		return err
15248	}
15249	for k, v := range m {
15250		switch k {
15251		case "properties":
15252			if v != nil {
15253				var vpnClientRootCertificatePropertiesFormat VpnClientRootCertificatePropertiesFormat
15254				err = json.Unmarshal(*v, &vpnClientRootCertificatePropertiesFormat)
15255				if err != nil {
15256					return err
15257				}
15258				vcrc.VpnClientRootCertificatePropertiesFormat = &vpnClientRootCertificatePropertiesFormat
15259			}
15260		case "name":
15261			if v != nil {
15262				var name string
15263				err = json.Unmarshal(*v, &name)
15264				if err != nil {
15265					return err
15266				}
15267				vcrc.Name = &name
15268			}
15269		case "etag":
15270			if v != nil {
15271				var etag string
15272				err = json.Unmarshal(*v, &etag)
15273				if err != nil {
15274					return err
15275				}
15276				vcrc.Etag = &etag
15277			}
15278		case "id":
15279			if v != nil {
15280				var ID string
15281				err = json.Unmarshal(*v, &ID)
15282				if err != nil {
15283					return err
15284				}
15285				vcrc.ID = &ID
15286			}
15287		}
15288	}
15289
15290	return nil
15291}
15292
15293// VpnClientRootCertificatePropertiesFormat properties of SSL certificates of application gateway
15294type VpnClientRootCertificatePropertiesFormat struct {
15295	// PublicCertData - The certificate public data.
15296	PublicCertData *string `json:"publicCertData,omitempty"`
15297	// ProvisioningState - The provisioning state of the VPN client root certificate resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
15298	ProvisioningState *string `json:"provisioningState,omitempty"`
15299}
15300
15301// VpnDeviceScriptParameters vpn device configuration script generation parameters
15302type VpnDeviceScriptParameters struct {
15303	// Vendor - The vendor for the vpn device.
15304	Vendor *string `json:"vendor,omitempty"`
15305	// DeviceFamily - The device family for the vpn device.
15306	DeviceFamily *string `json:"deviceFamily,omitempty"`
15307	// FirmwareVersion - The firmware version for the vpn device.
15308	FirmwareVersion *string `json:"firmwareVersion,omitempty"`
15309}
15310
15311// Watcher network watcher in a resource group.
15312type Watcher struct {
15313	autorest.Response        `json:"-"`
15314	Etag                     *string `json:"etag,omitempty"`
15315	*WatcherPropertiesFormat `json:"properties,omitempty"`
15316	// ID - Resource ID.
15317	ID *string `json:"id,omitempty"`
15318	// Name - Resource name.
15319	Name *string `json:"name,omitempty"`
15320	// Type - Resource type.
15321	Type *string `json:"type,omitempty"`
15322	// Location - Resource location.
15323	Location *string `json:"location,omitempty"`
15324	// Tags - Resource tags.
15325	Tags map[string]*string `json:"tags"`
15326}
15327
15328// MarshalJSON is the custom marshaler for Watcher.
15329func (w Watcher) MarshalJSON() ([]byte, error) {
15330	objectMap := make(map[string]interface{})
15331	if w.Etag != nil {
15332		objectMap["etag"] = w.Etag
15333	}
15334	if w.WatcherPropertiesFormat != nil {
15335		objectMap["properties"] = w.WatcherPropertiesFormat
15336	}
15337	if w.ID != nil {
15338		objectMap["id"] = w.ID
15339	}
15340	if w.Name != nil {
15341		objectMap["name"] = w.Name
15342	}
15343	if w.Type != nil {
15344		objectMap["type"] = w.Type
15345	}
15346	if w.Location != nil {
15347		objectMap["location"] = w.Location
15348	}
15349	if w.Tags != nil {
15350		objectMap["tags"] = w.Tags
15351	}
15352	return json.Marshal(objectMap)
15353}
15354
15355// UnmarshalJSON is the custom unmarshaler for Watcher struct.
15356func (w *Watcher) UnmarshalJSON(body []byte) error {
15357	var m map[string]*json.RawMessage
15358	err := json.Unmarshal(body, &m)
15359	if err != nil {
15360		return err
15361	}
15362	for k, v := range m {
15363		switch k {
15364		case "etag":
15365			if v != nil {
15366				var etag string
15367				err = json.Unmarshal(*v, &etag)
15368				if err != nil {
15369					return err
15370				}
15371				w.Etag = &etag
15372			}
15373		case "properties":
15374			if v != nil {
15375				var watcherPropertiesFormat WatcherPropertiesFormat
15376				err = json.Unmarshal(*v, &watcherPropertiesFormat)
15377				if err != nil {
15378					return err
15379				}
15380				w.WatcherPropertiesFormat = &watcherPropertiesFormat
15381			}
15382		case "id":
15383			if v != nil {
15384				var ID string
15385				err = json.Unmarshal(*v, &ID)
15386				if err != nil {
15387					return err
15388				}
15389				w.ID = &ID
15390			}
15391		case "name":
15392			if v != nil {
15393				var name string
15394				err = json.Unmarshal(*v, &name)
15395				if err != nil {
15396					return err
15397				}
15398				w.Name = &name
15399			}
15400		case "type":
15401			if v != nil {
15402				var typeVar string
15403				err = json.Unmarshal(*v, &typeVar)
15404				if err != nil {
15405					return err
15406				}
15407				w.Type = &typeVar
15408			}
15409		case "location":
15410			if v != nil {
15411				var location string
15412				err = json.Unmarshal(*v, &location)
15413				if err != nil {
15414					return err
15415				}
15416				w.Location = &location
15417			}
15418		case "tags":
15419			if v != nil {
15420				var tags map[string]*string
15421				err = json.Unmarshal(*v, &tags)
15422				if err != nil {
15423					return err
15424				}
15425				w.Tags = tags
15426			}
15427		}
15428	}
15429
15430	return nil
15431}
15432
15433// WatcherListResult list of network watcher resources.
15434type WatcherListResult struct {
15435	autorest.Response `json:"-"`
15436	Value             *[]Watcher `json:"value,omitempty"`
15437}
15438
15439// WatcherPropertiesFormat the network watcher properties.
15440type WatcherPropertiesFormat struct {
15441	// ProvisioningState - The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
15442	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
15443}
15444
15445// WatchersCheckConnectivityFuture an abstraction for monitoring and retrieving the results of a long-running
15446// operation.
15447type WatchersCheckConnectivityFuture struct {
15448	azure.Future
15449}
15450
15451// Result returns the result of the asynchronous operation.
15452// If the operation has not completed it will return an error.
15453func (future *WatchersCheckConnectivityFuture) Result(client WatchersClient) (ci ConnectivityInformation, err error) {
15454	var done bool
15455	done, err = future.Done(client)
15456	if err != nil {
15457		err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", future.Response(), "Polling failure")
15458		return
15459	}
15460	if !done {
15461		err = azure.NewAsyncOpIncompleteError("network.WatchersCheckConnectivityFuture")
15462		return
15463	}
15464	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15465	if ci.Response.Response, err = future.GetResult(sender); err == nil && ci.Response.Response.StatusCode != http.StatusNoContent {
15466		ci, err = client.CheckConnectivityResponder(ci.Response.Response)
15467		if err != nil {
15468			err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", ci.Response.Response, "Failure responding to request")
15469		}
15470	}
15471	return
15472}
15473
15474// WatchersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
15475type WatchersDeleteFuture struct {
15476	azure.Future
15477}
15478
15479// Result returns the result of the asynchronous operation.
15480// If the operation has not completed it will return an error.
15481func (future *WatchersDeleteFuture) Result(client WatchersClient) (ar autorest.Response, err error) {
15482	var done bool
15483	done, err = future.Done(client)
15484	if err != nil {
15485		err = autorest.NewErrorWithError(err, "network.WatchersDeleteFuture", "Result", future.Response(), "Polling failure")
15486		return
15487	}
15488	if !done {
15489		err = azure.NewAsyncOpIncompleteError("network.WatchersDeleteFuture")
15490		return
15491	}
15492	ar.Response = future.Response()
15493	return
15494}
15495
15496// WatchersGetAzureReachabilityReportFuture an abstraction for monitoring and retrieving the results of a
15497// long-running operation.
15498type WatchersGetAzureReachabilityReportFuture struct {
15499	azure.Future
15500}
15501
15502// Result returns the result of the asynchronous operation.
15503// If the operation has not completed it will return an error.
15504func (future *WatchersGetAzureReachabilityReportFuture) Result(client WatchersClient) (arr AzureReachabilityReport, err error) {
15505	var done bool
15506	done, err = future.Done(client)
15507	if err != nil {
15508		err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", future.Response(), "Polling failure")
15509		return
15510	}
15511	if !done {
15512		err = azure.NewAsyncOpIncompleteError("network.WatchersGetAzureReachabilityReportFuture")
15513		return
15514	}
15515	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15516	if arr.Response.Response, err = future.GetResult(sender); err == nil && arr.Response.Response.StatusCode != http.StatusNoContent {
15517		arr, err = client.GetAzureReachabilityReportResponder(arr.Response.Response)
15518		if err != nil {
15519			err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", arr.Response.Response, "Failure responding to request")
15520		}
15521	}
15522	return
15523}
15524
15525// WatchersGetFlowLogStatusFuture an abstraction for monitoring and retrieving the results of a long-running
15526// operation.
15527type WatchersGetFlowLogStatusFuture struct {
15528	azure.Future
15529}
15530
15531// Result returns the result of the asynchronous operation.
15532// If the operation has not completed it will return an error.
15533func (future *WatchersGetFlowLogStatusFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
15534	var done bool
15535	done, err = future.Done(client)
15536	if err != nil {
15537		err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", future.Response(), "Polling failure")
15538		return
15539	}
15540	if !done {
15541		err = azure.NewAsyncOpIncompleteError("network.WatchersGetFlowLogStatusFuture")
15542		return
15543	}
15544	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15545	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
15546		fli, err = client.GetFlowLogStatusResponder(fli.Response.Response)
15547		if err != nil {
15548			err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", fli.Response.Response, "Failure responding to request")
15549		}
15550	}
15551	return
15552}
15553
15554// WatchersGetNextHopFuture an abstraction for monitoring and retrieving the results of a long-running operation.
15555type WatchersGetNextHopFuture struct {
15556	azure.Future
15557}
15558
15559// Result returns the result of the asynchronous operation.
15560// If the operation has not completed it will return an error.
15561func (future *WatchersGetNextHopFuture) Result(client WatchersClient) (nhr NextHopResult, err error) {
15562	var done bool
15563	done, err = future.Done(client)
15564	if err != nil {
15565		err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", future.Response(), "Polling failure")
15566		return
15567	}
15568	if !done {
15569		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNextHopFuture")
15570		return
15571	}
15572	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15573	if nhr.Response.Response, err = future.GetResult(sender); err == nil && nhr.Response.Response.StatusCode != http.StatusNoContent {
15574		nhr, err = client.GetNextHopResponder(nhr.Response.Response)
15575		if err != nil {
15576			err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", nhr.Response.Response, "Failure responding to request")
15577		}
15578	}
15579	return
15580}
15581
15582// WatchersGetTroubleshootingFuture an abstraction for monitoring and retrieving the results of a long-running
15583// operation.
15584type WatchersGetTroubleshootingFuture struct {
15585	azure.Future
15586}
15587
15588// Result returns the result of the asynchronous operation.
15589// If the operation has not completed it will return an error.
15590func (future *WatchersGetTroubleshootingFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
15591	var done bool
15592	done, err = future.Done(client)
15593	if err != nil {
15594		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", future.Response(), "Polling failure")
15595		return
15596	}
15597	if !done {
15598		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingFuture")
15599		return
15600	}
15601	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15602	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
15603		tr, err = client.GetTroubleshootingResponder(tr.Response.Response)
15604		if err != nil {
15605			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", tr.Response.Response, "Failure responding to request")
15606		}
15607	}
15608	return
15609}
15610
15611// WatchersGetTroubleshootingResultFuture an abstraction for monitoring and retrieving the results of a
15612// long-running operation.
15613type WatchersGetTroubleshootingResultFuture struct {
15614	azure.Future
15615}
15616
15617// Result returns the result of the asynchronous operation.
15618// If the operation has not completed it will return an error.
15619func (future *WatchersGetTroubleshootingResultFuture) Result(client WatchersClient) (tr TroubleshootingResult, err error) {
15620	var done bool
15621	done, err = future.Done(client)
15622	if err != nil {
15623		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", future.Response(), "Polling failure")
15624		return
15625	}
15626	if !done {
15627		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingResultFuture")
15628		return
15629	}
15630	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15631	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
15632		tr, err = client.GetTroubleshootingResultResponder(tr.Response.Response)
15633		if err != nil {
15634			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", tr.Response.Response, "Failure responding to request")
15635		}
15636	}
15637	return
15638}
15639
15640// WatchersGetVMSecurityRulesFuture an abstraction for monitoring and retrieving the results of a long-running
15641// operation.
15642type WatchersGetVMSecurityRulesFuture struct {
15643	azure.Future
15644}
15645
15646// Result returns the result of the asynchronous operation.
15647// If the operation has not completed it will return an error.
15648func (future *WatchersGetVMSecurityRulesFuture) Result(client WatchersClient) (sgvr SecurityGroupViewResult, err error) {
15649	var done bool
15650	done, err = future.Done(client)
15651	if err != nil {
15652		err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", future.Response(), "Polling failure")
15653		return
15654	}
15655	if !done {
15656		err = azure.NewAsyncOpIncompleteError("network.WatchersGetVMSecurityRulesFuture")
15657		return
15658	}
15659	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15660	if sgvr.Response.Response, err = future.GetResult(sender); err == nil && sgvr.Response.Response.StatusCode != http.StatusNoContent {
15661		sgvr, err = client.GetVMSecurityRulesResponder(sgvr.Response.Response)
15662		if err != nil {
15663			err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", sgvr.Response.Response, "Failure responding to request")
15664		}
15665	}
15666	return
15667}
15668
15669// WatchersListAvailableProvidersFuture an abstraction for monitoring and retrieving the results of a long-running
15670// operation.
15671type WatchersListAvailableProvidersFuture struct {
15672	azure.Future
15673}
15674
15675// Result returns the result of the asynchronous operation.
15676// If the operation has not completed it will return an error.
15677func (future *WatchersListAvailableProvidersFuture) Result(client WatchersClient) (apl AvailableProvidersList, err error) {
15678	var done bool
15679	done, err = future.Done(client)
15680	if err != nil {
15681		err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", future.Response(), "Polling failure")
15682		return
15683	}
15684	if !done {
15685		err = azure.NewAsyncOpIncompleteError("network.WatchersListAvailableProvidersFuture")
15686		return
15687	}
15688	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15689	if apl.Response.Response, err = future.GetResult(sender); err == nil && apl.Response.Response.StatusCode != http.StatusNoContent {
15690		apl, err = client.ListAvailableProvidersResponder(apl.Response.Response)
15691		if err != nil {
15692			err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", apl.Response.Response, "Failure responding to request")
15693		}
15694	}
15695	return
15696}
15697
15698// WatchersSetFlowLogConfigurationFuture an abstraction for monitoring and retrieving the results of a long-running
15699// operation.
15700type WatchersSetFlowLogConfigurationFuture struct {
15701	azure.Future
15702}
15703
15704// Result returns the result of the asynchronous operation.
15705// If the operation has not completed it will return an error.
15706func (future *WatchersSetFlowLogConfigurationFuture) Result(client WatchersClient) (fli FlowLogInformation, err error) {
15707	var done bool
15708	done, err = future.Done(client)
15709	if err != nil {
15710		err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", future.Response(), "Polling failure")
15711		return
15712	}
15713	if !done {
15714		err = azure.NewAsyncOpIncompleteError("network.WatchersSetFlowLogConfigurationFuture")
15715		return
15716	}
15717	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15718	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
15719		fli, err = client.SetFlowLogConfigurationResponder(fli.Response.Response)
15720		if err != nil {
15721			err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", fli.Response.Response, "Failure responding to request")
15722		}
15723	}
15724	return
15725}
15726
15727// WatchersVerifyIPFlowFuture an abstraction for monitoring and retrieving the results of a long-running operation.
15728type WatchersVerifyIPFlowFuture struct {
15729	azure.Future
15730}
15731
15732// Result returns the result of the asynchronous operation.
15733// If the operation has not completed it will return an error.
15734func (future *WatchersVerifyIPFlowFuture) Result(client WatchersClient) (vifr VerificationIPFlowResult, err error) {
15735	var done bool
15736	done, err = future.Done(client)
15737	if err != nil {
15738		err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", future.Response(), "Polling failure")
15739		return
15740	}
15741	if !done {
15742		err = azure.NewAsyncOpIncompleteError("network.WatchersVerifyIPFlowFuture")
15743		return
15744	}
15745	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
15746	if vifr.Response.Response, err = future.GetResult(sender); err == nil && vifr.Response.Response.StatusCode != http.StatusNoContent {
15747		vifr, err = client.VerifyIPFlowResponder(vifr.Response.Response)
15748		if err != nil {
15749			err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", vifr.Response.Response, "Failure responding to request")
15750		}
15751	}
15752	return
15753}
15754