...

Source file src/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2020-04-01/network/models.go

Documentation: github.com/Azure/azure-sdk-for-go/services/network/mgmt/2020-04-01/network

     1  package network
     2  
     3  // Copyright (c) Microsoft Corporation. All rights reserved.
     4  // Licensed under the MIT License. See License.txt in the project root for license information.
     5  //
     6  // Code generated by Microsoft (R) AutoRest Code Generator.
     7  // Changes may cause incorrect behavior and will be lost if the code is regenerated.
     8  
     9  import (
    10  	"context"
    11  	"encoding/json"
    12  	"github.com/Azure/go-autorest/autorest"
    13  	"github.com/Azure/go-autorest/autorest/azure"
    14  	"github.com/Azure/go-autorest/autorest/date"
    15  	"github.com/Azure/go-autorest/autorest/to"
    16  	"github.com/Azure/go-autorest/tracing"
    17  	"net/http"
    18  )
    19  
    20  // The package's fully qualified name.
    21  const fqdn = "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2020-04-01/network"
    22  
    23  // AadAuthenticationParameters AAD Vpn authentication type related parameters.
    24  type AadAuthenticationParameters struct {
    25  	// AadTenant - AAD Vpn authentication parameter AAD tenant.
    26  	AadTenant *string `json:"aadTenant,omitempty"`
    27  	// AadAudience - AAD Vpn authentication parameter AAD audience.
    28  	AadAudience *string `json:"aadAudience,omitempty"`
    29  	// AadIssuer - AAD Vpn authentication parameter AAD issuer.
    30  	AadIssuer *string `json:"aadIssuer,omitempty"`
    31  }
    32  
    33  // AddressSpace addressSpace contains an array of IP address ranges that can be used by subnets of the
    34  // virtual network.
    35  type AddressSpace struct {
    36  	// AddressPrefixes - A list of address blocks reserved for this virtual network in CIDR notation.
    37  	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
    38  }
    39  
    40  // ApplicationGateway application gateway resource.
    41  type ApplicationGateway struct {
    42  	autorest.Response `json:"-"`
    43  	// ApplicationGatewayPropertiesFormat - Properties of the application gateway.
    44  	*ApplicationGatewayPropertiesFormat `json:"properties,omitempty"`
    45  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
    46  	Etag *string `json:"etag,omitempty"`
    47  	// Zones - A list of availability zones denoting where the resource needs to come from.
    48  	Zones *[]string `json:"zones,omitempty"`
    49  	// Identity - The identity of the application gateway, if configured.
    50  	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
    51  	// ID - Resource ID.
    52  	ID *string `json:"id,omitempty"`
    53  	// Name - READ-ONLY; Resource name.
    54  	Name *string `json:"name,omitempty"`
    55  	// Type - READ-ONLY; Resource type.
    56  	Type *string `json:"type,omitempty"`
    57  	// Location - Resource location.
    58  	Location *string `json:"location,omitempty"`
    59  	// Tags - Resource tags.
    60  	Tags map[string]*string `json:"tags"`
    61  }
    62  
    63  // MarshalJSON is the custom marshaler for ApplicationGateway.
    64  func (ag ApplicationGateway) MarshalJSON() ([]byte, error) {
    65  	objectMap := make(map[string]interface{})
    66  	if ag.ApplicationGatewayPropertiesFormat != nil {
    67  		objectMap["properties"] = ag.ApplicationGatewayPropertiesFormat
    68  	}
    69  	if ag.Zones != nil {
    70  		objectMap["zones"] = ag.Zones
    71  	}
    72  	if ag.Identity != nil {
    73  		objectMap["identity"] = ag.Identity
    74  	}
    75  	if ag.ID != nil {
    76  		objectMap["id"] = ag.ID
    77  	}
    78  	if ag.Location != nil {
    79  		objectMap["location"] = ag.Location
    80  	}
    81  	if ag.Tags != nil {
    82  		objectMap["tags"] = ag.Tags
    83  	}
    84  	return json.Marshal(objectMap)
    85  }
    86  
    87  // UnmarshalJSON is the custom unmarshaler for ApplicationGateway struct.
    88  func (ag *ApplicationGateway) UnmarshalJSON(body []byte) error {
    89  	var m map[string]*json.RawMessage
    90  	err := json.Unmarshal(body, &m)
    91  	if err != nil {
    92  		return err
    93  	}
    94  	for k, v := range m {
    95  		switch k {
    96  		case "properties":
    97  			if v != nil {
    98  				var applicationGatewayPropertiesFormat ApplicationGatewayPropertiesFormat
    99  				err = json.Unmarshal(*v, &applicationGatewayPropertiesFormat)
   100  				if err != nil {
   101  					return err
   102  				}
   103  				ag.ApplicationGatewayPropertiesFormat = &applicationGatewayPropertiesFormat
   104  			}
   105  		case "etag":
   106  			if v != nil {
   107  				var etag string
   108  				err = json.Unmarshal(*v, &etag)
   109  				if err != nil {
   110  					return err
   111  				}
   112  				ag.Etag = &etag
   113  			}
   114  		case "zones":
   115  			if v != nil {
   116  				var zones []string
   117  				err = json.Unmarshal(*v, &zones)
   118  				if err != nil {
   119  					return err
   120  				}
   121  				ag.Zones = &zones
   122  			}
   123  		case "identity":
   124  			if v != nil {
   125  				var identity ManagedServiceIdentity
   126  				err = json.Unmarshal(*v, &identity)
   127  				if err != nil {
   128  					return err
   129  				}
   130  				ag.Identity = &identity
   131  			}
   132  		case "id":
   133  			if v != nil {
   134  				var ID string
   135  				err = json.Unmarshal(*v, &ID)
   136  				if err != nil {
   137  					return err
   138  				}
   139  				ag.ID = &ID
   140  			}
   141  		case "name":
   142  			if v != nil {
   143  				var name string
   144  				err = json.Unmarshal(*v, &name)
   145  				if err != nil {
   146  					return err
   147  				}
   148  				ag.Name = &name
   149  			}
   150  		case "type":
   151  			if v != nil {
   152  				var typeVar string
   153  				err = json.Unmarshal(*v, &typeVar)
   154  				if err != nil {
   155  					return err
   156  				}
   157  				ag.Type = &typeVar
   158  			}
   159  		case "location":
   160  			if v != nil {
   161  				var location string
   162  				err = json.Unmarshal(*v, &location)
   163  				if err != nil {
   164  					return err
   165  				}
   166  				ag.Location = &location
   167  			}
   168  		case "tags":
   169  			if v != nil {
   170  				var tags map[string]*string
   171  				err = json.Unmarshal(*v, &tags)
   172  				if err != nil {
   173  					return err
   174  				}
   175  				ag.Tags = tags
   176  			}
   177  		}
   178  	}
   179  
   180  	return nil
   181  }
   182  
   183  // ApplicationGatewayAuthenticationCertificate authentication certificates of an application gateway.
   184  type ApplicationGatewayAuthenticationCertificate struct {
   185  	// ApplicationGatewayAuthenticationCertificatePropertiesFormat - Properties of the application gateway authentication certificate.
   186  	*ApplicationGatewayAuthenticationCertificatePropertiesFormat `json:"properties,omitempty"`
   187  	// Name - Name of the authentication certificate that is unique within an Application Gateway.
   188  	Name *string `json:"name,omitempty"`
   189  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
   190  	Etag *string `json:"etag,omitempty"`
   191  	// Type - READ-ONLY; Type of the resource.
   192  	Type *string `json:"type,omitempty"`
   193  	// ID - Resource ID.
   194  	ID *string `json:"id,omitempty"`
   195  }
   196  
   197  // MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificate.
   198  func (agac ApplicationGatewayAuthenticationCertificate) MarshalJSON() ([]byte, error) {
   199  	objectMap := make(map[string]interface{})
   200  	if agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat != nil {
   201  		objectMap["properties"] = agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat
   202  	}
   203  	if agac.Name != nil {
   204  		objectMap["name"] = agac.Name
   205  	}
   206  	if agac.ID != nil {
   207  		objectMap["id"] = agac.ID
   208  	}
   209  	return json.Marshal(objectMap)
   210  }
   211  
   212  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAuthenticationCertificate struct.
   213  func (agac *ApplicationGatewayAuthenticationCertificate) UnmarshalJSON(body []byte) error {
   214  	var m map[string]*json.RawMessage
   215  	err := json.Unmarshal(body, &m)
   216  	if err != nil {
   217  		return err
   218  	}
   219  	for k, v := range m {
   220  		switch k {
   221  		case "properties":
   222  			if v != nil {
   223  				var applicationGatewayAuthenticationCertificatePropertiesFormat ApplicationGatewayAuthenticationCertificatePropertiesFormat
   224  				err = json.Unmarshal(*v, &applicationGatewayAuthenticationCertificatePropertiesFormat)
   225  				if err != nil {
   226  					return err
   227  				}
   228  				agac.ApplicationGatewayAuthenticationCertificatePropertiesFormat = &applicationGatewayAuthenticationCertificatePropertiesFormat
   229  			}
   230  		case "name":
   231  			if v != nil {
   232  				var name string
   233  				err = json.Unmarshal(*v, &name)
   234  				if err != nil {
   235  					return err
   236  				}
   237  				agac.Name = &name
   238  			}
   239  		case "etag":
   240  			if v != nil {
   241  				var etag string
   242  				err = json.Unmarshal(*v, &etag)
   243  				if err != nil {
   244  					return err
   245  				}
   246  				agac.Etag = &etag
   247  			}
   248  		case "type":
   249  			if v != nil {
   250  				var typeVar string
   251  				err = json.Unmarshal(*v, &typeVar)
   252  				if err != nil {
   253  					return err
   254  				}
   255  				agac.Type = &typeVar
   256  			}
   257  		case "id":
   258  			if v != nil {
   259  				var ID string
   260  				err = json.Unmarshal(*v, &ID)
   261  				if err != nil {
   262  					return err
   263  				}
   264  				agac.ID = &ID
   265  			}
   266  		}
   267  	}
   268  
   269  	return nil
   270  }
   271  
   272  // ApplicationGatewayAuthenticationCertificatePropertiesFormat authentication certificates properties of an
   273  // application gateway.
   274  type ApplicationGatewayAuthenticationCertificatePropertiesFormat struct {
   275  	// Data - Certificate public data.
   276  	Data *string `json:"data,omitempty"`
   277  	// ProvisioningState - READ-ONLY; The provisioning state of the authentication certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
   278  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
   279  }
   280  
   281  // MarshalJSON is the custom marshaler for ApplicationGatewayAuthenticationCertificatePropertiesFormat.
   282  func (agacpf ApplicationGatewayAuthenticationCertificatePropertiesFormat) MarshalJSON() ([]byte, error) {
   283  	objectMap := make(map[string]interface{})
   284  	if agacpf.Data != nil {
   285  		objectMap["data"] = agacpf.Data
   286  	}
   287  	return json.Marshal(objectMap)
   288  }
   289  
   290  // ApplicationGatewayAutoscaleConfiguration application Gateway autoscale configuration.
   291  type ApplicationGatewayAutoscaleConfiguration struct {
   292  	// MinCapacity - Lower bound on number of Application Gateway capacity.
   293  	MinCapacity *int32 `json:"minCapacity,omitempty"`
   294  	// MaxCapacity - Upper bound on number of Application Gateway capacity.
   295  	MaxCapacity *int32 `json:"maxCapacity,omitempty"`
   296  }
   297  
   298  // ApplicationGatewayAvailableSslOptions response for ApplicationGatewayAvailableSslOptions API service
   299  // call.
   300  type ApplicationGatewayAvailableSslOptions struct {
   301  	autorest.Response `json:"-"`
   302  	// ApplicationGatewayAvailableSslOptionsPropertiesFormat - Properties of the application gateway available SSL options.
   303  	*ApplicationGatewayAvailableSslOptionsPropertiesFormat `json:"properties,omitempty"`
   304  	// ID - Resource ID.
   305  	ID *string `json:"id,omitempty"`
   306  	// Name - READ-ONLY; Resource name.
   307  	Name *string `json:"name,omitempty"`
   308  	// Type - READ-ONLY; Resource type.
   309  	Type *string `json:"type,omitempty"`
   310  	// Location - Resource location.
   311  	Location *string `json:"location,omitempty"`
   312  	// Tags - Resource tags.
   313  	Tags map[string]*string `json:"tags"`
   314  }
   315  
   316  // MarshalJSON is the custom marshaler for ApplicationGatewayAvailableSslOptions.
   317  func (agaso ApplicationGatewayAvailableSslOptions) MarshalJSON() ([]byte, error) {
   318  	objectMap := make(map[string]interface{})
   319  	if agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat != nil {
   320  		objectMap["properties"] = agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat
   321  	}
   322  	if agaso.ID != nil {
   323  		objectMap["id"] = agaso.ID
   324  	}
   325  	if agaso.Location != nil {
   326  		objectMap["location"] = agaso.Location
   327  	}
   328  	if agaso.Tags != nil {
   329  		objectMap["tags"] = agaso.Tags
   330  	}
   331  	return json.Marshal(objectMap)
   332  }
   333  
   334  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayAvailableSslOptions struct.
   335  func (agaso *ApplicationGatewayAvailableSslOptions) UnmarshalJSON(body []byte) error {
   336  	var m map[string]*json.RawMessage
   337  	err := json.Unmarshal(body, &m)
   338  	if err != nil {
   339  		return err
   340  	}
   341  	for k, v := range m {
   342  		switch k {
   343  		case "properties":
   344  			if v != nil {
   345  				var applicationGatewayAvailableSslOptionsPropertiesFormat ApplicationGatewayAvailableSslOptionsPropertiesFormat
   346  				err = json.Unmarshal(*v, &applicationGatewayAvailableSslOptionsPropertiesFormat)
   347  				if err != nil {
   348  					return err
   349  				}
   350  				agaso.ApplicationGatewayAvailableSslOptionsPropertiesFormat = &applicationGatewayAvailableSslOptionsPropertiesFormat
   351  			}
   352  		case "id":
   353  			if v != nil {
   354  				var ID string
   355  				err = json.Unmarshal(*v, &ID)
   356  				if err != nil {
   357  					return err
   358  				}
   359  				agaso.ID = &ID
   360  			}
   361  		case "name":
   362  			if v != nil {
   363  				var name string
   364  				err = json.Unmarshal(*v, &name)
   365  				if err != nil {
   366  					return err
   367  				}
   368  				agaso.Name = &name
   369  			}
   370  		case "type":
   371  			if v != nil {
   372  				var typeVar string
   373  				err = json.Unmarshal(*v, &typeVar)
   374  				if err != nil {
   375  					return err
   376  				}
   377  				agaso.Type = &typeVar
   378  			}
   379  		case "location":
   380  			if v != nil {
   381  				var location string
   382  				err = json.Unmarshal(*v, &location)
   383  				if err != nil {
   384  					return err
   385  				}
   386  				agaso.Location = &location
   387  			}
   388  		case "tags":
   389  			if v != nil {
   390  				var tags map[string]*string
   391  				err = json.Unmarshal(*v, &tags)
   392  				if err != nil {
   393  					return err
   394  				}
   395  				agaso.Tags = tags
   396  			}
   397  		}
   398  	}
   399  
   400  	return nil
   401  }
   402  
   403  // ApplicationGatewayAvailableSslOptionsPropertiesFormat properties of
   404  // ApplicationGatewayAvailableSslOptions.
   405  type ApplicationGatewayAvailableSslOptionsPropertiesFormat struct {
   406  	// PredefinedPolicies - List of available Ssl predefined policy.
   407  	PredefinedPolicies *[]SubResource `json:"predefinedPolicies,omitempty"`
   408  	// DefaultPolicy - Name of the Ssl predefined policy applied by default to application gateway. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
   409  	DefaultPolicy ApplicationGatewaySslPolicyName `json:"defaultPolicy,omitempty"`
   410  	// AvailableCipherSuites - List of available Ssl cipher suites.
   411  	AvailableCipherSuites *[]ApplicationGatewaySslCipherSuite `json:"availableCipherSuites,omitempty"`
   412  	// AvailableProtocols - List of available Ssl protocols.
   413  	AvailableProtocols *[]ApplicationGatewaySslProtocol `json:"availableProtocols,omitempty"`
   414  }
   415  
   416  // ApplicationGatewayAvailableSslPredefinedPolicies response for ApplicationGatewayAvailableSslOptions API
   417  // service call.
   418  type ApplicationGatewayAvailableSslPredefinedPolicies struct {
   419  	autorest.Response `json:"-"`
   420  	// Value - List of available Ssl predefined policy.
   421  	Value *[]ApplicationGatewaySslPredefinedPolicy `json:"value,omitempty"`
   422  	// NextLink - URL to get the next set of results.
   423  	NextLink *string `json:"nextLink,omitempty"`
   424  }
   425  
   426  // ApplicationGatewayAvailableSslPredefinedPoliciesIterator provides access to a complete listing of
   427  // ApplicationGatewaySslPredefinedPolicy values.
   428  type ApplicationGatewayAvailableSslPredefinedPoliciesIterator struct {
   429  	i    int
   430  	page ApplicationGatewayAvailableSslPredefinedPoliciesPage
   431  }
   432  
   433  // NextWithContext advances to the next value.  If there was an error making
   434  // the request the iterator does not advance and the error is returned.
   435  func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NextWithContext(ctx context.Context) (err error) {
   436  	if tracing.IsEnabled() {
   437  		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesIterator.NextWithContext")
   438  		defer func() {
   439  			sc := -1
   440  			if iter.Response().Response.Response != nil {
   441  				sc = iter.Response().Response.Response.StatusCode
   442  			}
   443  			tracing.EndSpan(ctx, sc, err)
   444  		}()
   445  	}
   446  	iter.i++
   447  	if iter.i < len(iter.page.Values()) {
   448  		return nil
   449  	}
   450  	err = iter.page.NextWithContext(ctx)
   451  	if err != nil {
   452  		iter.i--
   453  		return err
   454  	}
   455  	iter.i = 0
   456  	return nil
   457  }
   458  
   459  // Next advances to the next value.  If there was an error making
   460  // the request the iterator does not advance and the error is returned.
   461  // Deprecated: Use NextWithContext() instead.
   462  func (iter *ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Next() error {
   463  	return iter.NextWithContext(context.Background())
   464  }
   465  
   466  // NotDone returns true if the enumeration should be started or is not yet complete.
   467  func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) NotDone() bool {
   468  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
   469  }
   470  
   471  // Response returns the raw server response from the last page request.
   472  func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
   473  	return iter.page.Response()
   474  }
   475  
   476  // Value returns the current value or a zero-initialized value if the
   477  // iterator has advanced beyond the end of the collection.
   478  func (iter ApplicationGatewayAvailableSslPredefinedPoliciesIterator) Value() ApplicationGatewaySslPredefinedPolicy {
   479  	if !iter.page.NotDone() {
   480  		return ApplicationGatewaySslPredefinedPolicy{}
   481  	}
   482  	return iter.page.Values()[iter.i]
   483  }
   484  
   485  // Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesIterator type.
   486  func NewApplicationGatewayAvailableSslPredefinedPoliciesIterator(page ApplicationGatewayAvailableSslPredefinedPoliciesPage) ApplicationGatewayAvailableSslPredefinedPoliciesIterator {
   487  	return ApplicationGatewayAvailableSslPredefinedPoliciesIterator{page: page}
   488  }
   489  
   490  // IsEmpty returns true if the ListResult contains no values.
   491  func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) IsEmpty() bool {
   492  	return agaspp.Value == nil || len(*agaspp.Value) == 0
   493  }
   494  
   495  // hasNextLink returns true if the NextLink is not empty.
   496  func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) hasNextLink() bool {
   497  	return agaspp.NextLink != nil && len(*agaspp.NextLink) != 0
   498  }
   499  
   500  // applicationGatewayAvailableSslPredefinedPoliciesPreparer prepares a request to retrieve the next set of results.
   501  // It returns nil if no more results exist.
   502  func (agaspp ApplicationGatewayAvailableSslPredefinedPolicies) applicationGatewayAvailableSslPredefinedPoliciesPreparer(ctx context.Context) (*http.Request, error) {
   503  	if !agaspp.hasNextLink() {
   504  		return nil, nil
   505  	}
   506  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
   507  		autorest.AsJSON(),
   508  		autorest.AsGet(),
   509  		autorest.WithBaseURL(to.String(agaspp.NextLink)))
   510  }
   511  
   512  // ApplicationGatewayAvailableSslPredefinedPoliciesPage contains a page of
   513  // ApplicationGatewaySslPredefinedPolicy values.
   514  type ApplicationGatewayAvailableSslPredefinedPoliciesPage struct {
   515  	fn     func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)
   516  	agaspp ApplicationGatewayAvailableSslPredefinedPolicies
   517  }
   518  
   519  // NextWithContext advances to the next page of values.  If there was an error making
   520  // the request the page does not advance and the error is returned.
   521  func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) NextWithContext(ctx context.Context) (err error) {
   522  	if tracing.IsEnabled() {
   523  		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayAvailableSslPredefinedPoliciesPage.NextWithContext")
   524  		defer func() {
   525  			sc := -1
   526  			if page.Response().Response.Response != nil {
   527  				sc = page.Response().Response.Response.StatusCode
   528  			}
   529  			tracing.EndSpan(ctx, sc, err)
   530  		}()
   531  	}
   532  	for {
   533  		next, err := page.fn(ctx, page.agaspp)
   534  		if err != nil {
   535  			return err
   536  		}
   537  		page.agaspp = next
   538  		if !next.hasNextLink() || !next.IsEmpty() {
   539  			break
   540  		}
   541  	}
   542  	return nil
   543  }
   544  
   545  // Next advances to the next page of values.  If there was an error making
   546  // the request the page does not advance and the error is returned.
   547  // Deprecated: Use NextWithContext() instead.
   548  func (page *ApplicationGatewayAvailableSslPredefinedPoliciesPage) Next() error {
   549  	return page.NextWithContext(context.Background())
   550  }
   551  
   552  // NotDone returns true if the page enumeration should be started or is not yet complete.
   553  func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) NotDone() bool {
   554  	return !page.agaspp.IsEmpty()
   555  }
   556  
   557  // Response returns the raw server response from the last page request.
   558  func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Response() ApplicationGatewayAvailableSslPredefinedPolicies {
   559  	return page.agaspp
   560  }
   561  
   562  // Values returns the slice of values for the current page or nil if there are no values.
   563  func (page ApplicationGatewayAvailableSslPredefinedPoliciesPage) Values() []ApplicationGatewaySslPredefinedPolicy {
   564  	if page.agaspp.IsEmpty() {
   565  		return nil
   566  	}
   567  	return *page.agaspp.Value
   568  }
   569  
   570  // Creates a new instance of the ApplicationGatewayAvailableSslPredefinedPoliciesPage type.
   571  func NewApplicationGatewayAvailableSslPredefinedPoliciesPage(cur ApplicationGatewayAvailableSslPredefinedPolicies, getNextPage func(context.Context, ApplicationGatewayAvailableSslPredefinedPolicies) (ApplicationGatewayAvailableSslPredefinedPolicies, error)) ApplicationGatewayAvailableSslPredefinedPoliciesPage {
   572  	return ApplicationGatewayAvailableSslPredefinedPoliciesPage{
   573  		fn:     getNextPage,
   574  		agaspp: cur,
   575  	}
   576  }
   577  
   578  // ApplicationGatewayAvailableWafRuleSetsResult response for ApplicationGatewayAvailableWafRuleSets API
   579  // service call.
   580  type ApplicationGatewayAvailableWafRuleSetsResult struct {
   581  	autorest.Response `json:"-"`
   582  	// Value - The list of application gateway rule sets.
   583  	Value *[]ApplicationGatewayFirewallRuleSet `json:"value,omitempty"`
   584  }
   585  
   586  // ApplicationGatewayBackendAddress backend address of an application gateway.
   587  type ApplicationGatewayBackendAddress struct {
   588  	// Fqdn - Fully qualified domain name (FQDN).
   589  	Fqdn *string `json:"fqdn,omitempty"`
   590  	// IPAddress - IP address.
   591  	IPAddress *string `json:"ipAddress,omitempty"`
   592  }
   593  
   594  // ApplicationGatewayBackendAddressPool backend Address Pool of an application gateway.
   595  type ApplicationGatewayBackendAddressPool struct {
   596  	// ApplicationGatewayBackendAddressPoolPropertiesFormat - Properties of the application gateway backend address pool.
   597  	*ApplicationGatewayBackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
   598  	// Name - Name of the backend address pool that is unique within an Application Gateway.
   599  	Name *string `json:"name,omitempty"`
   600  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
   601  	Etag *string `json:"etag,omitempty"`
   602  	// Type - READ-ONLY; Type of the resource.
   603  	Type *string `json:"type,omitempty"`
   604  	// ID - Resource ID.
   605  	ID *string `json:"id,omitempty"`
   606  }
   607  
   608  // MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPool.
   609  func (agbap ApplicationGatewayBackendAddressPool) MarshalJSON() ([]byte, error) {
   610  	objectMap := make(map[string]interface{})
   611  	if agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat != nil {
   612  		objectMap["properties"] = agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat
   613  	}
   614  	if agbap.Name != nil {
   615  		objectMap["name"] = agbap.Name
   616  	}
   617  	if agbap.ID != nil {
   618  		objectMap["id"] = agbap.ID
   619  	}
   620  	return json.Marshal(objectMap)
   621  }
   622  
   623  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendAddressPool struct.
   624  func (agbap *ApplicationGatewayBackendAddressPool) UnmarshalJSON(body []byte) error {
   625  	var m map[string]*json.RawMessage
   626  	err := json.Unmarshal(body, &m)
   627  	if err != nil {
   628  		return err
   629  	}
   630  	for k, v := range m {
   631  		switch k {
   632  		case "properties":
   633  			if v != nil {
   634  				var applicationGatewayBackendAddressPoolPropertiesFormat ApplicationGatewayBackendAddressPoolPropertiesFormat
   635  				err = json.Unmarshal(*v, &applicationGatewayBackendAddressPoolPropertiesFormat)
   636  				if err != nil {
   637  					return err
   638  				}
   639  				agbap.ApplicationGatewayBackendAddressPoolPropertiesFormat = &applicationGatewayBackendAddressPoolPropertiesFormat
   640  			}
   641  		case "name":
   642  			if v != nil {
   643  				var name string
   644  				err = json.Unmarshal(*v, &name)
   645  				if err != nil {
   646  					return err
   647  				}
   648  				agbap.Name = &name
   649  			}
   650  		case "etag":
   651  			if v != nil {
   652  				var etag string
   653  				err = json.Unmarshal(*v, &etag)
   654  				if err != nil {
   655  					return err
   656  				}
   657  				agbap.Etag = &etag
   658  			}
   659  		case "type":
   660  			if v != nil {
   661  				var typeVar string
   662  				err = json.Unmarshal(*v, &typeVar)
   663  				if err != nil {
   664  					return err
   665  				}
   666  				agbap.Type = &typeVar
   667  			}
   668  		case "id":
   669  			if v != nil {
   670  				var ID string
   671  				err = json.Unmarshal(*v, &ID)
   672  				if err != nil {
   673  					return err
   674  				}
   675  				agbap.ID = &ID
   676  			}
   677  		}
   678  	}
   679  
   680  	return nil
   681  }
   682  
   683  // ApplicationGatewayBackendAddressPoolPropertiesFormat properties of Backend Address Pool of an
   684  // application gateway.
   685  type ApplicationGatewayBackendAddressPoolPropertiesFormat struct {
   686  	// BackendIPConfigurations - READ-ONLY; Collection of references to IPs defined in network interfaces.
   687  	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
   688  	// BackendAddresses - Backend addresses.
   689  	BackendAddresses *[]ApplicationGatewayBackendAddress `json:"backendAddresses,omitempty"`
   690  	// ProvisioningState - READ-ONLY; The provisioning state of the backend address pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
   691  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
   692  }
   693  
   694  // MarshalJSON is the custom marshaler for ApplicationGatewayBackendAddressPoolPropertiesFormat.
   695  func (agbappf ApplicationGatewayBackendAddressPoolPropertiesFormat) MarshalJSON() ([]byte, error) {
   696  	objectMap := make(map[string]interface{})
   697  	if agbappf.BackendAddresses != nil {
   698  		objectMap["backendAddresses"] = agbappf.BackendAddresses
   699  	}
   700  	return json.Marshal(objectMap)
   701  }
   702  
   703  // ApplicationGatewayBackendHealth response for ApplicationGatewayBackendHealth API service call.
   704  type ApplicationGatewayBackendHealth struct {
   705  	autorest.Response `json:"-"`
   706  	// BackendAddressPools - A list of ApplicationGatewayBackendHealthPool resources.
   707  	BackendAddressPools *[]ApplicationGatewayBackendHealthPool `json:"backendAddressPools,omitempty"`
   708  }
   709  
   710  // ApplicationGatewayBackendHealthHTTPSettings application gateway BackendHealthHttp settings.
   711  type ApplicationGatewayBackendHealthHTTPSettings struct {
   712  	// BackendHTTPSettings - Reference to an ApplicationGatewayBackendHttpSettings resource.
   713  	BackendHTTPSettings *ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettings,omitempty"`
   714  	// Servers - List of ApplicationGatewayBackendHealthServer resources.
   715  	Servers *[]ApplicationGatewayBackendHealthServer `json:"servers,omitempty"`
   716  }
   717  
   718  // ApplicationGatewayBackendHealthOnDemand result of on demand test probe.
   719  type ApplicationGatewayBackendHealthOnDemand struct {
   720  	autorest.Response `json:"-"`
   721  	// BackendAddressPool - Reference to an ApplicationGatewayBackendAddressPool resource.
   722  	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
   723  	// BackendHealthHTTPSettings - Application gateway BackendHealthHttp settings.
   724  	BackendHealthHTTPSettings *ApplicationGatewayBackendHealthHTTPSettings `json:"backendHealthHttpSettings,omitempty"`
   725  }
   726  
   727  // ApplicationGatewayBackendHealthPool application gateway BackendHealth pool.
   728  type ApplicationGatewayBackendHealthPool struct {
   729  	// BackendAddressPool - Reference to an ApplicationGatewayBackendAddressPool resource.
   730  	BackendAddressPool *ApplicationGatewayBackendAddressPool `json:"backendAddressPool,omitempty"`
   731  	// BackendHTTPSettingsCollection - List of ApplicationGatewayBackendHealthHttpSettings resources.
   732  	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHealthHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
   733  }
   734  
   735  // ApplicationGatewayBackendHealthServer application gateway backendhealth http settings.
   736  type ApplicationGatewayBackendHealthServer struct {
   737  	// Address - IP address or FQDN of backend server.
   738  	Address *string `json:"address,omitempty"`
   739  	// IPConfiguration - Reference to IP configuration of backend server.
   740  	IPConfiguration *InterfaceIPConfiguration `json:"ipConfiguration,omitempty"`
   741  	// Health - Health of backend server. Possible values include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
   742  	Health ApplicationGatewayBackendHealthServerHealth `json:"health,omitempty"`
   743  	// HealthProbeLog - Health Probe Log.
   744  	HealthProbeLog *string `json:"healthProbeLog,omitempty"`
   745  }
   746  
   747  // ApplicationGatewayBackendHTTPSettings backend address pool settings of an application gateway.
   748  type ApplicationGatewayBackendHTTPSettings struct {
   749  	// ApplicationGatewayBackendHTTPSettingsPropertiesFormat - Properties of the application gateway backend HTTP settings.
   750  	*ApplicationGatewayBackendHTTPSettingsPropertiesFormat `json:"properties,omitempty"`
   751  	// Name - Name of the backend http settings that is unique within an Application Gateway.
   752  	Name *string `json:"name,omitempty"`
   753  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
   754  	Etag *string `json:"etag,omitempty"`
   755  	// Type - READ-ONLY; Type of the resource.
   756  	Type *string `json:"type,omitempty"`
   757  	// ID - Resource ID.
   758  	ID *string `json:"id,omitempty"`
   759  }
   760  
   761  // MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettings.
   762  func (agbhs ApplicationGatewayBackendHTTPSettings) MarshalJSON() ([]byte, error) {
   763  	objectMap := make(map[string]interface{})
   764  	if agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat != nil {
   765  		objectMap["properties"] = agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat
   766  	}
   767  	if agbhs.Name != nil {
   768  		objectMap["name"] = agbhs.Name
   769  	}
   770  	if agbhs.ID != nil {
   771  		objectMap["id"] = agbhs.ID
   772  	}
   773  	return json.Marshal(objectMap)
   774  }
   775  
   776  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayBackendHTTPSettings struct.
   777  func (agbhs *ApplicationGatewayBackendHTTPSettings) UnmarshalJSON(body []byte) error {
   778  	var m map[string]*json.RawMessage
   779  	err := json.Unmarshal(body, &m)
   780  	if err != nil {
   781  		return err
   782  	}
   783  	for k, v := range m {
   784  		switch k {
   785  		case "properties":
   786  			if v != nil {
   787  				var applicationGatewayBackendHTTPSettingsPropertiesFormat ApplicationGatewayBackendHTTPSettingsPropertiesFormat
   788  				err = json.Unmarshal(*v, &applicationGatewayBackendHTTPSettingsPropertiesFormat)
   789  				if err != nil {
   790  					return err
   791  				}
   792  				agbhs.ApplicationGatewayBackendHTTPSettingsPropertiesFormat = &applicationGatewayBackendHTTPSettingsPropertiesFormat
   793  			}
   794  		case "name":
   795  			if v != nil {
   796  				var name string
   797  				err = json.Unmarshal(*v, &name)
   798  				if err != nil {
   799  					return err
   800  				}
   801  				agbhs.Name = &name
   802  			}
   803  		case "etag":
   804  			if v != nil {
   805  				var etag string
   806  				err = json.Unmarshal(*v, &etag)
   807  				if err != nil {
   808  					return err
   809  				}
   810  				agbhs.Etag = &etag
   811  			}
   812  		case "type":
   813  			if v != nil {
   814  				var typeVar string
   815  				err = json.Unmarshal(*v, &typeVar)
   816  				if err != nil {
   817  					return err
   818  				}
   819  				agbhs.Type = &typeVar
   820  			}
   821  		case "id":
   822  			if v != nil {
   823  				var ID string
   824  				err = json.Unmarshal(*v, &ID)
   825  				if err != nil {
   826  					return err
   827  				}
   828  				agbhs.ID = &ID
   829  			}
   830  		}
   831  	}
   832  
   833  	return nil
   834  }
   835  
   836  // ApplicationGatewayBackendHTTPSettingsPropertiesFormat properties of Backend address pool settings of an
   837  // application gateway.
   838  type ApplicationGatewayBackendHTTPSettingsPropertiesFormat struct {
   839  	// Port - The destination port on the backend.
   840  	Port *int32 `json:"port,omitempty"`
   841  	// Protocol - The protocol used to communicate with the backend. Possible values include: 'HTTP', 'HTTPS'
   842  	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
   843  	// CookieBasedAffinity - Cookie based affinity. Possible values include: 'Enabled', 'Disabled'
   844  	CookieBasedAffinity ApplicationGatewayCookieBasedAffinity `json:"cookieBasedAffinity,omitempty"`
   845  	// 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.
   846  	RequestTimeout *int32 `json:"requestTimeout,omitempty"`
   847  	// Probe - Probe resource of an application gateway.
   848  	Probe *SubResource `json:"probe,omitempty"`
   849  	// AuthenticationCertificates - Array of references to application gateway authentication certificates.
   850  	AuthenticationCertificates *[]SubResource `json:"authenticationCertificates,omitempty"`
   851  	// TrustedRootCertificates - Array of references to application gateway trusted root certificates.
   852  	TrustedRootCertificates *[]SubResource `json:"trustedRootCertificates,omitempty"`
   853  	// ConnectionDraining - Connection draining of the backend http settings resource.
   854  	ConnectionDraining *ApplicationGatewayConnectionDraining `json:"connectionDraining,omitempty"`
   855  	// HostName - Host header to be sent to the backend servers.
   856  	HostName *string `json:"hostName,omitempty"`
   857  	// PickHostNameFromBackendAddress - Whether to pick host header should be picked from the host name of the backend server. Default value is false.
   858  	PickHostNameFromBackendAddress *bool `json:"pickHostNameFromBackendAddress,omitempty"`
   859  	// AffinityCookieName - Cookie name to use for the affinity cookie.
   860  	AffinityCookieName *string `json:"affinityCookieName,omitempty"`
   861  	// ProbeEnabled - Whether the probe is enabled. Default value is false.
   862  	ProbeEnabled *bool `json:"probeEnabled,omitempty"`
   863  	// Path - Path which should be used as a prefix for all HTTP requests. Null means no path will be prefixed. Default value is null.
   864  	Path *string `json:"path,omitempty"`
   865  	// ProvisioningState - READ-ONLY; The provisioning state of the backend HTTP settings resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
   866  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
   867  }
   868  
   869  // MarshalJSON is the custom marshaler for ApplicationGatewayBackendHTTPSettingsPropertiesFormat.
   870  func (agbhspf ApplicationGatewayBackendHTTPSettingsPropertiesFormat) MarshalJSON() ([]byte, error) {
   871  	objectMap := make(map[string]interface{})
   872  	if agbhspf.Port != nil {
   873  		objectMap["port"] = agbhspf.Port
   874  	}
   875  	if agbhspf.Protocol != "" {
   876  		objectMap["protocol"] = agbhspf.Protocol
   877  	}
   878  	if agbhspf.CookieBasedAffinity != "" {
   879  		objectMap["cookieBasedAffinity"] = agbhspf.CookieBasedAffinity
   880  	}
   881  	if agbhspf.RequestTimeout != nil {
   882  		objectMap["requestTimeout"] = agbhspf.RequestTimeout
   883  	}
   884  	if agbhspf.Probe != nil {
   885  		objectMap["probe"] = agbhspf.Probe
   886  	}
   887  	if agbhspf.AuthenticationCertificates != nil {
   888  		objectMap["authenticationCertificates"] = agbhspf.AuthenticationCertificates
   889  	}
   890  	if agbhspf.TrustedRootCertificates != nil {
   891  		objectMap["trustedRootCertificates"] = agbhspf.TrustedRootCertificates
   892  	}
   893  	if agbhspf.ConnectionDraining != nil {
   894  		objectMap["connectionDraining"] = agbhspf.ConnectionDraining
   895  	}
   896  	if agbhspf.HostName != nil {
   897  		objectMap["hostName"] = agbhspf.HostName
   898  	}
   899  	if agbhspf.PickHostNameFromBackendAddress != nil {
   900  		objectMap["pickHostNameFromBackendAddress"] = agbhspf.PickHostNameFromBackendAddress
   901  	}
   902  	if agbhspf.AffinityCookieName != nil {
   903  		objectMap["affinityCookieName"] = agbhspf.AffinityCookieName
   904  	}
   905  	if agbhspf.ProbeEnabled != nil {
   906  		objectMap["probeEnabled"] = agbhspf.ProbeEnabled
   907  	}
   908  	if agbhspf.Path != nil {
   909  		objectMap["path"] = agbhspf.Path
   910  	}
   911  	return json.Marshal(objectMap)
   912  }
   913  
   914  // ApplicationGatewayConnectionDraining connection draining allows open connections to a backend server to
   915  // be active for a specified time after the backend server got removed from the configuration.
   916  type ApplicationGatewayConnectionDraining struct {
   917  	// Enabled - Whether connection draining is enabled or not.
   918  	Enabled *bool `json:"enabled,omitempty"`
   919  	// DrainTimeoutInSec - The number of seconds connection draining is active. Acceptable values are from 1 second to 3600 seconds.
   920  	DrainTimeoutInSec *int32 `json:"drainTimeoutInSec,omitempty"`
   921  }
   922  
   923  // ApplicationGatewayCustomError customer error of an application gateway.
   924  type ApplicationGatewayCustomError struct {
   925  	// StatusCode - Status code of the application gateway customer error. Possible values include: 'HTTPStatus403', 'HTTPStatus502'
   926  	StatusCode ApplicationGatewayCustomErrorStatusCode `json:"statusCode,omitempty"`
   927  	// CustomErrorPageURL - Error page URL of the application gateway customer error.
   928  	CustomErrorPageURL *string `json:"customErrorPageUrl,omitempty"`
   929  }
   930  
   931  // ApplicationGatewayFirewallDisabledRuleGroup allows to disable rules within a rule group or an entire
   932  // rule group.
   933  type ApplicationGatewayFirewallDisabledRuleGroup struct {
   934  	// RuleGroupName - The name of the rule group that will be disabled.
   935  	RuleGroupName *string `json:"ruleGroupName,omitempty"`
   936  	// Rules - The list of rules that will be disabled. If null, all rules of the rule group will be disabled.
   937  	Rules *[]int32 `json:"rules,omitempty"`
   938  }
   939  
   940  // ApplicationGatewayFirewallExclusion allow to exclude some variable satisfy the condition for the WAF
   941  // check.
   942  type ApplicationGatewayFirewallExclusion struct {
   943  	// MatchVariable - The variable to be excluded.
   944  	MatchVariable *string `json:"matchVariable,omitempty"`
   945  	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to.
   946  	SelectorMatchOperator *string `json:"selectorMatchOperator,omitempty"`
   947  	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
   948  	Selector *string `json:"selector,omitempty"`
   949  }
   950  
   951  // ApplicationGatewayFirewallRule a web application firewall rule.
   952  type ApplicationGatewayFirewallRule struct {
   953  	// RuleID - The identifier of the web application firewall rule.
   954  	RuleID *int32 `json:"ruleId,omitempty"`
   955  	// Description - The description of the web application firewall rule.
   956  	Description *string `json:"description,omitempty"`
   957  }
   958  
   959  // ApplicationGatewayFirewallRuleGroup a web application firewall rule group.
   960  type ApplicationGatewayFirewallRuleGroup struct {
   961  	// RuleGroupName - The name of the web application firewall rule group.
   962  	RuleGroupName *string `json:"ruleGroupName,omitempty"`
   963  	// Description - The description of the web application firewall rule group.
   964  	Description *string `json:"description,omitempty"`
   965  	// Rules - The rules of the web application firewall rule group.
   966  	Rules *[]ApplicationGatewayFirewallRule `json:"rules,omitempty"`
   967  }
   968  
   969  // ApplicationGatewayFirewallRuleSet a web application firewall rule set.
   970  type ApplicationGatewayFirewallRuleSet struct {
   971  	// ApplicationGatewayFirewallRuleSetPropertiesFormat - Properties of the application gateway firewall rule set.
   972  	*ApplicationGatewayFirewallRuleSetPropertiesFormat `json:"properties,omitempty"`
   973  	// ID - Resource ID.
   974  	ID *string `json:"id,omitempty"`
   975  	// Name - READ-ONLY; Resource name.
   976  	Name *string `json:"name,omitempty"`
   977  	// Type - READ-ONLY; Resource type.
   978  	Type *string `json:"type,omitempty"`
   979  	// Location - Resource location.
   980  	Location *string `json:"location,omitempty"`
   981  	// Tags - Resource tags.
   982  	Tags map[string]*string `json:"tags"`
   983  }
   984  
   985  // MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSet.
   986  func (agfrs ApplicationGatewayFirewallRuleSet) MarshalJSON() ([]byte, error) {
   987  	objectMap := make(map[string]interface{})
   988  	if agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat != nil {
   989  		objectMap["properties"] = agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat
   990  	}
   991  	if agfrs.ID != nil {
   992  		objectMap["id"] = agfrs.ID
   993  	}
   994  	if agfrs.Location != nil {
   995  		objectMap["location"] = agfrs.Location
   996  	}
   997  	if agfrs.Tags != nil {
   998  		objectMap["tags"] = agfrs.Tags
   999  	}
  1000  	return json.Marshal(objectMap)
  1001  }
  1002  
  1003  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFirewallRuleSet struct.
  1004  func (agfrs *ApplicationGatewayFirewallRuleSet) UnmarshalJSON(body []byte) error {
  1005  	var m map[string]*json.RawMessage
  1006  	err := json.Unmarshal(body, &m)
  1007  	if err != nil {
  1008  		return err
  1009  	}
  1010  	for k, v := range m {
  1011  		switch k {
  1012  		case "properties":
  1013  			if v != nil {
  1014  				var applicationGatewayFirewallRuleSetPropertiesFormat ApplicationGatewayFirewallRuleSetPropertiesFormat
  1015  				err = json.Unmarshal(*v, &applicationGatewayFirewallRuleSetPropertiesFormat)
  1016  				if err != nil {
  1017  					return err
  1018  				}
  1019  				agfrs.ApplicationGatewayFirewallRuleSetPropertiesFormat = &applicationGatewayFirewallRuleSetPropertiesFormat
  1020  			}
  1021  		case "id":
  1022  			if v != nil {
  1023  				var ID string
  1024  				err = json.Unmarshal(*v, &ID)
  1025  				if err != nil {
  1026  					return err
  1027  				}
  1028  				agfrs.ID = &ID
  1029  			}
  1030  		case "name":
  1031  			if v != nil {
  1032  				var name string
  1033  				err = json.Unmarshal(*v, &name)
  1034  				if err != nil {
  1035  					return err
  1036  				}
  1037  				agfrs.Name = &name
  1038  			}
  1039  		case "type":
  1040  			if v != nil {
  1041  				var typeVar string
  1042  				err = json.Unmarshal(*v, &typeVar)
  1043  				if err != nil {
  1044  					return err
  1045  				}
  1046  				agfrs.Type = &typeVar
  1047  			}
  1048  		case "location":
  1049  			if v != nil {
  1050  				var location string
  1051  				err = json.Unmarshal(*v, &location)
  1052  				if err != nil {
  1053  					return err
  1054  				}
  1055  				agfrs.Location = &location
  1056  			}
  1057  		case "tags":
  1058  			if v != nil {
  1059  				var tags map[string]*string
  1060  				err = json.Unmarshal(*v, &tags)
  1061  				if err != nil {
  1062  					return err
  1063  				}
  1064  				agfrs.Tags = tags
  1065  			}
  1066  		}
  1067  	}
  1068  
  1069  	return nil
  1070  }
  1071  
  1072  // ApplicationGatewayFirewallRuleSetPropertiesFormat properties of the web application firewall rule set.
  1073  type ApplicationGatewayFirewallRuleSetPropertiesFormat struct {
  1074  	// ProvisioningState - READ-ONLY; The provisioning state of the web application firewall rule set. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  1075  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  1076  	// RuleSetType - The type of the web application firewall rule set.
  1077  	RuleSetType *string `json:"ruleSetType,omitempty"`
  1078  	// RuleSetVersion - The version of the web application firewall rule set type.
  1079  	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
  1080  	// RuleGroups - The rule groups of the web application firewall rule set.
  1081  	RuleGroups *[]ApplicationGatewayFirewallRuleGroup `json:"ruleGroups,omitempty"`
  1082  }
  1083  
  1084  // MarshalJSON is the custom marshaler for ApplicationGatewayFirewallRuleSetPropertiesFormat.
  1085  func (agfrspf ApplicationGatewayFirewallRuleSetPropertiesFormat) MarshalJSON() ([]byte, error) {
  1086  	objectMap := make(map[string]interface{})
  1087  	if agfrspf.RuleSetType != nil {
  1088  		objectMap["ruleSetType"] = agfrspf.RuleSetType
  1089  	}
  1090  	if agfrspf.RuleSetVersion != nil {
  1091  		objectMap["ruleSetVersion"] = agfrspf.RuleSetVersion
  1092  	}
  1093  	if agfrspf.RuleGroups != nil {
  1094  		objectMap["ruleGroups"] = agfrspf.RuleGroups
  1095  	}
  1096  	return json.Marshal(objectMap)
  1097  }
  1098  
  1099  // ApplicationGatewayFrontendIPConfiguration frontend IP configuration of an application gateway.
  1100  type ApplicationGatewayFrontendIPConfiguration struct {
  1101  	// ApplicationGatewayFrontendIPConfigurationPropertiesFormat - Properties of the application gateway frontend IP configuration.
  1102  	*ApplicationGatewayFrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
  1103  	// Name - Name of the frontend IP configuration that is unique within an Application Gateway.
  1104  	Name *string `json:"name,omitempty"`
  1105  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  1106  	Etag *string `json:"etag,omitempty"`
  1107  	// Type - READ-ONLY; Type of the resource.
  1108  	Type *string `json:"type,omitempty"`
  1109  	// ID - Resource ID.
  1110  	ID *string `json:"id,omitempty"`
  1111  }
  1112  
  1113  // MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfiguration.
  1114  func (agfic ApplicationGatewayFrontendIPConfiguration) MarshalJSON() ([]byte, error) {
  1115  	objectMap := make(map[string]interface{})
  1116  	if agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat != nil {
  1117  		objectMap["properties"] = agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat
  1118  	}
  1119  	if agfic.Name != nil {
  1120  		objectMap["name"] = agfic.Name
  1121  	}
  1122  	if agfic.ID != nil {
  1123  		objectMap["id"] = agfic.ID
  1124  	}
  1125  	return json.Marshal(objectMap)
  1126  }
  1127  
  1128  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendIPConfiguration struct.
  1129  func (agfic *ApplicationGatewayFrontendIPConfiguration) UnmarshalJSON(body []byte) error {
  1130  	var m map[string]*json.RawMessage
  1131  	err := json.Unmarshal(body, &m)
  1132  	if err != nil {
  1133  		return err
  1134  	}
  1135  	for k, v := range m {
  1136  		switch k {
  1137  		case "properties":
  1138  			if v != nil {
  1139  				var applicationGatewayFrontendIPConfigurationPropertiesFormat ApplicationGatewayFrontendIPConfigurationPropertiesFormat
  1140  				err = json.Unmarshal(*v, &applicationGatewayFrontendIPConfigurationPropertiesFormat)
  1141  				if err != nil {
  1142  					return err
  1143  				}
  1144  				agfic.ApplicationGatewayFrontendIPConfigurationPropertiesFormat = &applicationGatewayFrontendIPConfigurationPropertiesFormat
  1145  			}
  1146  		case "name":
  1147  			if v != nil {
  1148  				var name string
  1149  				err = json.Unmarshal(*v, &name)
  1150  				if err != nil {
  1151  					return err
  1152  				}
  1153  				agfic.Name = &name
  1154  			}
  1155  		case "etag":
  1156  			if v != nil {
  1157  				var etag string
  1158  				err = json.Unmarshal(*v, &etag)
  1159  				if err != nil {
  1160  					return err
  1161  				}
  1162  				agfic.Etag = &etag
  1163  			}
  1164  		case "type":
  1165  			if v != nil {
  1166  				var typeVar string
  1167  				err = json.Unmarshal(*v, &typeVar)
  1168  				if err != nil {
  1169  					return err
  1170  				}
  1171  				agfic.Type = &typeVar
  1172  			}
  1173  		case "id":
  1174  			if v != nil {
  1175  				var ID string
  1176  				err = json.Unmarshal(*v, &ID)
  1177  				if err != nil {
  1178  					return err
  1179  				}
  1180  				agfic.ID = &ID
  1181  			}
  1182  		}
  1183  	}
  1184  
  1185  	return nil
  1186  }
  1187  
  1188  // ApplicationGatewayFrontendIPConfigurationPropertiesFormat properties of Frontend IP configuration of an
  1189  // application gateway.
  1190  type ApplicationGatewayFrontendIPConfigurationPropertiesFormat struct {
  1191  	// PrivateIPAddress - PrivateIPAddress of the network interface IP Configuration.
  1192  	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
  1193  	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
  1194  	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
  1195  	// Subnet - Reference to the subnet resource.
  1196  	Subnet *SubResource `json:"subnet,omitempty"`
  1197  	// PublicIPAddress - Reference to the PublicIP resource.
  1198  	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
  1199  	// ProvisioningState - READ-ONLY; The provisioning state of the frontend IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  1200  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  1201  }
  1202  
  1203  // MarshalJSON is the custom marshaler for ApplicationGatewayFrontendIPConfigurationPropertiesFormat.
  1204  func (agficpf ApplicationGatewayFrontendIPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
  1205  	objectMap := make(map[string]interface{})
  1206  	if agficpf.PrivateIPAddress != nil {
  1207  		objectMap["privateIPAddress"] = agficpf.PrivateIPAddress
  1208  	}
  1209  	if agficpf.PrivateIPAllocationMethod != "" {
  1210  		objectMap["privateIPAllocationMethod"] = agficpf.PrivateIPAllocationMethod
  1211  	}
  1212  	if agficpf.Subnet != nil {
  1213  		objectMap["subnet"] = agficpf.Subnet
  1214  	}
  1215  	if agficpf.PublicIPAddress != nil {
  1216  		objectMap["publicIPAddress"] = agficpf.PublicIPAddress
  1217  	}
  1218  	return json.Marshal(objectMap)
  1219  }
  1220  
  1221  // ApplicationGatewayFrontendPort frontend port of an application gateway.
  1222  type ApplicationGatewayFrontendPort struct {
  1223  	// ApplicationGatewayFrontendPortPropertiesFormat - Properties of the application gateway frontend port.
  1224  	*ApplicationGatewayFrontendPortPropertiesFormat `json:"properties,omitempty"`
  1225  	// Name - Name of the frontend port that is unique within an Application Gateway.
  1226  	Name *string `json:"name,omitempty"`
  1227  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  1228  	Etag *string `json:"etag,omitempty"`
  1229  	// Type - READ-ONLY; Type of the resource.
  1230  	Type *string `json:"type,omitempty"`
  1231  	// ID - Resource ID.
  1232  	ID *string `json:"id,omitempty"`
  1233  }
  1234  
  1235  // MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPort.
  1236  func (agfp ApplicationGatewayFrontendPort) MarshalJSON() ([]byte, error) {
  1237  	objectMap := make(map[string]interface{})
  1238  	if agfp.ApplicationGatewayFrontendPortPropertiesFormat != nil {
  1239  		objectMap["properties"] = agfp.ApplicationGatewayFrontendPortPropertiesFormat
  1240  	}
  1241  	if agfp.Name != nil {
  1242  		objectMap["name"] = agfp.Name
  1243  	}
  1244  	if agfp.ID != nil {
  1245  		objectMap["id"] = agfp.ID
  1246  	}
  1247  	return json.Marshal(objectMap)
  1248  }
  1249  
  1250  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayFrontendPort struct.
  1251  func (agfp *ApplicationGatewayFrontendPort) UnmarshalJSON(body []byte) error {
  1252  	var m map[string]*json.RawMessage
  1253  	err := json.Unmarshal(body, &m)
  1254  	if err != nil {
  1255  		return err
  1256  	}
  1257  	for k, v := range m {
  1258  		switch k {
  1259  		case "properties":
  1260  			if v != nil {
  1261  				var applicationGatewayFrontendPortPropertiesFormat ApplicationGatewayFrontendPortPropertiesFormat
  1262  				err = json.Unmarshal(*v, &applicationGatewayFrontendPortPropertiesFormat)
  1263  				if err != nil {
  1264  					return err
  1265  				}
  1266  				agfp.ApplicationGatewayFrontendPortPropertiesFormat = &applicationGatewayFrontendPortPropertiesFormat
  1267  			}
  1268  		case "name":
  1269  			if v != nil {
  1270  				var name string
  1271  				err = json.Unmarshal(*v, &name)
  1272  				if err != nil {
  1273  					return err
  1274  				}
  1275  				agfp.Name = &name
  1276  			}
  1277  		case "etag":
  1278  			if v != nil {
  1279  				var etag string
  1280  				err = json.Unmarshal(*v, &etag)
  1281  				if err != nil {
  1282  					return err
  1283  				}
  1284  				agfp.Etag = &etag
  1285  			}
  1286  		case "type":
  1287  			if v != nil {
  1288  				var typeVar string
  1289  				err = json.Unmarshal(*v, &typeVar)
  1290  				if err != nil {
  1291  					return err
  1292  				}
  1293  				agfp.Type = &typeVar
  1294  			}
  1295  		case "id":
  1296  			if v != nil {
  1297  				var ID string
  1298  				err = json.Unmarshal(*v, &ID)
  1299  				if err != nil {
  1300  					return err
  1301  				}
  1302  				agfp.ID = &ID
  1303  			}
  1304  		}
  1305  	}
  1306  
  1307  	return nil
  1308  }
  1309  
  1310  // ApplicationGatewayFrontendPortPropertiesFormat properties of Frontend port of an application gateway.
  1311  type ApplicationGatewayFrontendPortPropertiesFormat struct {
  1312  	// Port - Frontend port.
  1313  	Port *int32 `json:"port,omitempty"`
  1314  	// ProvisioningState - READ-ONLY; The provisioning state of the frontend port resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  1315  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  1316  }
  1317  
  1318  // MarshalJSON is the custom marshaler for ApplicationGatewayFrontendPortPropertiesFormat.
  1319  func (agfppf ApplicationGatewayFrontendPortPropertiesFormat) MarshalJSON() ([]byte, error) {
  1320  	objectMap := make(map[string]interface{})
  1321  	if agfppf.Port != nil {
  1322  		objectMap["port"] = agfppf.Port
  1323  	}
  1324  	return json.Marshal(objectMap)
  1325  }
  1326  
  1327  // ApplicationGatewayHeaderConfiguration header configuration of the Actions set in Application Gateway.
  1328  type ApplicationGatewayHeaderConfiguration struct {
  1329  	// HeaderName - Header name of the header configuration.
  1330  	HeaderName *string `json:"headerName,omitempty"`
  1331  	// HeaderValue - Header value of the header configuration.
  1332  	HeaderValue *string `json:"headerValue,omitempty"`
  1333  }
  1334  
  1335  // ApplicationGatewayHTTPListener http listener of an application gateway.
  1336  type ApplicationGatewayHTTPListener struct {
  1337  	// ApplicationGatewayHTTPListenerPropertiesFormat - Properties of the application gateway HTTP listener.
  1338  	*ApplicationGatewayHTTPListenerPropertiesFormat `json:"properties,omitempty"`
  1339  	// Name - Name of the HTTP listener that is unique within an Application Gateway.
  1340  	Name *string `json:"name,omitempty"`
  1341  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  1342  	Etag *string `json:"etag,omitempty"`
  1343  	// Type - READ-ONLY; Type of the resource.
  1344  	Type *string `json:"type,omitempty"`
  1345  	// ID - Resource ID.
  1346  	ID *string `json:"id,omitempty"`
  1347  }
  1348  
  1349  // MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListener.
  1350  func (aghl ApplicationGatewayHTTPListener) MarshalJSON() ([]byte, error) {
  1351  	objectMap := make(map[string]interface{})
  1352  	if aghl.ApplicationGatewayHTTPListenerPropertiesFormat != nil {
  1353  		objectMap["properties"] = aghl.ApplicationGatewayHTTPListenerPropertiesFormat
  1354  	}
  1355  	if aghl.Name != nil {
  1356  		objectMap["name"] = aghl.Name
  1357  	}
  1358  	if aghl.ID != nil {
  1359  		objectMap["id"] = aghl.ID
  1360  	}
  1361  	return json.Marshal(objectMap)
  1362  }
  1363  
  1364  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayHTTPListener struct.
  1365  func (aghl *ApplicationGatewayHTTPListener) UnmarshalJSON(body []byte) error {
  1366  	var m map[string]*json.RawMessage
  1367  	err := json.Unmarshal(body, &m)
  1368  	if err != nil {
  1369  		return err
  1370  	}
  1371  	for k, v := range m {
  1372  		switch k {
  1373  		case "properties":
  1374  			if v != nil {
  1375  				var applicationGatewayHTTPListenerPropertiesFormat ApplicationGatewayHTTPListenerPropertiesFormat
  1376  				err = json.Unmarshal(*v, &applicationGatewayHTTPListenerPropertiesFormat)
  1377  				if err != nil {
  1378  					return err
  1379  				}
  1380  				aghl.ApplicationGatewayHTTPListenerPropertiesFormat = &applicationGatewayHTTPListenerPropertiesFormat
  1381  			}
  1382  		case "name":
  1383  			if v != nil {
  1384  				var name string
  1385  				err = json.Unmarshal(*v, &name)
  1386  				if err != nil {
  1387  					return err
  1388  				}
  1389  				aghl.Name = &name
  1390  			}
  1391  		case "etag":
  1392  			if v != nil {
  1393  				var etag string
  1394  				err = json.Unmarshal(*v, &etag)
  1395  				if err != nil {
  1396  					return err
  1397  				}
  1398  				aghl.Etag = &etag
  1399  			}
  1400  		case "type":
  1401  			if v != nil {
  1402  				var typeVar string
  1403  				err = json.Unmarshal(*v, &typeVar)
  1404  				if err != nil {
  1405  					return err
  1406  				}
  1407  				aghl.Type = &typeVar
  1408  			}
  1409  		case "id":
  1410  			if v != nil {
  1411  				var ID string
  1412  				err = json.Unmarshal(*v, &ID)
  1413  				if err != nil {
  1414  					return err
  1415  				}
  1416  				aghl.ID = &ID
  1417  			}
  1418  		}
  1419  	}
  1420  
  1421  	return nil
  1422  }
  1423  
  1424  // ApplicationGatewayHTTPListenerPropertiesFormat properties of HTTP listener of an application gateway.
  1425  type ApplicationGatewayHTTPListenerPropertiesFormat struct {
  1426  	// FrontendIPConfiguration - Frontend IP configuration resource of an application gateway.
  1427  	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
  1428  	// FrontendPort - Frontend port resource of an application gateway.
  1429  	FrontendPort *SubResource `json:"frontendPort,omitempty"`
  1430  	// Protocol - Protocol of the HTTP listener. Possible values include: 'HTTP', 'HTTPS'
  1431  	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
  1432  	// HostName - Host name of HTTP listener.
  1433  	HostName *string `json:"hostName,omitempty"`
  1434  	// SslCertificate - SSL certificate resource of an application gateway.
  1435  	SslCertificate *SubResource `json:"sslCertificate,omitempty"`
  1436  	// RequireServerNameIndication - Applicable only if protocol is https. Enables SNI for multi-hosting.
  1437  	RequireServerNameIndication *bool `json:"requireServerNameIndication,omitempty"`
  1438  	// ProvisioningState - READ-ONLY; The provisioning state of the HTTP listener resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  1439  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  1440  	// CustomErrorConfigurations - Custom error configurations of the HTTP listener.
  1441  	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
  1442  	// FirewallPolicy - Reference to the FirewallPolicy resource.
  1443  	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
  1444  	// HostNames - List of Host names for HTTP Listener that allows special wildcard characters as well.
  1445  	HostNames *[]string `json:"hostNames,omitempty"`
  1446  }
  1447  
  1448  // MarshalJSON is the custom marshaler for ApplicationGatewayHTTPListenerPropertiesFormat.
  1449  func (aghlpf ApplicationGatewayHTTPListenerPropertiesFormat) MarshalJSON() ([]byte, error) {
  1450  	objectMap := make(map[string]interface{})
  1451  	if aghlpf.FrontendIPConfiguration != nil {
  1452  		objectMap["frontendIPConfiguration"] = aghlpf.FrontendIPConfiguration
  1453  	}
  1454  	if aghlpf.FrontendPort != nil {
  1455  		objectMap["frontendPort"] = aghlpf.FrontendPort
  1456  	}
  1457  	if aghlpf.Protocol != "" {
  1458  		objectMap["protocol"] = aghlpf.Protocol
  1459  	}
  1460  	if aghlpf.HostName != nil {
  1461  		objectMap["hostName"] = aghlpf.HostName
  1462  	}
  1463  	if aghlpf.SslCertificate != nil {
  1464  		objectMap["sslCertificate"] = aghlpf.SslCertificate
  1465  	}
  1466  	if aghlpf.RequireServerNameIndication != nil {
  1467  		objectMap["requireServerNameIndication"] = aghlpf.RequireServerNameIndication
  1468  	}
  1469  	if aghlpf.CustomErrorConfigurations != nil {
  1470  		objectMap["customErrorConfigurations"] = aghlpf.CustomErrorConfigurations
  1471  	}
  1472  	if aghlpf.FirewallPolicy != nil {
  1473  		objectMap["firewallPolicy"] = aghlpf.FirewallPolicy
  1474  	}
  1475  	if aghlpf.HostNames != nil {
  1476  		objectMap["hostNames"] = aghlpf.HostNames
  1477  	}
  1478  	return json.Marshal(objectMap)
  1479  }
  1480  
  1481  // ApplicationGatewayIPConfiguration IP configuration of an application gateway. Currently 1 public and 1
  1482  // private IP configuration is allowed.
  1483  type ApplicationGatewayIPConfiguration struct {
  1484  	// ApplicationGatewayIPConfigurationPropertiesFormat - Properties of the application gateway IP configuration.
  1485  	*ApplicationGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
  1486  	// Name - Name of the IP configuration that is unique within an Application Gateway.
  1487  	Name *string `json:"name,omitempty"`
  1488  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  1489  	Etag *string `json:"etag,omitempty"`
  1490  	// Type - READ-ONLY; Type of the resource.
  1491  	Type *string `json:"type,omitempty"`
  1492  	// ID - Resource ID.
  1493  	ID *string `json:"id,omitempty"`
  1494  }
  1495  
  1496  // MarshalJSON is the custom marshaler for ApplicationGatewayIPConfiguration.
  1497  func (agic ApplicationGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
  1498  	objectMap := make(map[string]interface{})
  1499  	if agic.ApplicationGatewayIPConfigurationPropertiesFormat != nil {
  1500  		objectMap["properties"] = agic.ApplicationGatewayIPConfigurationPropertiesFormat
  1501  	}
  1502  	if agic.Name != nil {
  1503  		objectMap["name"] = agic.Name
  1504  	}
  1505  	if agic.ID != nil {
  1506  		objectMap["id"] = agic.ID
  1507  	}
  1508  	return json.Marshal(objectMap)
  1509  }
  1510  
  1511  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayIPConfiguration struct.
  1512  func (agic *ApplicationGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
  1513  	var m map[string]*json.RawMessage
  1514  	err := json.Unmarshal(body, &m)
  1515  	if err != nil {
  1516  		return err
  1517  	}
  1518  	for k, v := range m {
  1519  		switch k {
  1520  		case "properties":
  1521  			if v != nil {
  1522  				var applicationGatewayIPConfigurationPropertiesFormat ApplicationGatewayIPConfigurationPropertiesFormat
  1523  				err = json.Unmarshal(*v, &applicationGatewayIPConfigurationPropertiesFormat)
  1524  				if err != nil {
  1525  					return err
  1526  				}
  1527  				agic.ApplicationGatewayIPConfigurationPropertiesFormat = &applicationGatewayIPConfigurationPropertiesFormat
  1528  			}
  1529  		case "name":
  1530  			if v != nil {
  1531  				var name string
  1532  				err = json.Unmarshal(*v, &name)
  1533  				if err != nil {
  1534  					return err
  1535  				}
  1536  				agic.Name = &name
  1537  			}
  1538  		case "etag":
  1539  			if v != nil {
  1540  				var etag string
  1541  				err = json.Unmarshal(*v, &etag)
  1542  				if err != nil {
  1543  					return err
  1544  				}
  1545  				agic.Etag = &etag
  1546  			}
  1547  		case "type":
  1548  			if v != nil {
  1549  				var typeVar string
  1550  				err = json.Unmarshal(*v, &typeVar)
  1551  				if err != nil {
  1552  					return err
  1553  				}
  1554  				agic.Type = &typeVar
  1555  			}
  1556  		case "id":
  1557  			if v != nil {
  1558  				var ID string
  1559  				err = json.Unmarshal(*v, &ID)
  1560  				if err != nil {
  1561  					return err
  1562  				}
  1563  				agic.ID = &ID
  1564  			}
  1565  		}
  1566  	}
  1567  
  1568  	return nil
  1569  }
  1570  
  1571  // ApplicationGatewayIPConfigurationPropertiesFormat properties of IP configuration of an application
  1572  // gateway.
  1573  type ApplicationGatewayIPConfigurationPropertiesFormat struct {
  1574  	// Subnet - Reference to the subnet resource. A subnet from where application gateway gets its private address.
  1575  	Subnet *SubResource `json:"subnet,omitempty"`
  1576  	// ProvisioningState - READ-ONLY; The provisioning state of the application gateway IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  1577  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  1578  }
  1579  
  1580  // MarshalJSON is the custom marshaler for ApplicationGatewayIPConfigurationPropertiesFormat.
  1581  func (agicpf ApplicationGatewayIPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
  1582  	objectMap := make(map[string]interface{})
  1583  	if agicpf.Subnet != nil {
  1584  		objectMap["subnet"] = agicpf.Subnet
  1585  	}
  1586  	return json.Marshal(objectMap)
  1587  }
  1588  
  1589  // ApplicationGatewayListResult response for ListApplicationGateways API service call.
  1590  type ApplicationGatewayListResult struct {
  1591  	autorest.Response `json:"-"`
  1592  	// Value - List of an application gateways in a resource group.
  1593  	Value *[]ApplicationGateway `json:"value,omitempty"`
  1594  	// NextLink - URL to get the next set of results.
  1595  	NextLink *string `json:"nextLink,omitempty"`
  1596  }
  1597  
  1598  // ApplicationGatewayListResultIterator provides access to a complete listing of ApplicationGateway values.
  1599  type ApplicationGatewayListResultIterator struct {
  1600  	i    int
  1601  	page ApplicationGatewayListResultPage
  1602  }
  1603  
  1604  // NextWithContext advances to the next value.  If there was an error making
  1605  // the request the iterator does not advance and the error is returned.
  1606  func (iter *ApplicationGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
  1607  	if tracing.IsEnabled() {
  1608  		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultIterator.NextWithContext")
  1609  		defer func() {
  1610  			sc := -1
  1611  			if iter.Response().Response.Response != nil {
  1612  				sc = iter.Response().Response.Response.StatusCode
  1613  			}
  1614  			tracing.EndSpan(ctx, sc, err)
  1615  		}()
  1616  	}
  1617  	iter.i++
  1618  	if iter.i < len(iter.page.Values()) {
  1619  		return nil
  1620  	}
  1621  	err = iter.page.NextWithContext(ctx)
  1622  	if err != nil {
  1623  		iter.i--
  1624  		return err
  1625  	}
  1626  	iter.i = 0
  1627  	return nil
  1628  }
  1629  
  1630  // Next advances to the next value.  If there was an error making
  1631  // the request the iterator does not advance and the error is returned.
  1632  // Deprecated: Use NextWithContext() instead.
  1633  func (iter *ApplicationGatewayListResultIterator) Next() error {
  1634  	return iter.NextWithContext(context.Background())
  1635  }
  1636  
  1637  // NotDone returns true if the enumeration should be started or is not yet complete.
  1638  func (iter ApplicationGatewayListResultIterator) NotDone() bool {
  1639  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  1640  }
  1641  
  1642  // Response returns the raw server response from the last page request.
  1643  func (iter ApplicationGatewayListResultIterator) Response() ApplicationGatewayListResult {
  1644  	return iter.page.Response()
  1645  }
  1646  
  1647  // Value returns the current value or a zero-initialized value if the
  1648  // iterator has advanced beyond the end of the collection.
  1649  func (iter ApplicationGatewayListResultIterator) Value() ApplicationGateway {
  1650  	if !iter.page.NotDone() {
  1651  		return ApplicationGateway{}
  1652  	}
  1653  	return iter.page.Values()[iter.i]
  1654  }
  1655  
  1656  // Creates a new instance of the ApplicationGatewayListResultIterator type.
  1657  func NewApplicationGatewayListResultIterator(page ApplicationGatewayListResultPage) ApplicationGatewayListResultIterator {
  1658  	return ApplicationGatewayListResultIterator{page: page}
  1659  }
  1660  
  1661  // IsEmpty returns true if the ListResult contains no values.
  1662  func (aglr ApplicationGatewayListResult) IsEmpty() bool {
  1663  	return aglr.Value == nil || len(*aglr.Value) == 0
  1664  }
  1665  
  1666  // hasNextLink returns true if the NextLink is not empty.
  1667  func (aglr ApplicationGatewayListResult) hasNextLink() bool {
  1668  	return aglr.NextLink != nil && len(*aglr.NextLink) != 0
  1669  }
  1670  
  1671  // applicationGatewayListResultPreparer prepares a request to retrieve the next set of results.
  1672  // It returns nil if no more results exist.
  1673  func (aglr ApplicationGatewayListResult) applicationGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
  1674  	if !aglr.hasNextLink() {
  1675  		return nil, nil
  1676  	}
  1677  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  1678  		autorest.AsJSON(),
  1679  		autorest.AsGet(),
  1680  		autorest.WithBaseURL(to.String(aglr.NextLink)))
  1681  }
  1682  
  1683  // ApplicationGatewayListResultPage contains a page of ApplicationGateway values.
  1684  type ApplicationGatewayListResultPage struct {
  1685  	fn   func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)
  1686  	aglr ApplicationGatewayListResult
  1687  }
  1688  
  1689  // NextWithContext advances to the next page of values.  If there was an error making
  1690  // the request the page does not advance and the error is returned.
  1691  func (page *ApplicationGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
  1692  	if tracing.IsEnabled() {
  1693  		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationGatewayListResultPage.NextWithContext")
  1694  		defer func() {
  1695  			sc := -1
  1696  			if page.Response().Response.Response != nil {
  1697  				sc = page.Response().Response.Response.StatusCode
  1698  			}
  1699  			tracing.EndSpan(ctx, sc, err)
  1700  		}()
  1701  	}
  1702  	for {
  1703  		next, err := page.fn(ctx, page.aglr)
  1704  		if err != nil {
  1705  			return err
  1706  		}
  1707  		page.aglr = next
  1708  		if !next.hasNextLink() || !next.IsEmpty() {
  1709  			break
  1710  		}
  1711  	}
  1712  	return nil
  1713  }
  1714  
  1715  // Next advances to the next page of values.  If there was an error making
  1716  // the request the page does not advance and the error is returned.
  1717  // Deprecated: Use NextWithContext() instead.
  1718  func (page *ApplicationGatewayListResultPage) Next() error {
  1719  	return page.NextWithContext(context.Background())
  1720  }
  1721  
  1722  // NotDone returns true if the page enumeration should be started or is not yet complete.
  1723  func (page ApplicationGatewayListResultPage) NotDone() bool {
  1724  	return !page.aglr.IsEmpty()
  1725  }
  1726  
  1727  // Response returns the raw server response from the last page request.
  1728  func (page ApplicationGatewayListResultPage) Response() ApplicationGatewayListResult {
  1729  	return page.aglr
  1730  }
  1731  
  1732  // Values returns the slice of values for the current page or nil if there are no values.
  1733  func (page ApplicationGatewayListResultPage) Values() []ApplicationGateway {
  1734  	if page.aglr.IsEmpty() {
  1735  		return nil
  1736  	}
  1737  	return *page.aglr.Value
  1738  }
  1739  
  1740  // Creates a new instance of the ApplicationGatewayListResultPage type.
  1741  func NewApplicationGatewayListResultPage(cur ApplicationGatewayListResult, getNextPage func(context.Context, ApplicationGatewayListResult) (ApplicationGatewayListResult, error)) ApplicationGatewayListResultPage {
  1742  	return ApplicationGatewayListResultPage{
  1743  		fn:   getNextPage,
  1744  		aglr: cur,
  1745  	}
  1746  }
  1747  
  1748  // ApplicationGatewayOnDemandProbe details of on demand test probe request.
  1749  type ApplicationGatewayOnDemandProbe struct {
  1750  	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
  1751  	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
  1752  	// Host - Host name to send the probe to.
  1753  	Host *string `json:"host,omitempty"`
  1754  	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
  1755  	Path *string `json:"path,omitempty"`
  1756  	// 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.
  1757  	Timeout *int32 `json:"timeout,omitempty"`
  1758  	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
  1759  	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
  1760  	// Match - Criterion for classifying a healthy probe response.
  1761  	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
  1762  	// BackendAddressPool - Reference to backend pool of application gateway to which probe request will be sent.
  1763  	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
  1764  	// BackendHTTPSettings - Reference to backend http setting of application gateway to be used for test probe.
  1765  	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
  1766  }
  1767  
  1768  // ApplicationGatewayPathRule path rule of URL path map of an application gateway.
  1769  type ApplicationGatewayPathRule struct {
  1770  	// ApplicationGatewayPathRulePropertiesFormat - Properties of the application gateway path rule.
  1771  	*ApplicationGatewayPathRulePropertiesFormat `json:"properties,omitempty"`
  1772  	// Name - Name of the path rule that is unique within an Application Gateway.
  1773  	Name *string `json:"name,omitempty"`
  1774  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  1775  	Etag *string `json:"etag,omitempty"`
  1776  	// Type - READ-ONLY; Type of the resource.
  1777  	Type *string `json:"type,omitempty"`
  1778  	// ID - Resource ID.
  1779  	ID *string `json:"id,omitempty"`
  1780  }
  1781  
  1782  // MarshalJSON is the custom marshaler for ApplicationGatewayPathRule.
  1783  func (agpr ApplicationGatewayPathRule) MarshalJSON() ([]byte, error) {
  1784  	objectMap := make(map[string]interface{})
  1785  	if agpr.ApplicationGatewayPathRulePropertiesFormat != nil {
  1786  		objectMap["properties"] = agpr.ApplicationGatewayPathRulePropertiesFormat
  1787  	}
  1788  	if agpr.Name != nil {
  1789  		objectMap["name"] = agpr.Name
  1790  	}
  1791  	if agpr.ID != nil {
  1792  		objectMap["id"] = agpr.ID
  1793  	}
  1794  	return json.Marshal(objectMap)
  1795  }
  1796  
  1797  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayPathRule struct.
  1798  func (agpr *ApplicationGatewayPathRule) UnmarshalJSON(body []byte) error {
  1799  	var m map[string]*json.RawMessage
  1800  	err := json.Unmarshal(body, &m)
  1801  	if err != nil {
  1802  		return err
  1803  	}
  1804  	for k, v := range m {
  1805  		switch k {
  1806  		case "properties":
  1807  			if v != nil {
  1808  				var applicationGatewayPathRulePropertiesFormat ApplicationGatewayPathRulePropertiesFormat
  1809  				err = json.Unmarshal(*v, &applicationGatewayPathRulePropertiesFormat)
  1810  				if err != nil {
  1811  					return err
  1812  				}
  1813  				agpr.ApplicationGatewayPathRulePropertiesFormat = &applicationGatewayPathRulePropertiesFormat
  1814  			}
  1815  		case "name":
  1816  			if v != nil {
  1817  				var name string
  1818  				err = json.Unmarshal(*v, &name)
  1819  				if err != nil {
  1820  					return err
  1821  				}
  1822  				agpr.Name = &name
  1823  			}
  1824  		case "etag":
  1825  			if v != nil {
  1826  				var etag string
  1827  				err = json.Unmarshal(*v, &etag)
  1828  				if err != nil {
  1829  					return err
  1830  				}
  1831  				agpr.Etag = &etag
  1832  			}
  1833  		case "type":
  1834  			if v != nil {
  1835  				var typeVar string
  1836  				err = json.Unmarshal(*v, &typeVar)
  1837  				if err != nil {
  1838  					return err
  1839  				}
  1840  				agpr.Type = &typeVar
  1841  			}
  1842  		case "id":
  1843  			if v != nil {
  1844  				var ID string
  1845  				err = json.Unmarshal(*v, &ID)
  1846  				if err != nil {
  1847  					return err
  1848  				}
  1849  				agpr.ID = &ID
  1850  			}
  1851  		}
  1852  	}
  1853  
  1854  	return nil
  1855  }
  1856  
  1857  // ApplicationGatewayPathRulePropertiesFormat properties of path rule of an application gateway.
  1858  type ApplicationGatewayPathRulePropertiesFormat struct {
  1859  	// Paths - Path rules of URL path map.
  1860  	Paths *[]string `json:"paths,omitempty"`
  1861  	// BackendAddressPool - Backend address pool resource of URL path map path rule.
  1862  	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
  1863  	// BackendHTTPSettings - Backend http settings resource of URL path map path rule.
  1864  	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
  1865  	// RedirectConfiguration - Redirect configuration resource of URL path map path rule.
  1866  	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
  1867  	// RewriteRuleSet - Rewrite rule set resource of URL path map path rule.
  1868  	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
  1869  	// ProvisioningState - READ-ONLY; The provisioning state of the path rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  1870  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  1871  	// FirewallPolicy - Reference to the FirewallPolicy resource.
  1872  	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
  1873  }
  1874  
  1875  // MarshalJSON is the custom marshaler for ApplicationGatewayPathRulePropertiesFormat.
  1876  func (agprpf ApplicationGatewayPathRulePropertiesFormat) MarshalJSON() ([]byte, error) {
  1877  	objectMap := make(map[string]interface{})
  1878  	if agprpf.Paths != nil {
  1879  		objectMap["paths"] = agprpf.Paths
  1880  	}
  1881  	if agprpf.BackendAddressPool != nil {
  1882  		objectMap["backendAddressPool"] = agprpf.BackendAddressPool
  1883  	}
  1884  	if agprpf.BackendHTTPSettings != nil {
  1885  		objectMap["backendHttpSettings"] = agprpf.BackendHTTPSettings
  1886  	}
  1887  	if agprpf.RedirectConfiguration != nil {
  1888  		objectMap["redirectConfiguration"] = agprpf.RedirectConfiguration
  1889  	}
  1890  	if agprpf.RewriteRuleSet != nil {
  1891  		objectMap["rewriteRuleSet"] = agprpf.RewriteRuleSet
  1892  	}
  1893  	if agprpf.FirewallPolicy != nil {
  1894  		objectMap["firewallPolicy"] = agprpf.FirewallPolicy
  1895  	}
  1896  	return json.Marshal(objectMap)
  1897  }
  1898  
  1899  // ApplicationGatewayProbe probe of the application gateway.
  1900  type ApplicationGatewayProbe struct {
  1901  	// ApplicationGatewayProbePropertiesFormat - Properties of the application gateway probe.
  1902  	*ApplicationGatewayProbePropertiesFormat `json:"properties,omitempty"`
  1903  	// Name - Name of the probe that is unique within an Application Gateway.
  1904  	Name *string `json:"name,omitempty"`
  1905  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  1906  	Etag *string `json:"etag,omitempty"`
  1907  	// Type - READ-ONLY; Type of the resource.
  1908  	Type *string `json:"type,omitempty"`
  1909  	// ID - Resource ID.
  1910  	ID *string `json:"id,omitempty"`
  1911  }
  1912  
  1913  // MarshalJSON is the custom marshaler for ApplicationGatewayProbe.
  1914  func (agp ApplicationGatewayProbe) MarshalJSON() ([]byte, error) {
  1915  	objectMap := make(map[string]interface{})
  1916  	if agp.ApplicationGatewayProbePropertiesFormat != nil {
  1917  		objectMap["properties"] = agp.ApplicationGatewayProbePropertiesFormat
  1918  	}
  1919  	if agp.Name != nil {
  1920  		objectMap["name"] = agp.Name
  1921  	}
  1922  	if agp.ID != nil {
  1923  		objectMap["id"] = agp.ID
  1924  	}
  1925  	return json.Marshal(objectMap)
  1926  }
  1927  
  1928  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayProbe struct.
  1929  func (agp *ApplicationGatewayProbe) UnmarshalJSON(body []byte) error {
  1930  	var m map[string]*json.RawMessage
  1931  	err := json.Unmarshal(body, &m)
  1932  	if err != nil {
  1933  		return err
  1934  	}
  1935  	for k, v := range m {
  1936  		switch k {
  1937  		case "properties":
  1938  			if v != nil {
  1939  				var applicationGatewayProbePropertiesFormat ApplicationGatewayProbePropertiesFormat
  1940  				err = json.Unmarshal(*v, &applicationGatewayProbePropertiesFormat)
  1941  				if err != nil {
  1942  					return err
  1943  				}
  1944  				agp.ApplicationGatewayProbePropertiesFormat = &applicationGatewayProbePropertiesFormat
  1945  			}
  1946  		case "name":
  1947  			if v != nil {
  1948  				var name string
  1949  				err = json.Unmarshal(*v, &name)
  1950  				if err != nil {
  1951  					return err
  1952  				}
  1953  				agp.Name = &name
  1954  			}
  1955  		case "etag":
  1956  			if v != nil {
  1957  				var etag string
  1958  				err = json.Unmarshal(*v, &etag)
  1959  				if err != nil {
  1960  					return err
  1961  				}
  1962  				agp.Etag = &etag
  1963  			}
  1964  		case "type":
  1965  			if v != nil {
  1966  				var typeVar string
  1967  				err = json.Unmarshal(*v, &typeVar)
  1968  				if err != nil {
  1969  					return err
  1970  				}
  1971  				agp.Type = &typeVar
  1972  			}
  1973  		case "id":
  1974  			if v != nil {
  1975  				var ID string
  1976  				err = json.Unmarshal(*v, &ID)
  1977  				if err != nil {
  1978  					return err
  1979  				}
  1980  				agp.ID = &ID
  1981  			}
  1982  		}
  1983  	}
  1984  
  1985  	return nil
  1986  }
  1987  
  1988  // ApplicationGatewayProbeHealthResponseMatch application gateway probe health response match.
  1989  type ApplicationGatewayProbeHealthResponseMatch struct {
  1990  	// Body - Body that must be contained in the health response. Default value is empty.
  1991  	Body *string `json:"body,omitempty"`
  1992  	// StatusCodes - Allowed ranges of healthy status codes. Default range of healthy status codes is 200-399.
  1993  	StatusCodes *[]string `json:"statusCodes,omitempty"`
  1994  }
  1995  
  1996  // ApplicationGatewayProbePropertiesFormat properties of probe of an application gateway.
  1997  type ApplicationGatewayProbePropertiesFormat struct {
  1998  	// Protocol - The protocol used for the probe. Possible values include: 'HTTP', 'HTTPS'
  1999  	Protocol ApplicationGatewayProtocol `json:"protocol,omitempty"`
  2000  	// Host - Host name to send the probe to.
  2001  	Host *string `json:"host,omitempty"`
  2002  	// Path - Relative path of probe. Valid path starts from '/'. Probe is sent to <Protocol>://<host>:<port><path>.
  2003  	Path *string `json:"path,omitempty"`
  2004  	// Interval - The probing interval in seconds. This is the time interval between two consecutive probes. Acceptable values are from 1 second to 86400 seconds.
  2005  	Interval *int32 `json:"interval,omitempty"`
  2006  	// 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.
  2007  	Timeout *int32 `json:"timeout,omitempty"`
  2008  	// 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.
  2009  	UnhealthyThreshold *int32 `json:"unhealthyThreshold,omitempty"`
  2010  	// PickHostNameFromBackendHTTPSettings - Whether the host header should be picked from the backend http settings. Default value is false.
  2011  	PickHostNameFromBackendHTTPSettings *bool `json:"pickHostNameFromBackendHttpSettings,omitempty"`
  2012  	// MinServers - Minimum number of servers that are always marked healthy. Default value is 0.
  2013  	MinServers *int32 `json:"minServers,omitempty"`
  2014  	// Match - Criterion for classifying a healthy probe response.
  2015  	Match *ApplicationGatewayProbeHealthResponseMatch `json:"match,omitempty"`
  2016  	// ProvisioningState - READ-ONLY; The provisioning state of the probe resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  2017  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  2018  	// Port - Custom port which will be used for probing the backend servers. The valid value ranges from 1 to 65535. In case not set, port from http settings will be used. This property is valid for Standard_v2 and WAF_v2 only.
  2019  	Port *int32 `json:"port,omitempty"`
  2020  }
  2021  
  2022  // MarshalJSON is the custom marshaler for ApplicationGatewayProbePropertiesFormat.
  2023  func (agppf ApplicationGatewayProbePropertiesFormat) MarshalJSON() ([]byte, error) {
  2024  	objectMap := make(map[string]interface{})
  2025  	if agppf.Protocol != "" {
  2026  		objectMap["protocol"] = agppf.Protocol
  2027  	}
  2028  	if agppf.Host != nil {
  2029  		objectMap["host"] = agppf.Host
  2030  	}
  2031  	if agppf.Path != nil {
  2032  		objectMap["path"] = agppf.Path
  2033  	}
  2034  	if agppf.Interval != nil {
  2035  		objectMap["interval"] = agppf.Interval
  2036  	}
  2037  	if agppf.Timeout != nil {
  2038  		objectMap["timeout"] = agppf.Timeout
  2039  	}
  2040  	if agppf.UnhealthyThreshold != nil {
  2041  		objectMap["unhealthyThreshold"] = agppf.UnhealthyThreshold
  2042  	}
  2043  	if agppf.PickHostNameFromBackendHTTPSettings != nil {
  2044  		objectMap["pickHostNameFromBackendHttpSettings"] = agppf.PickHostNameFromBackendHTTPSettings
  2045  	}
  2046  	if agppf.MinServers != nil {
  2047  		objectMap["minServers"] = agppf.MinServers
  2048  	}
  2049  	if agppf.Match != nil {
  2050  		objectMap["match"] = agppf.Match
  2051  	}
  2052  	if agppf.Port != nil {
  2053  		objectMap["port"] = agppf.Port
  2054  	}
  2055  	return json.Marshal(objectMap)
  2056  }
  2057  
  2058  // ApplicationGatewayPropertiesFormat properties of the application gateway.
  2059  type ApplicationGatewayPropertiesFormat struct {
  2060  	// Sku - SKU of the application gateway resource.
  2061  	Sku *ApplicationGatewaySku `json:"sku,omitempty"`
  2062  	// SslPolicy - SSL policy of the application gateway resource.
  2063  	SslPolicy *ApplicationGatewaySslPolicy `json:"sslPolicy,omitempty"`
  2064  	// OperationalState - READ-ONLY; Operational state of the application gateway resource. Possible values include: 'Stopped', 'Starting', 'Running', 'Stopping'
  2065  	OperationalState ApplicationGatewayOperationalState `json:"operationalState,omitempty"`
  2066  	// GatewayIPConfigurations - Subnets of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2067  	GatewayIPConfigurations *[]ApplicationGatewayIPConfiguration `json:"gatewayIPConfigurations,omitempty"`
  2068  	// AuthenticationCertificates - Authentication certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2069  	AuthenticationCertificates *[]ApplicationGatewayAuthenticationCertificate `json:"authenticationCertificates,omitempty"`
  2070  	// TrustedRootCertificates - Trusted Root certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2071  	TrustedRootCertificates *[]ApplicationGatewayTrustedRootCertificate `json:"trustedRootCertificates,omitempty"`
  2072  	// SslCertificates - SSL certificates of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2073  	SslCertificates *[]ApplicationGatewaySslCertificate `json:"sslCertificates,omitempty"`
  2074  	// FrontendIPConfigurations - Frontend IP addresses of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2075  	FrontendIPConfigurations *[]ApplicationGatewayFrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
  2076  	// FrontendPorts - Frontend ports of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2077  	FrontendPorts *[]ApplicationGatewayFrontendPort `json:"frontendPorts,omitempty"`
  2078  	// Probes - Probes of the application gateway resource.
  2079  	Probes *[]ApplicationGatewayProbe `json:"probes,omitempty"`
  2080  	// BackendAddressPools - Backend address pool of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2081  	BackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"backendAddressPools,omitempty"`
  2082  	// BackendHTTPSettingsCollection - Backend http settings of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2083  	BackendHTTPSettingsCollection *[]ApplicationGatewayBackendHTTPSettings `json:"backendHttpSettingsCollection,omitempty"`
  2084  	// HTTPListeners - Http listeners of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2085  	HTTPListeners *[]ApplicationGatewayHTTPListener `json:"httpListeners,omitempty"`
  2086  	// URLPathMaps - URL path map of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2087  	URLPathMaps *[]ApplicationGatewayURLPathMap `json:"urlPathMaps,omitempty"`
  2088  	// RequestRoutingRules - Request routing rules of the application gateway resource.
  2089  	RequestRoutingRules *[]ApplicationGatewayRequestRoutingRule `json:"requestRoutingRules,omitempty"`
  2090  	// RewriteRuleSets - Rewrite rules for the application gateway resource.
  2091  	RewriteRuleSets *[]ApplicationGatewayRewriteRuleSet `json:"rewriteRuleSets,omitempty"`
  2092  	// RedirectConfigurations - Redirect configurations of the application gateway resource. For default limits, see [Application Gateway limits](https://docs.microsoft.com/azure/azure-subscription-service-limits#application-gateway-limits).
  2093  	RedirectConfigurations *[]ApplicationGatewayRedirectConfiguration `json:"redirectConfigurations,omitempty"`
  2094  	// WebApplicationFirewallConfiguration - Web application firewall configuration.
  2095  	WebApplicationFirewallConfiguration *ApplicationGatewayWebApplicationFirewallConfiguration `json:"webApplicationFirewallConfiguration,omitempty"`
  2096  	// FirewallPolicy - Reference to the FirewallPolicy resource.
  2097  	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
  2098  	// EnableHTTP2 - Whether HTTP2 is enabled on the application gateway resource.
  2099  	EnableHTTP2 *bool `json:"enableHttp2,omitempty"`
  2100  	// EnableFips - Whether FIPS is enabled on the application gateway resource.
  2101  	EnableFips *bool `json:"enableFips,omitempty"`
  2102  	// AutoscaleConfiguration - Autoscale Configuration.
  2103  	AutoscaleConfiguration *ApplicationGatewayAutoscaleConfiguration `json:"autoscaleConfiguration,omitempty"`
  2104  	// ResourceGUID - READ-ONLY; The resource GUID property of the application gateway resource.
  2105  	ResourceGUID *string `json:"resourceGuid,omitempty"`
  2106  	// ProvisioningState - READ-ONLY; The provisioning state of the application gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  2107  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  2108  	// CustomErrorConfigurations - Custom error configurations of the application gateway resource.
  2109  	CustomErrorConfigurations *[]ApplicationGatewayCustomError `json:"customErrorConfigurations,omitempty"`
  2110  	// ForceFirewallPolicyAssociation - If true, associates a firewall policy with an application gateway regardless whether the policy differs from the WAF Config.
  2111  	ForceFirewallPolicyAssociation *bool `json:"forceFirewallPolicyAssociation,omitempty"`
  2112  }
  2113  
  2114  // MarshalJSON is the custom marshaler for ApplicationGatewayPropertiesFormat.
  2115  func (agpf ApplicationGatewayPropertiesFormat) MarshalJSON() ([]byte, error) {
  2116  	objectMap := make(map[string]interface{})
  2117  	if agpf.Sku != nil {
  2118  		objectMap["sku"] = agpf.Sku
  2119  	}
  2120  	if agpf.SslPolicy != nil {
  2121  		objectMap["sslPolicy"] = agpf.SslPolicy
  2122  	}
  2123  	if agpf.GatewayIPConfigurations != nil {
  2124  		objectMap["gatewayIPConfigurations"] = agpf.GatewayIPConfigurations
  2125  	}
  2126  	if agpf.AuthenticationCertificates != nil {
  2127  		objectMap["authenticationCertificates"] = agpf.AuthenticationCertificates
  2128  	}
  2129  	if agpf.TrustedRootCertificates != nil {
  2130  		objectMap["trustedRootCertificates"] = agpf.TrustedRootCertificates
  2131  	}
  2132  	if agpf.SslCertificates != nil {
  2133  		objectMap["sslCertificates"] = agpf.SslCertificates
  2134  	}
  2135  	if agpf.FrontendIPConfigurations != nil {
  2136  		objectMap["frontendIPConfigurations"] = agpf.FrontendIPConfigurations
  2137  	}
  2138  	if agpf.FrontendPorts != nil {
  2139  		objectMap["frontendPorts"] = agpf.FrontendPorts
  2140  	}
  2141  	if agpf.Probes != nil {
  2142  		objectMap["probes"] = agpf.Probes
  2143  	}
  2144  	if agpf.BackendAddressPools != nil {
  2145  		objectMap["backendAddressPools"] = agpf.BackendAddressPools
  2146  	}
  2147  	if agpf.BackendHTTPSettingsCollection != nil {
  2148  		objectMap["backendHttpSettingsCollection"] = agpf.BackendHTTPSettingsCollection
  2149  	}
  2150  	if agpf.HTTPListeners != nil {
  2151  		objectMap["httpListeners"] = agpf.HTTPListeners
  2152  	}
  2153  	if agpf.URLPathMaps != nil {
  2154  		objectMap["urlPathMaps"] = agpf.URLPathMaps
  2155  	}
  2156  	if agpf.RequestRoutingRules != nil {
  2157  		objectMap["requestRoutingRules"] = agpf.RequestRoutingRules
  2158  	}
  2159  	if agpf.RewriteRuleSets != nil {
  2160  		objectMap["rewriteRuleSets"] = agpf.RewriteRuleSets
  2161  	}
  2162  	if agpf.RedirectConfigurations != nil {
  2163  		objectMap["redirectConfigurations"] = agpf.RedirectConfigurations
  2164  	}
  2165  	if agpf.WebApplicationFirewallConfiguration != nil {
  2166  		objectMap["webApplicationFirewallConfiguration"] = agpf.WebApplicationFirewallConfiguration
  2167  	}
  2168  	if agpf.FirewallPolicy != nil {
  2169  		objectMap["firewallPolicy"] = agpf.FirewallPolicy
  2170  	}
  2171  	if agpf.EnableHTTP2 != nil {
  2172  		objectMap["enableHttp2"] = agpf.EnableHTTP2
  2173  	}
  2174  	if agpf.EnableFips != nil {
  2175  		objectMap["enableFips"] = agpf.EnableFips
  2176  	}
  2177  	if agpf.AutoscaleConfiguration != nil {
  2178  		objectMap["autoscaleConfiguration"] = agpf.AutoscaleConfiguration
  2179  	}
  2180  	if agpf.CustomErrorConfigurations != nil {
  2181  		objectMap["customErrorConfigurations"] = agpf.CustomErrorConfigurations
  2182  	}
  2183  	if agpf.ForceFirewallPolicyAssociation != nil {
  2184  		objectMap["forceFirewallPolicyAssociation"] = agpf.ForceFirewallPolicyAssociation
  2185  	}
  2186  	return json.Marshal(objectMap)
  2187  }
  2188  
  2189  // ApplicationGatewayRedirectConfiguration redirect configuration of an application gateway.
  2190  type ApplicationGatewayRedirectConfiguration struct {
  2191  	// ApplicationGatewayRedirectConfigurationPropertiesFormat - Properties of the application gateway redirect configuration.
  2192  	*ApplicationGatewayRedirectConfigurationPropertiesFormat `json:"properties,omitempty"`
  2193  	// Name - Name of the redirect configuration that is unique within an Application Gateway.
  2194  	Name *string `json:"name,omitempty"`
  2195  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  2196  	Etag *string `json:"etag,omitempty"`
  2197  	// Type - READ-ONLY; Type of the resource.
  2198  	Type *string `json:"type,omitempty"`
  2199  	// ID - Resource ID.
  2200  	ID *string `json:"id,omitempty"`
  2201  }
  2202  
  2203  // MarshalJSON is the custom marshaler for ApplicationGatewayRedirectConfiguration.
  2204  func (agrc ApplicationGatewayRedirectConfiguration) MarshalJSON() ([]byte, error) {
  2205  	objectMap := make(map[string]interface{})
  2206  	if agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat != nil {
  2207  		objectMap["properties"] = agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat
  2208  	}
  2209  	if agrc.Name != nil {
  2210  		objectMap["name"] = agrc.Name
  2211  	}
  2212  	if agrc.ID != nil {
  2213  		objectMap["id"] = agrc.ID
  2214  	}
  2215  	return json.Marshal(objectMap)
  2216  }
  2217  
  2218  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRedirectConfiguration struct.
  2219  func (agrc *ApplicationGatewayRedirectConfiguration) UnmarshalJSON(body []byte) error {
  2220  	var m map[string]*json.RawMessage
  2221  	err := json.Unmarshal(body, &m)
  2222  	if err != nil {
  2223  		return err
  2224  	}
  2225  	for k, v := range m {
  2226  		switch k {
  2227  		case "properties":
  2228  			if v != nil {
  2229  				var applicationGatewayRedirectConfigurationPropertiesFormat ApplicationGatewayRedirectConfigurationPropertiesFormat
  2230  				err = json.Unmarshal(*v, &applicationGatewayRedirectConfigurationPropertiesFormat)
  2231  				if err != nil {
  2232  					return err
  2233  				}
  2234  				agrc.ApplicationGatewayRedirectConfigurationPropertiesFormat = &applicationGatewayRedirectConfigurationPropertiesFormat
  2235  			}
  2236  		case "name":
  2237  			if v != nil {
  2238  				var name string
  2239  				err = json.Unmarshal(*v, &name)
  2240  				if err != nil {
  2241  					return err
  2242  				}
  2243  				agrc.Name = &name
  2244  			}
  2245  		case "etag":
  2246  			if v != nil {
  2247  				var etag string
  2248  				err = json.Unmarshal(*v, &etag)
  2249  				if err != nil {
  2250  					return err
  2251  				}
  2252  				agrc.Etag = &etag
  2253  			}
  2254  		case "type":
  2255  			if v != nil {
  2256  				var typeVar string
  2257  				err = json.Unmarshal(*v, &typeVar)
  2258  				if err != nil {
  2259  					return err
  2260  				}
  2261  				agrc.Type = &typeVar
  2262  			}
  2263  		case "id":
  2264  			if v != nil {
  2265  				var ID string
  2266  				err = json.Unmarshal(*v, &ID)
  2267  				if err != nil {
  2268  					return err
  2269  				}
  2270  				agrc.ID = &ID
  2271  			}
  2272  		}
  2273  	}
  2274  
  2275  	return nil
  2276  }
  2277  
  2278  // ApplicationGatewayRedirectConfigurationPropertiesFormat properties of redirect configuration of the
  2279  // application gateway.
  2280  type ApplicationGatewayRedirectConfigurationPropertiesFormat struct {
  2281  	// RedirectType - HTTP redirection type. Possible values include: 'Permanent', 'Found', 'SeeOther', 'Temporary'
  2282  	RedirectType ApplicationGatewayRedirectType `json:"redirectType,omitempty"`
  2283  	// TargetListener - Reference to a listener to redirect the request to.
  2284  	TargetListener *SubResource `json:"targetListener,omitempty"`
  2285  	// TargetURL - Url to redirect the request to.
  2286  	TargetURL *string `json:"targetUrl,omitempty"`
  2287  	// IncludePath - Include path in the redirected url.
  2288  	IncludePath *bool `json:"includePath,omitempty"`
  2289  	// IncludeQueryString - Include query string in the redirected url.
  2290  	IncludeQueryString *bool `json:"includeQueryString,omitempty"`
  2291  	// RequestRoutingRules - Request routing specifying redirect configuration.
  2292  	RequestRoutingRules *[]SubResource `json:"requestRoutingRules,omitempty"`
  2293  	// URLPathMaps - Url path maps specifying default redirect configuration.
  2294  	URLPathMaps *[]SubResource `json:"urlPathMaps,omitempty"`
  2295  	// PathRules - Path rules specifying redirect configuration.
  2296  	PathRules *[]SubResource `json:"pathRules,omitempty"`
  2297  }
  2298  
  2299  // ApplicationGatewayRequestRoutingRule request routing rule of an application gateway.
  2300  type ApplicationGatewayRequestRoutingRule struct {
  2301  	// ApplicationGatewayRequestRoutingRulePropertiesFormat - Properties of the application gateway request routing rule.
  2302  	*ApplicationGatewayRequestRoutingRulePropertiesFormat `json:"properties,omitempty"`
  2303  	// Name - Name of the request routing rule that is unique within an Application Gateway.
  2304  	Name *string `json:"name,omitempty"`
  2305  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  2306  	Etag *string `json:"etag,omitempty"`
  2307  	// Type - READ-ONLY; Type of the resource.
  2308  	Type *string `json:"type,omitempty"`
  2309  	// ID - Resource ID.
  2310  	ID *string `json:"id,omitempty"`
  2311  }
  2312  
  2313  // MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRule.
  2314  func (agrrr ApplicationGatewayRequestRoutingRule) MarshalJSON() ([]byte, error) {
  2315  	objectMap := make(map[string]interface{})
  2316  	if agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat != nil {
  2317  		objectMap["properties"] = agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat
  2318  	}
  2319  	if agrrr.Name != nil {
  2320  		objectMap["name"] = agrrr.Name
  2321  	}
  2322  	if agrrr.ID != nil {
  2323  		objectMap["id"] = agrrr.ID
  2324  	}
  2325  	return json.Marshal(objectMap)
  2326  }
  2327  
  2328  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRequestRoutingRule struct.
  2329  func (agrrr *ApplicationGatewayRequestRoutingRule) UnmarshalJSON(body []byte) error {
  2330  	var m map[string]*json.RawMessage
  2331  	err := json.Unmarshal(body, &m)
  2332  	if err != nil {
  2333  		return err
  2334  	}
  2335  	for k, v := range m {
  2336  		switch k {
  2337  		case "properties":
  2338  			if v != nil {
  2339  				var applicationGatewayRequestRoutingRulePropertiesFormat ApplicationGatewayRequestRoutingRulePropertiesFormat
  2340  				err = json.Unmarshal(*v, &applicationGatewayRequestRoutingRulePropertiesFormat)
  2341  				if err != nil {
  2342  					return err
  2343  				}
  2344  				agrrr.ApplicationGatewayRequestRoutingRulePropertiesFormat = &applicationGatewayRequestRoutingRulePropertiesFormat
  2345  			}
  2346  		case "name":
  2347  			if v != nil {
  2348  				var name string
  2349  				err = json.Unmarshal(*v, &name)
  2350  				if err != nil {
  2351  					return err
  2352  				}
  2353  				agrrr.Name = &name
  2354  			}
  2355  		case "etag":
  2356  			if v != nil {
  2357  				var etag string
  2358  				err = json.Unmarshal(*v, &etag)
  2359  				if err != nil {
  2360  					return err
  2361  				}
  2362  				agrrr.Etag = &etag
  2363  			}
  2364  		case "type":
  2365  			if v != nil {
  2366  				var typeVar string
  2367  				err = json.Unmarshal(*v, &typeVar)
  2368  				if err != nil {
  2369  					return err
  2370  				}
  2371  				agrrr.Type = &typeVar
  2372  			}
  2373  		case "id":
  2374  			if v != nil {
  2375  				var ID string
  2376  				err = json.Unmarshal(*v, &ID)
  2377  				if err != nil {
  2378  					return err
  2379  				}
  2380  				agrrr.ID = &ID
  2381  			}
  2382  		}
  2383  	}
  2384  
  2385  	return nil
  2386  }
  2387  
  2388  // ApplicationGatewayRequestRoutingRulePropertiesFormat properties of request routing rule of the
  2389  // application gateway.
  2390  type ApplicationGatewayRequestRoutingRulePropertiesFormat struct {
  2391  	// RuleType - Rule type. Possible values include: 'Basic', 'PathBasedRouting'
  2392  	RuleType ApplicationGatewayRequestRoutingRuleType `json:"ruleType,omitempty"`
  2393  	// Priority - Priority of the request routing rule.
  2394  	Priority *int32 `json:"priority,omitempty"`
  2395  	// BackendAddressPool - Backend address pool resource of the application gateway.
  2396  	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
  2397  	// BackendHTTPSettings - Backend http settings resource of the application gateway.
  2398  	BackendHTTPSettings *SubResource `json:"backendHttpSettings,omitempty"`
  2399  	// HTTPListener - Http listener resource of the application gateway.
  2400  	HTTPListener *SubResource `json:"httpListener,omitempty"`
  2401  	// URLPathMap - URL path map resource of the application gateway.
  2402  	URLPathMap *SubResource `json:"urlPathMap,omitempty"`
  2403  	// RewriteRuleSet - Rewrite Rule Set resource in Basic rule of the application gateway.
  2404  	RewriteRuleSet *SubResource `json:"rewriteRuleSet,omitempty"`
  2405  	// RedirectConfiguration - Redirect configuration resource of the application gateway.
  2406  	RedirectConfiguration *SubResource `json:"redirectConfiguration,omitempty"`
  2407  	// ProvisioningState - READ-ONLY; The provisioning state of the request routing rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  2408  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  2409  }
  2410  
  2411  // MarshalJSON is the custom marshaler for ApplicationGatewayRequestRoutingRulePropertiesFormat.
  2412  func (agrrrpf ApplicationGatewayRequestRoutingRulePropertiesFormat) MarshalJSON() ([]byte, error) {
  2413  	objectMap := make(map[string]interface{})
  2414  	if agrrrpf.RuleType != "" {
  2415  		objectMap["ruleType"] = agrrrpf.RuleType
  2416  	}
  2417  	if agrrrpf.Priority != nil {
  2418  		objectMap["priority"] = agrrrpf.Priority
  2419  	}
  2420  	if agrrrpf.BackendAddressPool != nil {
  2421  		objectMap["backendAddressPool"] = agrrrpf.BackendAddressPool
  2422  	}
  2423  	if agrrrpf.BackendHTTPSettings != nil {
  2424  		objectMap["backendHttpSettings"] = agrrrpf.BackendHTTPSettings
  2425  	}
  2426  	if agrrrpf.HTTPListener != nil {
  2427  		objectMap["httpListener"] = agrrrpf.HTTPListener
  2428  	}
  2429  	if agrrrpf.URLPathMap != nil {
  2430  		objectMap["urlPathMap"] = agrrrpf.URLPathMap
  2431  	}
  2432  	if agrrrpf.RewriteRuleSet != nil {
  2433  		objectMap["rewriteRuleSet"] = agrrrpf.RewriteRuleSet
  2434  	}
  2435  	if agrrrpf.RedirectConfiguration != nil {
  2436  		objectMap["redirectConfiguration"] = agrrrpf.RedirectConfiguration
  2437  	}
  2438  	return json.Marshal(objectMap)
  2439  }
  2440  
  2441  // ApplicationGatewayRewriteRule rewrite rule of an application gateway.
  2442  type ApplicationGatewayRewriteRule struct {
  2443  	// Name - Name of the rewrite rule that is unique within an Application Gateway.
  2444  	Name *string `json:"name,omitempty"`
  2445  	// RuleSequence - Rule Sequence of the rewrite rule that determines the order of execution of a particular rule in a RewriteRuleSet.
  2446  	RuleSequence *int32 `json:"ruleSequence,omitempty"`
  2447  	// Conditions - Conditions based on which the action set execution will be evaluated.
  2448  	Conditions *[]ApplicationGatewayRewriteRuleCondition `json:"conditions,omitempty"`
  2449  	// ActionSet - Set of actions to be done as part of the rewrite Rule.
  2450  	ActionSet *ApplicationGatewayRewriteRuleActionSet `json:"actionSet,omitempty"`
  2451  }
  2452  
  2453  // ApplicationGatewayRewriteRuleActionSet set of actions in the Rewrite Rule in Application Gateway.
  2454  type ApplicationGatewayRewriteRuleActionSet struct {
  2455  	// RequestHeaderConfigurations - Request Header Actions in the Action Set.
  2456  	RequestHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"requestHeaderConfigurations,omitempty"`
  2457  	// ResponseHeaderConfigurations - Response Header Actions in the Action Set.
  2458  	ResponseHeaderConfigurations *[]ApplicationGatewayHeaderConfiguration `json:"responseHeaderConfigurations,omitempty"`
  2459  	// URLConfiguration - Url Configuration Action in the Action Set.
  2460  	URLConfiguration *ApplicationGatewayURLConfiguration `json:"urlConfiguration,omitempty"`
  2461  }
  2462  
  2463  // ApplicationGatewayRewriteRuleCondition set of conditions in the Rewrite Rule in Application Gateway.
  2464  type ApplicationGatewayRewriteRuleCondition struct {
  2465  	// Variable - The condition parameter of the RewriteRuleCondition.
  2466  	Variable *string `json:"variable,omitempty"`
  2467  	// Pattern - The pattern, either fixed string or regular expression, that evaluates the truthfulness of the condition.
  2468  	Pattern *string `json:"pattern,omitempty"`
  2469  	// IgnoreCase - Setting this paramter to truth value with force the pattern to do a case in-sensitive comparison.
  2470  	IgnoreCase *bool `json:"ignoreCase,omitempty"`
  2471  	// Negate - Setting this value as truth will force to check the negation of the condition given by the user.
  2472  	Negate *bool `json:"negate,omitempty"`
  2473  }
  2474  
  2475  // ApplicationGatewayRewriteRuleSet rewrite rule set of an application gateway.
  2476  type ApplicationGatewayRewriteRuleSet struct {
  2477  	// ApplicationGatewayRewriteRuleSetPropertiesFormat - Properties of the application gateway rewrite rule set.
  2478  	*ApplicationGatewayRewriteRuleSetPropertiesFormat `json:"properties,omitempty"`
  2479  	// Name - Name of the rewrite rule set that is unique within an Application Gateway.
  2480  	Name *string `json:"name,omitempty"`
  2481  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  2482  	Etag *string `json:"etag,omitempty"`
  2483  	// ID - Resource ID.
  2484  	ID *string `json:"id,omitempty"`
  2485  }
  2486  
  2487  // MarshalJSON is the custom marshaler for ApplicationGatewayRewriteRuleSet.
  2488  func (agrrs ApplicationGatewayRewriteRuleSet) MarshalJSON() ([]byte, error) {
  2489  	objectMap := make(map[string]interface{})
  2490  	if agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat != nil {
  2491  		objectMap["properties"] = agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat
  2492  	}
  2493  	if agrrs.Name != nil {
  2494  		objectMap["name"] = agrrs.Name
  2495  	}
  2496  	if agrrs.ID != nil {
  2497  		objectMap["id"] = agrrs.ID
  2498  	}
  2499  	return json.Marshal(objectMap)
  2500  }
  2501  
  2502  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayRewriteRuleSet struct.
  2503  func (agrrs *ApplicationGatewayRewriteRuleSet) UnmarshalJSON(body []byte) error {
  2504  	var m map[string]*json.RawMessage
  2505  	err := json.Unmarshal(body, &m)
  2506  	if err != nil {
  2507  		return err
  2508  	}
  2509  	for k, v := range m {
  2510  		switch k {
  2511  		case "properties":
  2512  			if v != nil {
  2513  				var applicationGatewayRewriteRuleSetPropertiesFormat ApplicationGatewayRewriteRuleSetPropertiesFormat
  2514  				err = json.Unmarshal(*v, &applicationGatewayRewriteRuleSetPropertiesFormat)
  2515  				if err != nil {
  2516  					return err
  2517  				}
  2518  				agrrs.ApplicationGatewayRewriteRuleSetPropertiesFormat = &applicationGatewayRewriteRuleSetPropertiesFormat
  2519  			}
  2520  		case "name":
  2521  			if v != nil {
  2522  				var name string
  2523  				err = json.Unmarshal(*v, &name)
  2524  				if err != nil {
  2525  					return err
  2526  				}
  2527  				agrrs.Name = &name
  2528  			}
  2529  		case "etag":
  2530  			if v != nil {
  2531  				var etag string
  2532  				err = json.Unmarshal(*v, &etag)
  2533  				if err != nil {
  2534  					return err
  2535  				}
  2536  				agrrs.Etag = &etag
  2537  			}
  2538  		case "id":
  2539  			if v != nil {
  2540  				var ID string
  2541  				err = json.Unmarshal(*v, &ID)
  2542  				if err != nil {
  2543  					return err
  2544  				}
  2545  				agrrs.ID = &ID
  2546  			}
  2547  		}
  2548  	}
  2549  
  2550  	return nil
  2551  }
  2552  
  2553  // ApplicationGatewayRewriteRuleSetPropertiesFormat properties of rewrite rule set of the application
  2554  // gateway.
  2555  type ApplicationGatewayRewriteRuleSetPropertiesFormat struct {
  2556  	// RewriteRules - Rewrite rules in the rewrite rule set.
  2557  	RewriteRules *[]ApplicationGatewayRewriteRule `json:"rewriteRules,omitempty"`
  2558  	// ProvisioningState - READ-ONLY; The provisioning state of the rewrite rule set resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  2559  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  2560  }
  2561  
  2562  // MarshalJSON is the custom marshaler for ApplicationGatewayRewriteRuleSetPropertiesFormat.
  2563  func (agrrspf ApplicationGatewayRewriteRuleSetPropertiesFormat) MarshalJSON() ([]byte, error) {
  2564  	objectMap := make(map[string]interface{})
  2565  	if agrrspf.RewriteRules != nil {
  2566  		objectMap["rewriteRules"] = agrrspf.RewriteRules
  2567  	}
  2568  	return json.Marshal(objectMap)
  2569  }
  2570  
  2571  // ApplicationGatewaysBackendHealthFuture an abstraction for monitoring and retrieving the results of a
  2572  // long-running operation.
  2573  type ApplicationGatewaysBackendHealthFuture struct {
  2574  	azure.FutureAPI
  2575  	// Result returns the result of the asynchronous operation.
  2576  	// If the operation has not completed it will return an error.
  2577  	Result func(ApplicationGatewaysClient) (ApplicationGatewayBackendHealth, error)
  2578  }
  2579  
  2580  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  2581  func (future *ApplicationGatewaysBackendHealthFuture) UnmarshalJSON(body []byte) error {
  2582  	var azFuture azure.Future
  2583  	if err := json.Unmarshal(body, &azFuture); err != nil {
  2584  		return err
  2585  	}
  2586  	future.FutureAPI = &azFuture
  2587  	future.Result = future.result
  2588  	return nil
  2589  }
  2590  
  2591  // result is the default implementation for ApplicationGatewaysBackendHealthFuture.Result.
  2592  func (future *ApplicationGatewaysBackendHealthFuture) result(client ApplicationGatewaysClient) (agbh ApplicationGatewayBackendHealth, err error) {
  2593  	var done bool
  2594  	done, err = future.DoneWithContext(context.Background(), client)
  2595  	if err != nil {
  2596  		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", future.Response(), "Polling failure")
  2597  		return
  2598  	}
  2599  	if !done {
  2600  		agbh.Response.Response = future.Response()
  2601  		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthFuture")
  2602  		return
  2603  	}
  2604  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  2605  	if agbh.Response.Response, err = future.GetResult(sender); err == nil && agbh.Response.Response.StatusCode != http.StatusNoContent {
  2606  		agbh, err = client.BackendHealthResponder(agbh.Response.Response)
  2607  		if err != nil {
  2608  			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthFuture", "Result", agbh.Response.Response, "Failure responding to request")
  2609  		}
  2610  	}
  2611  	return
  2612  }
  2613  
  2614  // ApplicationGatewaysBackendHealthOnDemandFuture an abstraction for monitoring and retrieving the results
  2615  // of a long-running operation.
  2616  type ApplicationGatewaysBackendHealthOnDemandFuture struct {
  2617  	azure.FutureAPI
  2618  	// Result returns the result of the asynchronous operation.
  2619  	// If the operation has not completed it will return an error.
  2620  	Result func(ApplicationGatewaysClient) (ApplicationGatewayBackendHealthOnDemand, error)
  2621  }
  2622  
  2623  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  2624  func (future *ApplicationGatewaysBackendHealthOnDemandFuture) UnmarshalJSON(body []byte) error {
  2625  	var azFuture azure.Future
  2626  	if err := json.Unmarshal(body, &azFuture); err != nil {
  2627  		return err
  2628  	}
  2629  	future.FutureAPI = &azFuture
  2630  	future.Result = future.result
  2631  	return nil
  2632  }
  2633  
  2634  // result is the default implementation for ApplicationGatewaysBackendHealthOnDemandFuture.Result.
  2635  func (future *ApplicationGatewaysBackendHealthOnDemandFuture) result(client ApplicationGatewaysClient) (agbhod ApplicationGatewayBackendHealthOnDemand, err error) {
  2636  	var done bool
  2637  	done, err = future.DoneWithContext(context.Background(), client)
  2638  	if err != nil {
  2639  		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", future.Response(), "Polling failure")
  2640  		return
  2641  	}
  2642  	if !done {
  2643  		agbhod.Response.Response = future.Response()
  2644  		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysBackendHealthOnDemandFuture")
  2645  		return
  2646  	}
  2647  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  2648  	if agbhod.Response.Response, err = future.GetResult(sender); err == nil && agbhod.Response.Response.StatusCode != http.StatusNoContent {
  2649  		agbhod, err = client.BackendHealthOnDemandResponder(agbhod.Response.Response)
  2650  		if err != nil {
  2651  			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysBackendHealthOnDemandFuture", "Result", agbhod.Response.Response, "Failure responding to request")
  2652  		}
  2653  	}
  2654  	return
  2655  }
  2656  
  2657  // ApplicationGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
  2658  // long-running operation.
  2659  type ApplicationGatewaysCreateOrUpdateFuture struct {
  2660  	azure.FutureAPI
  2661  	// Result returns the result of the asynchronous operation.
  2662  	// If the operation has not completed it will return an error.
  2663  	Result func(ApplicationGatewaysClient) (ApplicationGateway, error)
  2664  }
  2665  
  2666  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  2667  func (future *ApplicationGatewaysCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
  2668  	var azFuture azure.Future
  2669  	if err := json.Unmarshal(body, &azFuture); err != nil {
  2670  		return err
  2671  	}
  2672  	future.FutureAPI = &azFuture
  2673  	future.Result = future.result
  2674  	return nil
  2675  }
  2676  
  2677  // result is the default implementation for ApplicationGatewaysCreateOrUpdateFuture.Result.
  2678  func (future *ApplicationGatewaysCreateOrUpdateFuture) result(client ApplicationGatewaysClient) (ag ApplicationGateway, err error) {
  2679  	var done bool
  2680  	done, err = future.DoneWithContext(context.Background(), client)
  2681  	if err != nil {
  2682  		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
  2683  		return
  2684  	}
  2685  	if !done {
  2686  		ag.Response.Response = future.Response()
  2687  		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysCreateOrUpdateFuture")
  2688  		return
  2689  	}
  2690  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  2691  	if ag.Response.Response, err = future.GetResult(sender); err == nil && ag.Response.Response.StatusCode != http.StatusNoContent {
  2692  		ag, err = client.CreateOrUpdateResponder(ag.Response.Response)
  2693  		if err != nil {
  2694  			err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysCreateOrUpdateFuture", "Result", ag.Response.Response, "Failure responding to request")
  2695  		}
  2696  	}
  2697  	return
  2698  }
  2699  
  2700  // ApplicationGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
  2701  // long-running operation.
  2702  type ApplicationGatewaysDeleteFuture struct {
  2703  	azure.FutureAPI
  2704  	// Result returns the result of the asynchronous operation.
  2705  	// If the operation has not completed it will return an error.
  2706  	Result func(ApplicationGatewaysClient) (autorest.Response, error)
  2707  }
  2708  
  2709  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  2710  func (future *ApplicationGatewaysDeleteFuture) UnmarshalJSON(body []byte) error {
  2711  	var azFuture azure.Future
  2712  	if err := json.Unmarshal(body, &azFuture); err != nil {
  2713  		return err
  2714  	}
  2715  	future.FutureAPI = &azFuture
  2716  	future.Result = future.result
  2717  	return nil
  2718  }
  2719  
  2720  // result is the default implementation for ApplicationGatewaysDeleteFuture.Result.
  2721  func (future *ApplicationGatewaysDeleteFuture) result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
  2722  	var done bool
  2723  	done, err = future.DoneWithContext(context.Background(), client)
  2724  	if err != nil {
  2725  		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
  2726  		return
  2727  	}
  2728  	if !done {
  2729  		ar.Response = future.Response()
  2730  		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysDeleteFuture")
  2731  		return
  2732  	}
  2733  	ar.Response = future.Response()
  2734  	return
  2735  }
  2736  
  2737  // ApplicationGatewaySku SKU of an application gateway.
  2738  type ApplicationGatewaySku struct {
  2739  	// Name - Name of an application gateway SKU. Possible values include: 'StandardSmall', 'StandardMedium', 'StandardLarge', 'WAFMedium', 'WAFLarge', 'StandardV2', 'WAFV2'
  2740  	Name ApplicationGatewaySkuName `json:"name,omitempty"`
  2741  	// Tier - Tier of an application gateway. Possible values include: 'ApplicationGatewayTierStandard', 'ApplicationGatewayTierWAF', 'ApplicationGatewayTierStandardV2', 'ApplicationGatewayTierWAFV2'
  2742  	Tier ApplicationGatewayTier `json:"tier,omitempty"`
  2743  	// Capacity - Capacity (instance count) of an application gateway.
  2744  	Capacity *int32 `json:"capacity,omitempty"`
  2745  }
  2746  
  2747  // ApplicationGatewaySslCertificate SSL certificates of an application gateway.
  2748  type ApplicationGatewaySslCertificate struct {
  2749  	// ApplicationGatewaySslCertificatePropertiesFormat - Properties of the application gateway SSL certificate.
  2750  	*ApplicationGatewaySslCertificatePropertiesFormat `json:"properties,omitempty"`
  2751  	// Name - Name of the SSL certificate that is unique within an Application Gateway.
  2752  	Name *string `json:"name,omitempty"`
  2753  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  2754  	Etag *string `json:"etag,omitempty"`
  2755  	// Type - READ-ONLY; Type of the resource.
  2756  	Type *string `json:"type,omitempty"`
  2757  	// ID - Resource ID.
  2758  	ID *string `json:"id,omitempty"`
  2759  }
  2760  
  2761  // MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificate.
  2762  func (agsc ApplicationGatewaySslCertificate) MarshalJSON() ([]byte, error) {
  2763  	objectMap := make(map[string]interface{})
  2764  	if agsc.ApplicationGatewaySslCertificatePropertiesFormat != nil {
  2765  		objectMap["properties"] = agsc.ApplicationGatewaySslCertificatePropertiesFormat
  2766  	}
  2767  	if agsc.Name != nil {
  2768  		objectMap["name"] = agsc.Name
  2769  	}
  2770  	if agsc.ID != nil {
  2771  		objectMap["id"] = agsc.ID
  2772  	}
  2773  	return json.Marshal(objectMap)
  2774  }
  2775  
  2776  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslCertificate struct.
  2777  func (agsc *ApplicationGatewaySslCertificate) UnmarshalJSON(body []byte) error {
  2778  	var m map[string]*json.RawMessage
  2779  	err := json.Unmarshal(body, &m)
  2780  	if err != nil {
  2781  		return err
  2782  	}
  2783  	for k, v := range m {
  2784  		switch k {
  2785  		case "properties":
  2786  			if v != nil {
  2787  				var applicationGatewaySslCertificatePropertiesFormat ApplicationGatewaySslCertificatePropertiesFormat
  2788  				err = json.Unmarshal(*v, &applicationGatewaySslCertificatePropertiesFormat)
  2789  				if err != nil {
  2790  					return err
  2791  				}
  2792  				agsc.ApplicationGatewaySslCertificatePropertiesFormat = &applicationGatewaySslCertificatePropertiesFormat
  2793  			}
  2794  		case "name":
  2795  			if v != nil {
  2796  				var name string
  2797  				err = json.Unmarshal(*v, &name)
  2798  				if err != nil {
  2799  					return err
  2800  				}
  2801  				agsc.Name = &name
  2802  			}
  2803  		case "etag":
  2804  			if v != nil {
  2805  				var etag string
  2806  				err = json.Unmarshal(*v, &etag)
  2807  				if err != nil {
  2808  					return err
  2809  				}
  2810  				agsc.Etag = &etag
  2811  			}
  2812  		case "type":
  2813  			if v != nil {
  2814  				var typeVar string
  2815  				err = json.Unmarshal(*v, &typeVar)
  2816  				if err != nil {
  2817  					return err
  2818  				}
  2819  				agsc.Type = &typeVar
  2820  			}
  2821  		case "id":
  2822  			if v != nil {
  2823  				var ID string
  2824  				err = json.Unmarshal(*v, &ID)
  2825  				if err != nil {
  2826  					return err
  2827  				}
  2828  				agsc.ID = &ID
  2829  			}
  2830  		}
  2831  	}
  2832  
  2833  	return nil
  2834  }
  2835  
  2836  // ApplicationGatewaySslCertificatePropertiesFormat properties of SSL certificates of an application
  2837  // gateway.
  2838  type ApplicationGatewaySslCertificatePropertiesFormat struct {
  2839  	// Data - Base-64 encoded pfx certificate. Only applicable in PUT Request.
  2840  	Data *string `json:"data,omitempty"`
  2841  	// Password - Password for the pfx file specified in data. Only applicable in PUT request.
  2842  	Password *string `json:"password,omitempty"`
  2843  	// PublicCertData - READ-ONLY; Base-64 encoded Public cert data corresponding to pfx specified in data. Only applicable in GET request.
  2844  	PublicCertData *string `json:"publicCertData,omitempty"`
  2845  	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
  2846  	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
  2847  	// ProvisioningState - READ-ONLY; The provisioning state of the SSL certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  2848  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  2849  }
  2850  
  2851  // MarshalJSON is the custom marshaler for ApplicationGatewaySslCertificatePropertiesFormat.
  2852  func (agscpf ApplicationGatewaySslCertificatePropertiesFormat) MarshalJSON() ([]byte, error) {
  2853  	objectMap := make(map[string]interface{})
  2854  	if agscpf.Data != nil {
  2855  		objectMap["data"] = agscpf.Data
  2856  	}
  2857  	if agscpf.Password != nil {
  2858  		objectMap["password"] = agscpf.Password
  2859  	}
  2860  	if agscpf.KeyVaultSecretID != nil {
  2861  		objectMap["keyVaultSecretId"] = agscpf.KeyVaultSecretID
  2862  	}
  2863  	return json.Marshal(objectMap)
  2864  }
  2865  
  2866  // ApplicationGatewaySslPolicy application Gateway Ssl policy.
  2867  type ApplicationGatewaySslPolicy struct {
  2868  	// DisabledSslProtocols - Ssl protocols to be disabled on application gateway.
  2869  	DisabledSslProtocols *[]ApplicationGatewaySslProtocol `json:"disabledSslProtocols,omitempty"`
  2870  	// PolicyType - Type of Ssl Policy. Possible values include: 'Predefined', 'Custom'
  2871  	PolicyType ApplicationGatewaySslPolicyType `json:"policyType,omitempty"`
  2872  	// PolicyName - Name of Ssl predefined policy. Possible values include: 'AppGwSslPolicy20150501', 'AppGwSslPolicy20170401', 'AppGwSslPolicy20170401S'
  2873  	PolicyName ApplicationGatewaySslPolicyName `json:"policyName,omitempty"`
  2874  	// CipherSuites - Ssl cipher suites to be enabled in the specified order to application gateway.
  2875  	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
  2876  	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
  2877  	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
  2878  }
  2879  
  2880  // ApplicationGatewaySslPredefinedPolicy an Ssl predefined policy.
  2881  type ApplicationGatewaySslPredefinedPolicy struct {
  2882  	autorest.Response `json:"-"`
  2883  	// Name - Name of the Ssl predefined policy.
  2884  	Name *string `json:"name,omitempty"`
  2885  	// ApplicationGatewaySslPredefinedPolicyPropertiesFormat - Properties of the application gateway SSL predefined policy.
  2886  	*ApplicationGatewaySslPredefinedPolicyPropertiesFormat `json:"properties,omitempty"`
  2887  	// ID - Resource ID.
  2888  	ID *string `json:"id,omitempty"`
  2889  }
  2890  
  2891  // MarshalJSON is the custom marshaler for ApplicationGatewaySslPredefinedPolicy.
  2892  func (agspp ApplicationGatewaySslPredefinedPolicy) MarshalJSON() ([]byte, error) {
  2893  	objectMap := make(map[string]interface{})
  2894  	if agspp.Name != nil {
  2895  		objectMap["name"] = agspp.Name
  2896  	}
  2897  	if agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat != nil {
  2898  		objectMap["properties"] = agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat
  2899  	}
  2900  	if agspp.ID != nil {
  2901  		objectMap["id"] = agspp.ID
  2902  	}
  2903  	return json.Marshal(objectMap)
  2904  }
  2905  
  2906  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewaySslPredefinedPolicy struct.
  2907  func (agspp *ApplicationGatewaySslPredefinedPolicy) UnmarshalJSON(body []byte) error {
  2908  	var m map[string]*json.RawMessage
  2909  	err := json.Unmarshal(body, &m)
  2910  	if err != nil {
  2911  		return err
  2912  	}
  2913  	for k, v := range m {
  2914  		switch k {
  2915  		case "name":
  2916  			if v != nil {
  2917  				var name string
  2918  				err = json.Unmarshal(*v, &name)
  2919  				if err != nil {
  2920  					return err
  2921  				}
  2922  				agspp.Name = &name
  2923  			}
  2924  		case "properties":
  2925  			if v != nil {
  2926  				var applicationGatewaySslPredefinedPolicyPropertiesFormat ApplicationGatewaySslPredefinedPolicyPropertiesFormat
  2927  				err = json.Unmarshal(*v, &applicationGatewaySslPredefinedPolicyPropertiesFormat)
  2928  				if err != nil {
  2929  					return err
  2930  				}
  2931  				agspp.ApplicationGatewaySslPredefinedPolicyPropertiesFormat = &applicationGatewaySslPredefinedPolicyPropertiesFormat
  2932  			}
  2933  		case "id":
  2934  			if v != nil {
  2935  				var ID string
  2936  				err = json.Unmarshal(*v, &ID)
  2937  				if err != nil {
  2938  					return err
  2939  				}
  2940  				agspp.ID = &ID
  2941  			}
  2942  		}
  2943  	}
  2944  
  2945  	return nil
  2946  }
  2947  
  2948  // ApplicationGatewaySslPredefinedPolicyPropertiesFormat properties of
  2949  // ApplicationGatewaySslPredefinedPolicy.
  2950  type ApplicationGatewaySslPredefinedPolicyPropertiesFormat struct {
  2951  	// CipherSuites - Ssl cipher suites to be enabled in the specified order for application gateway.
  2952  	CipherSuites *[]ApplicationGatewaySslCipherSuite `json:"cipherSuites,omitempty"`
  2953  	// MinProtocolVersion - Minimum version of Ssl protocol to be supported on application gateway. Possible values include: 'TLSv10', 'TLSv11', 'TLSv12'
  2954  	MinProtocolVersion ApplicationGatewaySslProtocol `json:"minProtocolVersion,omitempty"`
  2955  }
  2956  
  2957  // ApplicationGatewaysStartFuture an abstraction for monitoring and retrieving the results of a
  2958  // long-running operation.
  2959  type ApplicationGatewaysStartFuture struct {
  2960  	azure.FutureAPI
  2961  	// Result returns the result of the asynchronous operation.
  2962  	// If the operation has not completed it will return an error.
  2963  	Result func(ApplicationGatewaysClient) (autorest.Response, error)
  2964  }
  2965  
  2966  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  2967  func (future *ApplicationGatewaysStartFuture) UnmarshalJSON(body []byte) error {
  2968  	var azFuture azure.Future
  2969  	if err := json.Unmarshal(body, &azFuture); err != nil {
  2970  		return err
  2971  	}
  2972  	future.FutureAPI = &azFuture
  2973  	future.Result = future.result
  2974  	return nil
  2975  }
  2976  
  2977  // result is the default implementation for ApplicationGatewaysStartFuture.Result.
  2978  func (future *ApplicationGatewaysStartFuture) result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
  2979  	var done bool
  2980  	done, err = future.DoneWithContext(context.Background(), client)
  2981  	if err != nil {
  2982  		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStartFuture", "Result", future.Response(), "Polling failure")
  2983  		return
  2984  	}
  2985  	if !done {
  2986  		ar.Response = future.Response()
  2987  		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStartFuture")
  2988  		return
  2989  	}
  2990  	ar.Response = future.Response()
  2991  	return
  2992  }
  2993  
  2994  // ApplicationGatewaysStopFuture an abstraction for monitoring and retrieving the results of a long-running
  2995  // operation.
  2996  type ApplicationGatewaysStopFuture struct {
  2997  	azure.FutureAPI
  2998  	// Result returns the result of the asynchronous operation.
  2999  	// If the operation has not completed it will return an error.
  3000  	Result func(ApplicationGatewaysClient) (autorest.Response, error)
  3001  }
  3002  
  3003  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  3004  func (future *ApplicationGatewaysStopFuture) UnmarshalJSON(body []byte) error {
  3005  	var azFuture azure.Future
  3006  	if err := json.Unmarshal(body, &azFuture); err != nil {
  3007  		return err
  3008  	}
  3009  	future.FutureAPI = &azFuture
  3010  	future.Result = future.result
  3011  	return nil
  3012  }
  3013  
  3014  // result is the default implementation for ApplicationGatewaysStopFuture.Result.
  3015  func (future *ApplicationGatewaysStopFuture) result(client ApplicationGatewaysClient) (ar autorest.Response, err error) {
  3016  	var done bool
  3017  	done, err = future.DoneWithContext(context.Background(), client)
  3018  	if err != nil {
  3019  		err = autorest.NewErrorWithError(err, "network.ApplicationGatewaysStopFuture", "Result", future.Response(), "Polling failure")
  3020  		return
  3021  	}
  3022  	if !done {
  3023  		ar.Response = future.Response()
  3024  		err = azure.NewAsyncOpIncompleteError("network.ApplicationGatewaysStopFuture")
  3025  		return
  3026  	}
  3027  	ar.Response = future.Response()
  3028  	return
  3029  }
  3030  
  3031  // ApplicationGatewayTrustedRootCertificate trusted Root certificates of an application gateway.
  3032  type ApplicationGatewayTrustedRootCertificate struct {
  3033  	// ApplicationGatewayTrustedRootCertificatePropertiesFormat - Properties of the application gateway trusted root certificate.
  3034  	*ApplicationGatewayTrustedRootCertificatePropertiesFormat `json:"properties,omitempty"`
  3035  	// Name - Name of the trusted root certificate that is unique within an Application Gateway.
  3036  	Name *string `json:"name,omitempty"`
  3037  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  3038  	Etag *string `json:"etag,omitempty"`
  3039  	// Type - READ-ONLY; Type of the resource.
  3040  	Type *string `json:"type,omitempty"`
  3041  	// ID - Resource ID.
  3042  	ID *string `json:"id,omitempty"`
  3043  }
  3044  
  3045  // MarshalJSON is the custom marshaler for ApplicationGatewayTrustedRootCertificate.
  3046  func (agtrc ApplicationGatewayTrustedRootCertificate) MarshalJSON() ([]byte, error) {
  3047  	objectMap := make(map[string]interface{})
  3048  	if agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat != nil {
  3049  		objectMap["properties"] = agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat
  3050  	}
  3051  	if agtrc.Name != nil {
  3052  		objectMap["name"] = agtrc.Name
  3053  	}
  3054  	if agtrc.ID != nil {
  3055  		objectMap["id"] = agtrc.ID
  3056  	}
  3057  	return json.Marshal(objectMap)
  3058  }
  3059  
  3060  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayTrustedRootCertificate struct.
  3061  func (agtrc *ApplicationGatewayTrustedRootCertificate) UnmarshalJSON(body []byte) error {
  3062  	var m map[string]*json.RawMessage
  3063  	err := json.Unmarshal(body, &m)
  3064  	if err != nil {
  3065  		return err
  3066  	}
  3067  	for k, v := range m {
  3068  		switch k {
  3069  		case "properties":
  3070  			if v != nil {
  3071  				var applicationGatewayTrustedRootCertificatePropertiesFormat ApplicationGatewayTrustedRootCertificatePropertiesFormat
  3072  				err = json.Unmarshal(*v, &applicationGatewayTrustedRootCertificatePropertiesFormat)
  3073  				if err != nil {
  3074  					return err
  3075  				}
  3076  				agtrc.ApplicationGatewayTrustedRootCertificatePropertiesFormat = &applicationGatewayTrustedRootCertificatePropertiesFormat
  3077  			}
  3078  		case "name":
  3079  			if v != nil {
  3080  				var name string
  3081  				err = json.Unmarshal(*v, &name)
  3082  				if err != nil {
  3083  					return err
  3084  				}
  3085  				agtrc.Name = &name
  3086  			}
  3087  		case "etag":
  3088  			if v != nil {
  3089  				var etag string
  3090  				err = json.Unmarshal(*v, &etag)
  3091  				if err != nil {
  3092  					return err
  3093  				}
  3094  				agtrc.Etag = &etag
  3095  			}
  3096  		case "type":
  3097  			if v != nil {
  3098  				var typeVar string
  3099  				err = json.Unmarshal(*v, &typeVar)
  3100  				if err != nil {
  3101  					return err
  3102  				}
  3103  				agtrc.Type = &typeVar
  3104  			}
  3105  		case "id":
  3106  			if v != nil {
  3107  				var ID string
  3108  				err = json.Unmarshal(*v, &ID)
  3109  				if err != nil {
  3110  					return err
  3111  				}
  3112  				agtrc.ID = &ID
  3113  			}
  3114  		}
  3115  	}
  3116  
  3117  	return nil
  3118  }
  3119  
  3120  // ApplicationGatewayTrustedRootCertificatePropertiesFormat trusted Root certificates properties of an
  3121  // application gateway.
  3122  type ApplicationGatewayTrustedRootCertificatePropertiesFormat struct {
  3123  	// Data - Certificate public data.
  3124  	Data *string `json:"data,omitempty"`
  3125  	// KeyVaultSecretID - Secret Id of (base-64 encoded unencrypted pfx) 'Secret' or 'Certificate' object stored in KeyVault.
  3126  	KeyVaultSecretID *string `json:"keyVaultSecretId,omitempty"`
  3127  	// ProvisioningState - READ-ONLY; The provisioning state of the trusted root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  3128  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  3129  }
  3130  
  3131  // MarshalJSON is the custom marshaler for ApplicationGatewayTrustedRootCertificatePropertiesFormat.
  3132  func (agtrcpf ApplicationGatewayTrustedRootCertificatePropertiesFormat) MarshalJSON() ([]byte, error) {
  3133  	objectMap := make(map[string]interface{})
  3134  	if agtrcpf.Data != nil {
  3135  		objectMap["data"] = agtrcpf.Data
  3136  	}
  3137  	if agtrcpf.KeyVaultSecretID != nil {
  3138  		objectMap["keyVaultSecretId"] = agtrcpf.KeyVaultSecretID
  3139  	}
  3140  	return json.Marshal(objectMap)
  3141  }
  3142  
  3143  // ApplicationGatewayURLConfiguration url configuration of the Actions set in Application Gateway.
  3144  type ApplicationGatewayURLConfiguration struct {
  3145  	// ModifiedPath - Url path which user has provided for url rewrite. Null means no path will be updated. Default value is null.
  3146  	ModifiedPath *string `json:"modifiedPath,omitempty"`
  3147  	// ModifiedQueryString - Query string which user has provided for url rewrite. Null means no query string will be updated. Default value is null.
  3148  	ModifiedQueryString *string `json:"modifiedQueryString,omitempty"`
  3149  	// Reroute - If set as true, it will re-evaluate the url path map provided in path based request routing rules using modified path. Default value is false.
  3150  	Reroute *bool `json:"reroute,omitempty"`
  3151  }
  3152  
  3153  // ApplicationGatewayURLPathMap urlPathMaps give a url path to the backend mapping information for
  3154  // PathBasedRouting.
  3155  type ApplicationGatewayURLPathMap struct {
  3156  	// ApplicationGatewayURLPathMapPropertiesFormat - Properties of the application gateway URL path map.
  3157  	*ApplicationGatewayURLPathMapPropertiesFormat `json:"properties,omitempty"`
  3158  	// Name - Name of the URL path map that is unique within an Application Gateway.
  3159  	Name *string `json:"name,omitempty"`
  3160  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  3161  	Etag *string `json:"etag,omitempty"`
  3162  	// Type - READ-ONLY; Type of the resource.
  3163  	Type *string `json:"type,omitempty"`
  3164  	// ID - Resource ID.
  3165  	ID *string `json:"id,omitempty"`
  3166  }
  3167  
  3168  // MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMap.
  3169  func (agupm ApplicationGatewayURLPathMap) MarshalJSON() ([]byte, error) {
  3170  	objectMap := make(map[string]interface{})
  3171  	if agupm.ApplicationGatewayURLPathMapPropertiesFormat != nil {
  3172  		objectMap["properties"] = agupm.ApplicationGatewayURLPathMapPropertiesFormat
  3173  	}
  3174  	if agupm.Name != nil {
  3175  		objectMap["name"] = agupm.Name
  3176  	}
  3177  	if agupm.ID != nil {
  3178  		objectMap["id"] = agupm.ID
  3179  	}
  3180  	return json.Marshal(objectMap)
  3181  }
  3182  
  3183  // UnmarshalJSON is the custom unmarshaler for ApplicationGatewayURLPathMap struct.
  3184  func (agupm *ApplicationGatewayURLPathMap) UnmarshalJSON(body []byte) error {
  3185  	var m map[string]*json.RawMessage
  3186  	err := json.Unmarshal(body, &m)
  3187  	if err != nil {
  3188  		return err
  3189  	}
  3190  	for k, v := range m {
  3191  		switch k {
  3192  		case "properties":
  3193  			if v != nil {
  3194  				var applicationGatewayURLPathMapPropertiesFormat ApplicationGatewayURLPathMapPropertiesFormat
  3195  				err = json.Unmarshal(*v, &applicationGatewayURLPathMapPropertiesFormat)
  3196  				if err != nil {
  3197  					return err
  3198  				}
  3199  				agupm.ApplicationGatewayURLPathMapPropertiesFormat = &applicationGatewayURLPathMapPropertiesFormat
  3200  			}
  3201  		case "name":
  3202  			if v != nil {
  3203  				var name string
  3204  				err = json.Unmarshal(*v, &name)
  3205  				if err != nil {
  3206  					return err
  3207  				}
  3208  				agupm.Name = &name
  3209  			}
  3210  		case "etag":
  3211  			if v != nil {
  3212  				var etag string
  3213  				err = json.Unmarshal(*v, &etag)
  3214  				if err != nil {
  3215  					return err
  3216  				}
  3217  				agupm.Etag = &etag
  3218  			}
  3219  		case "type":
  3220  			if v != nil {
  3221  				var typeVar string
  3222  				err = json.Unmarshal(*v, &typeVar)
  3223  				if err != nil {
  3224  					return err
  3225  				}
  3226  				agupm.Type = &typeVar
  3227  			}
  3228  		case "id":
  3229  			if v != nil {
  3230  				var ID string
  3231  				err = json.Unmarshal(*v, &ID)
  3232  				if err != nil {
  3233  					return err
  3234  				}
  3235  				agupm.ID = &ID
  3236  			}
  3237  		}
  3238  	}
  3239  
  3240  	return nil
  3241  }
  3242  
  3243  // ApplicationGatewayURLPathMapPropertiesFormat properties of UrlPathMap of the application gateway.
  3244  type ApplicationGatewayURLPathMapPropertiesFormat struct {
  3245  	// DefaultBackendAddressPool - Default backend address pool resource of URL path map.
  3246  	DefaultBackendAddressPool *SubResource `json:"defaultBackendAddressPool,omitempty"`
  3247  	// DefaultBackendHTTPSettings - Default backend http settings resource of URL path map.
  3248  	DefaultBackendHTTPSettings *SubResource `json:"defaultBackendHttpSettings,omitempty"`
  3249  	// DefaultRewriteRuleSet - Default Rewrite rule set resource of URL path map.
  3250  	DefaultRewriteRuleSet *SubResource `json:"defaultRewriteRuleSet,omitempty"`
  3251  	// DefaultRedirectConfiguration - Default redirect configuration resource of URL path map.
  3252  	DefaultRedirectConfiguration *SubResource `json:"defaultRedirectConfiguration,omitempty"`
  3253  	// PathRules - Path rule of URL path map resource.
  3254  	PathRules *[]ApplicationGatewayPathRule `json:"pathRules,omitempty"`
  3255  	// ProvisioningState - READ-ONLY; The provisioning state of the URL path map resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  3256  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  3257  }
  3258  
  3259  // MarshalJSON is the custom marshaler for ApplicationGatewayURLPathMapPropertiesFormat.
  3260  func (agupmpf ApplicationGatewayURLPathMapPropertiesFormat) MarshalJSON() ([]byte, error) {
  3261  	objectMap := make(map[string]interface{})
  3262  	if agupmpf.DefaultBackendAddressPool != nil {
  3263  		objectMap["defaultBackendAddressPool"] = agupmpf.DefaultBackendAddressPool
  3264  	}
  3265  	if agupmpf.DefaultBackendHTTPSettings != nil {
  3266  		objectMap["defaultBackendHttpSettings"] = agupmpf.DefaultBackendHTTPSettings
  3267  	}
  3268  	if agupmpf.DefaultRewriteRuleSet != nil {
  3269  		objectMap["defaultRewriteRuleSet"] = agupmpf.DefaultRewriteRuleSet
  3270  	}
  3271  	if agupmpf.DefaultRedirectConfiguration != nil {
  3272  		objectMap["defaultRedirectConfiguration"] = agupmpf.DefaultRedirectConfiguration
  3273  	}
  3274  	if agupmpf.PathRules != nil {
  3275  		objectMap["pathRules"] = agupmpf.PathRules
  3276  	}
  3277  	return json.Marshal(objectMap)
  3278  }
  3279  
  3280  // ApplicationGatewayWebApplicationFirewallConfiguration application gateway web application firewall
  3281  // configuration.
  3282  type ApplicationGatewayWebApplicationFirewallConfiguration struct {
  3283  	// Enabled - Whether the web application firewall is enabled or not.
  3284  	Enabled *bool `json:"enabled,omitempty"`
  3285  	// FirewallMode - Web application firewall mode. Possible values include: 'Detection', 'Prevention'
  3286  	FirewallMode ApplicationGatewayFirewallMode `json:"firewallMode,omitempty"`
  3287  	// RuleSetType - The type of the web application firewall rule set. Possible values are: 'OWASP'.
  3288  	RuleSetType *string `json:"ruleSetType,omitempty"`
  3289  	// RuleSetVersion - The version of the rule set type.
  3290  	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
  3291  	// DisabledRuleGroups - The disabled rule groups.
  3292  	DisabledRuleGroups *[]ApplicationGatewayFirewallDisabledRuleGroup `json:"disabledRuleGroups,omitempty"`
  3293  	// RequestBodyCheck - Whether allow WAF to check request Body.
  3294  	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
  3295  	// MaxRequestBodySize - Maximum request body size for WAF.
  3296  	MaxRequestBodySize *int32 `json:"maxRequestBodySize,omitempty"`
  3297  	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
  3298  	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
  3299  	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
  3300  	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
  3301  	// Exclusions - The exclusion list.
  3302  	Exclusions *[]ApplicationGatewayFirewallExclusion `json:"exclusions,omitempty"`
  3303  }
  3304  
  3305  // ApplicationRuleCondition rule condition of type application.
  3306  type ApplicationRuleCondition struct {
  3307  	// SourceAddresses - List of source IP addresses for this rule.
  3308  	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
  3309  	// DestinationAddresses - List of destination IP addresses or Service Tags.
  3310  	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
  3311  	// Protocols - Array of Application Protocols.
  3312  	Protocols *[]FirewallPolicyRuleConditionApplicationProtocol `json:"protocols,omitempty"`
  3313  	// TargetFqdns - List of FQDNs for this rule condition.
  3314  	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
  3315  	// FqdnTags - List of FQDN Tags for this rule condition.
  3316  	FqdnTags *[]string `json:"fqdnTags,omitempty"`
  3317  	// SourceIPGroups - List of source IpGroups for this rule.
  3318  	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
  3319  	// Name - Name of the rule condition.
  3320  	Name *string `json:"name,omitempty"`
  3321  	// Description - Description of the rule condition.
  3322  	Description *string `json:"description,omitempty"`
  3323  	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNatRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
  3324  	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
  3325  }
  3326  
  3327  // MarshalJSON is the custom marshaler for ApplicationRuleCondition.
  3328  func (arc ApplicationRuleCondition) MarshalJSON() ([]byte, error) {
  3329  	arc.RuleConditionType = RuleConditionTypeApplicationRuleCondition
  3330  	objectMap := make(map[string]interface{})
  3331  	if arc.SourceAddresses != nil {
  3332  		objectMap["sourceAddresses"] = arc.SourceAddresses
  3333  	}
  3334  	if arc.DestinationAddresses != nil {
  3335  		objectMap["destinationAddresses"] = arc.DestinationAddresses
  3336  	}
  3337  	if arc.Protocols != nil {
  3338  		objectMap["protocols"] = arc.Protocols
  3339  	}
  3340  	if arc.TargetFqdns != nil {
  3341  		objectMap["targetFqdns"] = arc.TargetFqdns
  3342  	}
  3343  	if arc.FqdnTags != nil {
  3344  		objectMap["fqdnTags"] = arc.FqdnTags
  3345  	}
  3346  	if arc.SourceIPGroups != nil {
  3347  		objectMap["sourceIpGroups"] = arc.SourceIPGroups
  3348  	}
  3349  	if arc.Name != nil {
  3350  		objectMap["name"] = arc.Name
  3351  	}
  3352  	if arc.Description != nil {
  3353  		objectMap["description"] = arc.Description
  3354  	}
  3355  	if arc.RuleConditionType != "" {
  3356  		objectMap["ruleConditionType"] = arc.RuleConditionType
  3357  	}
  3358  	return json.Marshal(objectMap)
  3359  }
  3360  
  3361  // AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
  3362  func (arc ApplicationRuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
  3363  	return &arc, true
  3364  }
  3365  
  3366  // AsNatRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
  3367  func (arc ApplicationRuleCondition) AsNatRuleCondition() (*NatRuleCondition, bool) {
  3368  	return nil, false
  3369  }
  3370  
  3371  // AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
  3372  func (arc ApplicationRuleCondition) AsRuleCondition() (*RuleCondition, bool) {
  3373  	return nil, false
  3374  }
  3375  
  3376  // AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
  3377  func (arc ApplicationRuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
  3378  	return nil, false
  3379  }
  3380  
  3381  // AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for ApplicationRuleCondition.
  3382  func (arc ApplicationRuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
  3383  	return &arc, true
  3384  }
  3385  
  3386  // ApplicationSecurityGroup an application security group in a resource group.
  3387  type ApplicationSecurityGroup struct {
  3388  	autorest.Response `json:"-"`
  3389  	// ApplicationSecurityGroupPropertiesFormat - Properties of the application security group.
  3390  	*ApplicationSecurityGroupPropertiesFormat `json:"properties,omitempty"`
  3391  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  3392  	Etag *string `json:"etag,omitempty"`
  3393  	// ID - Resource ID.
  3394  	ID *string `json:"id,omitempty"`
  3395  	// Name - READ-ONLY; Resource name.
  3396  	Name *string `json:"name,omitempty"`
  3397  	// Type - READ-ONLY; Resource type.
  3398  	Type *string `json:"type,omitempty"`
  3399  	// Location - Resource location.
  3400  	Location *string `json:"location,omitempty"`
  3401  	// Tags - Resource tags.
  3402  	Tags map[string]*string `json:"tags"`
  3403  }
  3404  
  3405  // MarshalJSON is the custom marshaler for ApplicationSecurityGroup.
  3406  func (asg ApplicationSecurityGroup) MarshalJSON() ([]byte, error) {
  3407  	objectMap := make(map[string]interface{})
  3408  	if asg.ApplicationSecurityGroupPropertiesFormat != nil {
  3409  		objectMap["properties"] = asg.ApplicationSecurityGroupPropertiesFormat
  3410  	}
  3411  	if asg.ID != nil {
  3412  		objectMap["id"] = asg.ID
  3413  	}
  3414  	if asg.Location != nil {
  3415  		objectMap["location"] = asg.Location
  3416  	}
  3417  	if asg.Tags != nil {
  3418  		objectMap["tags"] = asg.Tags
  3419  	}
  3420  	return json.Marshal(objectMap)
  3421  }
  3422  
  3423  // UnmarshalJSON is the custom unmarshaler for ApplicationSecurityGroup struct.
  3424  func (asg *ApplicationSecurityGroup) UnmarshalJSON(body []byte) error {
  3425  	var m map[string]*json.RawMessage
  3426  	err := json.Unmarshal(body, &m)
  3427  	if err != nil {
  3428  		return err
  3429  	}
  3430  	for k, v := range m {
  3431  		switch k {
  3432  		case "properties":
  3433  			if v != nil {
  3434  				var applicationSecurityGroupPropertiesFormat ApplicationSecurityGroupPropertiesFormat
  3435  				err = json.Unmarshal(*v, &applicationSecurityGroupPropertiesFormat)
  3436  				if err != nil {
  3437  					return err
  3438  				}
  3439  				asg.ApplicationSecurityGroupPropertiesFormat = &applicationSecurityGroupPropertiesFormat
  3440  			}
  3441  		case "etag":
  3442  			if v != nil {
  3443  				var etag string
  3444  				err = json.Unmarshal(*v, &etag)
  3445  				if err != nil {
  3446  					return err
  3447  				}
  3448  				asg.Etag = &etag
  3449  			}
  3450  		case "id":
  3451  			if v != nil {
  3452  				var ID string
  3453  				err = json.Unmarshal(*v, &ID)
  3454  				if err != nil {
  3455  					return err
  3456  				}
  3457  				asg.ID = &ID
  3458  			}
  3459  		case "name":
  3460  			if v != nil {
  3461  				var name string
  3462  				err = json.Unmarshal(*v, &name)
  3463  				if err != nil {
  3464  					return err
  3465  				}
  3466  				asg.Name = &name
  3467  			}
  3468  		case "type":
  3469  			if v != nil {
  3470  				var typeVar string
  3471  				err = json.Unmarshal(*v, &typeVar)
  3472  				if err != nil {
  3473  					return err
  3474  				}
  3475  				asg.Type = &typeVar
  3476  			}
  3477  		case "location":
  3478  			if v != nil {
  3479  				var location string
  3480  				err = json.Unmarshal(*v, &location)
  3481  				if err != nil {
  3482  					return err
  3483  				}
  3484  				asg.Location = &location
  3485  			}
  3486  		case "tags":
  3487  			if v != nil {
  3488  				var tags map[string]*string
  3489  				err = json.Unmarshal(*v, &tags)
  3490  				if err != nil {
  3491  					return err
  3492  				}
  3493  				asg.Tags = tags
  3494  			}
  3495  		}
  3496  	}
  3497  
  3498  	return nil
  3499  }
  3500  
  3501  // ApplicationSecurityGroupListResult a list of application security groups.
  3502  type ApplicationSecurityGroupListResult struct {
  3503  	autorest.Response `json:"-"`
  3504  	// Value - A list of application security groups.
  3505  	Value *[]ApplicationSecurityGroup `json:"value,omitempty"`
  3506  	// NextLink - READ-ONLY; The URL to get the next set of results.
  3507  	NextLink *string `json:"nextLink,omitempty"`
  3508  }
  3509  
  3510  // MarshalJSON is the custom marshaler for ApplicationSecurityGroupListResult.
  3511  func (asglr ApplicationSecurityGroupListResult) MarshalJSON() ([]byte, error) {
  3512  	objectMap := make(map[string]interface{})
  3513  	if asglr.Value != nil {
  3514  		objectMap["value"] = asglr.Value
  3515  	}
  3516  	return json.Marshal(objectMap)
  3517  }
  3518  
  3519  // ApplicationSecurityGroupListResultIterator provides access to a complete listing of
  3520  // ApplicationSecurityGroup values.
  3521  type ApplicationSecurityGroupListResultIterator struct {
  3522  	i    int
  3523  	page ApplicationSecurityGroupListResultPage
  3524  }
  3525  
  3526  // NextWithContext advances to the next value.  If there was an error making
  3527  // the request the iterator does not advance and the error is returned.
  3528  func (iter *ApplicationSecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
  3529  	if tracing.IsEnabled() {
  3530  		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultIterator.NextWithContext")
  3531  		defer func() {
  3532  			sc := -1
  3533  			if iter.Response().Response.Response != nil {
  3534  				sc = iter.Response().Response.Response.StatusCode
  3535  			}
  3536  			tracing.EndSpan(ctx, sc, err)
  3537  		}()
  3538  	}
  3539  	iter.i++
  3540  	if iter.i < len(iter.page.Values()) {
  3541  		return nil
  3542  	}
  3543  	err = iter.page.NextWithContext(ctx)
  3544  	if err != nil {
  3545  		iter.i--
  3546  		return err
  3547  	}
  3548  	iter.i = 0
  3549  	return nil
  3550  }
  3551  
  3552  // Next advances to the next value.  If there was an error making
  3553  // the request the iterator does not advance and the error is returned.
  3554  // Deprecated: Use NextWithContext() instead.
  3555  func (iter *ApplicationSecurityGroupListResultIterator) Next() error {
  3556  	return iter.NextWithContext(context.Background())
  3557  }
  3558  
  3559  // NotDone returns true if the enumeration should be started or is not yet complete.
  3560  func (iter ApplicationSecurityGroupListResultIterator) NotDone() bool {
  3561  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  3562  }
  3563  
  3564  // Response returns the raw server response from the last page request.
  3565  func (iter ApplicationSecurityGroupListResultIterator) Response() ApplicationSecurityGroupListResult {
  3566  	return iter.page.Response()
  3567  }
  3568  
  3569  // Value returns the current value or a zero-initialized value if the
  3570  // iterator has advanced beyond the end of the collection.
  3571  func (iter ApplicationSecurityGroupListResultIterator) Value() ApplicationSecurityGroup {
  3572  	if !iter.page.NotDone() {
  3573  		return ApplicationSecurityGroup{}
  3574  	}
  3575  	return iter.page.Values()[iter.i]
  3576  }
  3577  
  3578  // Creates a new instance of the ApplicationSecurityGroupListResultIterator type.
  3579  func NewApplicationSecurityGroupListResultIterator(page ApplicationSecurityGroupListResultPage) ApplicationSecurityGroupListResultIterator {
  3580  	return ApplicationSecurityGroupListResultIterator{page: page}
  3581  }
  3582  
  3583  // IsEmpty returns true if the ListResult contains no values.
  3584  func (asglr ApplicationSecurityGroupListResult) IsEmpty() bool {
  3585  	return asglr.Value == nil || len(*asglr.Value) == 0
  3586  }
  3587  
  3588  // hasNextLink returns true if the NextLink is not empty.
  3589  func (asglr ApplicationSecurityGroupListResult) hasNextLink() bool {
  3590  	return asglr.NextLink != nil && len(*asglr.NextLink) != 0
  3591  }
  3592  
  3593  // applicationSecurityGroupListResultPreparer prepares a request to retrieve the next set of results.
  3594  // It returns nil if no more results exist.
  3595  func (asglr ApplicationSecurityGroupListResult) applicationSecurityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
  3596  	if !asglr.hasNextLink() {
  3597  		return nil, nil
  3598  	}
  3599  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  3600  		autorest.AsJSON(),
  3601  		autorest.AsGet(),
  3602  		autorest.WithBaseURL(to.String(asglr.NextLink)))
  3603  }
  3604  
  3605  // ApplicationSecurityGroupListResultPage contains a page of ApplicationSecurityGroup values.
  3606  type ApplicationSecurityGroupListResultPage struct {
  3607  	fn    func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)
  3608  	asglr ApplicationSecurityGroupListResult
  3609  }
  3610  
  3611  // NextWithContext advances to the next page of values.  If there was an error making
  3612  // the request the page does not advance and the error is returned.
  3613  func (page *ApplicationSecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
  3614  	if tracing.IsEnabled() {
  3615  		ctx = tracing.StartSpan(ctx, fqdn+"/ApplicationSecurityGroupListResultPage.NextWithContext")
  3616  		defer func() {
  3617  			sc := -1
  3618  			if page.Response().Response.Response != nil {
  3619  				sc = page.Response().Response.Response.StatusCode
  3620  			}
  3621  			tracing.EndSpan(ctx, sc, err)
  3622  		}()
  3623  	}
  3624  	for {
  3625  		next, err := page.fn(ctx, page.asglr)
  3626  		if err != nil {
  3627  			return err
  3628  		}
  3629  		page.asglr = next
  3630  		if !next.hasNextLink() || !next.IsEmpty() {
  3631  			break
  3632  		}
  3633  	}
  3634  	return nil
  3635  }
  3636  
  3637  // Next advances to the next page of values.  If there was an error making
  3638  // the request the page does not advance and the error is returned.
  3639  // Deprecated: Use NextWithContext() instead.
  3640  func (page *ApplicationSecurityGroupListResultPage) Next() error {
  3641  	return page.NextWithContext(context.Background())
  3642  }
  3643  
  3644  // NotDone returns true if the page enumeration should be started or is not yet complete.
  3645  func (page ApplicationSecurityGroupListResultPage) NotDone() bool {
  3646  	return !page.asglr.IsEmpty()
  3647  }
  3648  
  3649  // Response returns the raw server response from the last page request.
  3650  func (page ApplicationSecurityGroupListResultPage) Response() ApplicationSecurityGroupListResult {
  3651  	return page.asglr
  3652  }
  3653  
  3654  // Values returns the slice of values for the current page or nil if there are no values.
  3655  func (page ApplicationSecurityGroupListResultPage) Values() []ApplicationSecurityGroup {
  3656  	if page.asglr.IsEmpty() {
  3657  		return nil
  3658  	}
  3659  	return *page.asglr.Value
  3660  }
  3661  
  3662  // Creates a new instance of the ApplicationSecurityGroupListResultPage type.
  3663  func NewApplicationSecurityGroupListResultPage(cur ApplicationSecurityGroupListResult, getNextPage func(context.Context, ApplicationSecurityGroupListResult) (ApplicationSecurityGroupListResult, error)) ApplicationSecurityGroupListResultPage {
  3664  	return ApplicationSecurityGroupListResultPage{
  3665  		fn:    getNextPage,
  3666  		asglr: cur,
  3667  	}
  3668  }
  3669  
  3670  // ApplicationSecurityGroupPropertiesFormat application security group properties.
  3671  type ApplicationSecurityGroupPropertiesFormat struct {
  3672  	// ResourceGUID - READ-ONLY; The resource GUID property of the application security group resource. It uniquely identifies a resource, even if the user changes its name or migrate the resource across subscriptions or resource groups.
  3673  	ResourceGUID *string `json:"resourceGuid,omitempty"`
  3674  	// ProvisioningState - READ-ONLY; The provisioning state of the application security group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  3675  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  3676  }
  3677  
  3678  // MarshalJSON is the custom marshaler for ApplicationSecurityGroupPropertiesFormat.
  3679  func (asgpf ApplicationSecurityGroupPropertiesFormat) MarshalJSON() ([]byte, error) {
  3680  	objectMap := make(map[string]interface{})
  3681  	return json.Marshal(objectMap)
  3682  }
  3683  
  3684  // ApplicationSecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
  3685  // of a long-running operation.
  3686  type ApplicationSecurityGroupsCreateOrUpdateFuture struct {
  3687  	azure.FutureAPI
  3688  	// Result returns the result of the asynchronous operation.
  3689  	// If the operation has not completed it will return an error.
  3690  	Result func(ApplicationSecurityGroupsClient) (ApplicationSecurityGroup, error)
  3691  }
  3692  
  3693  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  3694  func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
  3695  	var azFuture azure.Future
  3696  	if err := json.Unmarshal(body, &azFuture); err != nil {
  3697  		return err
  3698  	}
  3699  	future.FutureAPI = &azFuture
  3700  	future.Result = future.result
  3701  	return nil
  3702  }
  3703  
  3704  // result is the default implementation for ApplicationSecurityGroupsCreateOrUpdateFuture.Result.
  3705  func (future *ApplicationSecurityGroupsCreateOrUpdateFuture) result(client ApplicationSecurityGroupsClient) (asg ApplicationSecurityGroup, err error) {
  3706  	var done bool
  3707  	done, err = future.DoneWithContext(context.Background(), client)
  3708  	if err != nil {
  3709  		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
  3710  		return
  3711  	}
  3712  	if !done {
  3713  		asg.Response.Response = future.Response()
  3714  		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsCreateOrUpdateFuture")
  3715  		return
  3716  	}
  3717  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  3718  	if asg.Response.Response, err = future.GetResult(sender); err == nil && asg.Response.Response.StatusCode != http.StatusNoContent {
  3719  		asg, err = client.CreateOrUpdateResponder(asg.Response.Response)
  3720  		if err != nil {
  3721  			err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsCreateOrUpdateFuture", "Result", asg.Response.Response, "Failure responding to request")
  3722  		}
  3723  	}
  3724  	return
  3725  }
  3726  
  3727  // ApplicationSecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
  3728  // long-running operation.
  3729  type ApplicationSecurityGroupsDeleteFuture struct {
  3730  	azure.FutureAPI
  3731  	// Result returns the result of the asynchronous operation.
  3732  	// If the operation has not completed it will return an error.
  3733  	Result func(ApplicationSecurityGroupsClient) (autorest.Response, error)
  3734  }
  3735  
  3736  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  3737  func (future *ApplicationSecurityGroupsDeleteFuture) UnmarshalJSON(body []byte) error {
  3738  	var azFuture azure.Future
  3739  	if err := json.Unmarshal(body, &azFuture); err != nil {
  3740  		return err
  3741  	}
  3742  	future.FutureAPI = &azFuture
  3743  	future.Result = future.result
  3744  	return nil
  3745  }
  3746  
  3747  // result is the default implementation for ApplicationSecurityGroupsDeleteFuture.Result.
  3748  func (future *ApplicationSecurityGroupsDeleteFuture) result(client ApplicationSecurityGroupsClient) (ar autorest.Response, err error) {
  3749  	var done bool
  3750  	done, err = future.DoneWithContext(context.Background(), client)
  3751  	if err != nil {
  3752  		err = autorest.NewErrorWithError(err, "network.ApplicationSecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
  3753  		return
  3754  	}
  3755  	if !done {
  3756  		ar.Response = future.Response()
  3757  		err = azure.NewAsyncOpIncompleteError("network.ApplicationSecurityGroupsDeleteFuture")
  3758  		return
  3759  	}
  3760  	ar.Response = future.Response()
  3761  	return
  3762  }
  3763  
  3764  // AuthorizationListResult response for ListAuthorizations API service call retrieves all authorizations
  3765  // that belongs to an ExpressRouteCircuit.
  3766  type AuthorizationListResult struct {
  3767  	autorest.Response `json:"-"`
  3768  	// Value - The authorizations in an ExpressRoute Circuit.
  3769  	Value *[]ExpressRouteCircuitAuthorization `json:"value,omitempty"`
  3770  	// NextLink - The URL to get the next set of results.
  3771  	NextLink *string `json:"nextLink,omitempty"`
  3772  }
  3773  
  3774  // AuthorizationListResultIterator provides access to a complete listing of
  3775  // ExpressRouteCircuitAuthorization values.
  3776  type AuthorizationListResultIterator struct {
  3777  	i    int
  3778  	page AuthorizationListResultPage
  3779  }
  3780  
  3781  // NextWithContext advances to the next value.  If there was an error making
  3782  // the request the iterator does not advance and the error is returned.
  3783  func (iter *AuthorizationListResultIterator) NextWithContext(ctx context.Context) (err error) {
  3784  	if tracing.IsEnabled() {
  3785  		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultIterator.NextWithContext")
  3786  		defer func() {
  3787  			sc := -1
  3788  			if iter.Response().Response.Response != nil {
  3789  				sc = iter.Response().Response.Response.StatusCode
  3790  			}
  3791  			tracing.EndSpan(ctx, sc, err)
  3792  		}()
  3793  	}
  3794  	iter.i++
  3795  	if iter.i < len(iter.page.Values()) {
  3796  		return nil
  3797  	}
  3798  	err = iter.page.NextWithContext(ctx)
  3799  	if err != nil {
  3800  		iter.i--
  3801  		return err
  3802  	}
  3803  	iter.i = 0
  3804  	return nil
  3805  }
  3806  
  3807  // Next advances to the next value.  If there was an error making
  3808  // the request the iterator does not advance and the error is returned.
  3809  // Deprecated: Use NextWithContext() instead.
  3810  func (iter *AuthorizationListResultIterator) Next() error {
  3811  	return iter.NextWithContext(context.Background())
  3812  }
  3813  
  3814  // NotDone returns true if the enumeration should be started or is not yet complete.
  3815  func (iter AuthorizationListResultIterator) NotDone() bool {
  3816  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  3817  }
  3818  
  3819  // Response returns the raw server response from the last page request.
  3820  func (iter AuthorizationListResultIterator) Response() AuthorizationListResult {
  3821  	return iter.page.Response()
  3822  }
  3823  
  3824  // Value returns the current value or a zero-initialized value if the
  3825  // iterator has advanced beyond the end of the collection.
  3826  func (iter AuthorizationListResultIterator) Value() ExpressRouteCircuitAuthorization {
  3827  	if !iter.page.NotDone() {
  3828  		return ExpressRouteCircuitAuthorization{}
  3829  	}
  3830  	return iter.page.Values()[iter.i]
  3831  }
  3832  
  3833  // Creates a new instance of the AuthorizationListResultIterator type.
  3834  func NewAuthorizationListResultIterator(page AuthorizationListResultPage) AuthorizationListResultIterator {
  3835  	return AuthorizationListResultIterator{page: page}
  3836  }
  3837  
  3838  // IsEmpty returns true if the ListResult contains no values.
  3839  func (alr AuthorizationListResult) IsEmpty() bool {
  3840  	return alr.Value == nil || len(*alr.Value) == 0
  3841  }
  3842  
  3843  // hasNextLink returns true if the NextLink is not empty.
  3844  func (alr AuthorizationListResult) hasNextLink() bool {
  3845  	return alr.NextLink != nil && len(*alr.NextLink) != 0
  3846  }
  3847  
  3848  // authorizationListResultPreparer prepares a request to retrieve the next set of results.
  3849  // It returns nil if no more results exist.
  3850  func (alr AuthorizationListResult) authorizationListResultPreparer(ctx context.Context) (*http.Request, error) {
  3851  	if !alr.hasNextLink() {
  3852  		return nil, nil
  3853  	}
  3854  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  3855  		autorest.AsJSON(),
  3856  		autorest.AsGet(),
  3857  		autorest.WithBaseURL(to.String(alr.NextLink)))
  3858  }
  3859  
  3860  // AuthorizationListResultPage contains a page of ExpressRouteCircuitAuthorization values.
  3861  type AuthorizationListResultPage struct {
  3862  	fn  func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)
  3863  	alr AuthorizationListResult
  3864  }
  3865  
  3866  // NextWithContext advances to the next page of values.  If there was an error making
  3867  // the request the page does not advance and the error is returned.
  3868  func (page *AuthorizationListResultPage) NextWithContext(ctx context.Context) (err error) {
  3869  	if tracing.IsEnabled() {
  3870  		ctx = tracing.StartSpan(ctx, fqdn+"/AuthorizationListResultPage.NextWithContext")
  3871  		defer func() {
  3872  			sc := -1
  3873  			if page.Response().Response.Response != nil {
  3874  				sc = page.Response().Response.Response.StatusCode
  3875  			}
  3876  			tracing.EndSpan(ctx, sc, err)
  3877  		}()
  3878  	}
  3879  	for {
  3880  		next, err := page.fn(ctx, page.alr)
  3881  		if err != nil {
  3882  			return err
  3883  		}
  3884  		page.alr = next
  3885  		if !next.hasNextLink() || !next.IsEmpty() {
  3886  			break
  3887  		}
  3888  	}
  3889  	return nil
  3890  }
  3891  
  3892  // Next advances to the next page of values.  If there was an error making
  3893  // the request the page does not advance and the error is returned.
  3894  // Deprecated: Use NextWithContext() instead.
  3895  func (page *AuthorizationListResultPage) Next() error {
  3896  	return page.NextWithContext(context.Background())
  3897  }
  3898  
  3899  // NotDone returns true if the page enumeration should be started or is not yet complete.
  3900  func (page AuthorizationListResultPage) NotDone() bool {
  3901  	return !page.alr.IsEmpty()
  3902  }
  3903  
  3904  // Response returns the raw server response from the last page request.
  3905  func (page AuthorizationListResultPage) Response() AuthorizationListResult {
  3906  	return page.alr
  3907  }
  3908  
  3909  // Values returns the slice of values for the current page or nil if there are no values.
  3910  func (page AuthorizationListResultPage) Values() []ExpressRouteCircuitAuthorization {
  3911  	if page.alr.IsEmpty() {
  3912  		return nil
  3913  	}
  3914  	return *page.alr.Value
  3915  }
  3916  
  3917  // Creates a new instance of the AuthorizationListResultPage type.
  3918  func NewAuthorizationListResultPage(cur AuthorizationListResult, getNextPage func(context.Context, AuthorizationListResult) (AuthorizationListResult, error)) AuthorizationListResultPage {
  3919  	return AuthorizationListResultPage{
  3920  		fn:  getNextPage,
  3921  		alr: cur,
  3922  	}
  3923  }
  3924  
  3925  // AuthorizationPropertiesFormat properties of ExpressRouteCircuitAuthorization.
  3926  type AuthorizationPropertiesFormat struct {
  3927  	// AuthorizationKey - The authorization key.
  3928  	AuthorizationKey *string `json:"authorizationKey,omitempty"`
  3929  	// AuthorizationUseStatus - The authorization use status. Possible values include: 'Available', 'InUse'
  3930  	AuthorizationUseStatus AuthorizationUseStatus `json:"authorizationUseStatus,omitempty"`
  3931  	// ProvisioningState - READ-ONLY; The provisioning state of the authorization resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  3932  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  3933  }
  3934  
  3935  // MarshalJSON is the custom marshaler for AuthorizationPropertiesFormat.
  3936  func (apf AuthorizationPropertiesFormat) MarshalJSON() ([]byte, error) {
  3937  	objectMap := make(map[string]interface{})
  3938  	if apf.AuthorizationKey != nil {
  3939  		objectMap["authorizationKey"] = apf.AuthorizationKey
  3940  	}
  3941  	if apf.AuthorizationUseStatus != "" {
  3942  		objectMap["authorizationUseStatus"] = apf.AuthorizationUseStatus
  3943  	}
  3944  	return json.Marshal(objectMap)
  3945  }
  3946  
  3947  // AutoApprovedPrivateLinkService the information of an AutoApprovedPrivateLinkService.
  3948  type AutoApprovedPrivateLinkService struct {
  3949  	// PrivateLinkService - The id of the private link service resource.
  3950  	PrivateLinkService *string `json:"privateLinkService,omitempty"`
  3951  }
  3952  
  3953  // AutoApprovedPrivateLinkServicesResult an array of private link service id that can be linked to a
  3954  // private end point with auto approved.
  3955  type AutoApprovedPrivateLinkServicesResult struct {
  3956  	autorest.Response `json:"-"`
  3957  	// Value - An array of auto approved private link service.
  3958  	Value *[]AutoApprovedPrivateLinkService `json:"value,omitempty"`
  3959  	// NextLink - READ-ONLY; The URL to get the next set of results.
  3960  	NextLink *string `json:"nextLink,omitempty"`
  3961  }
  3962  
  3963  // MarshalJSON is the custom marshaler for AutoApprovedPrivateLinkServicesResult.
  3964  func (aaplsr AutoApprovedPrivateLinkServicesResult) MarshalJSON() ([]byte, error) {
  3965  	objectMap := make(map[string]interface{})
  3966  	if aaplsr.Value != nil {
  3967  		objectMap["value"] = aaplsr.Value
  3968  	}
  3969  	return json.Marshal(objectMap)
  3970  }
  3971  
  3972  // AutoApprovedPrivateLinkServicesResultIterator provides access to a complete listing of
  3973  // AutoApprovedPrivateLinkService values.
  3974  type AutoApprovedPrivateLinkServicesResultIterator struct {
  3975  	i    int
  3976  	page AutoApprovedPrivateLinkServicesResultPage
  3977  }
  3978  
  3979  // NextWithContext advances to the next value.  If there was an error making
  3980  // the request the iterator does not advance and the error is returned.
  3981  func (iter *AutoApprovedPrivateLinkServicesResultIterator) NextWithContext(ctx context.Context) (err error) {
  3982  	if tracing.IsEnabled() {
  3983  		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultIterator.NextWithContext")
  3984  		defer func() {
  3985  			sc := -1
  3986  			if iter.Response().Response.Response != nil {
  3987  				sc = iter.Response().Response.Response.StatusCode
  3988  			}
  3989  			tracing.EndSpan(ctx, sc, err)
  3990  		}()
  3991  	}
  3992  	iter.i++
  3993  	if iter.i < len(iter.page.Values()) {
  3994  		return nil
  3995  	}
  3996  	err = iter.page.NextWithContext(ctx)
  3997  	if err != nil {
  3998  		iter.i--
  3999  		return err
  4000  	}
  4001  	iter.i = 0
  4002  	return nil
  4003  }
  4004  
  4005  // Next advances to the next value.  If there was an error making
  4006  // the request the iterator does not advance and the error is returned.
  4007  // Deprecated: Use NextWithContext() instead.
  4008  func (iter *AutoApprovedPrivateLinkServicesResultIterator) Next() error {
  4009  	return iter.NextWithContext(context.Background())
  4010  }
  4011  
  4012  // NotDone returns true if the enumeration should be started or is not yet complete.
  4013  func (iter AutoApprovedPrivateLinkServicesResultIterator) NotDone() bool {
  4014  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  4015  }
  4016  
  4017  // Response returns the raw server response from the last page request.
  4018  func (iter AutoApprovedPrivateLinkServicesResultIterator) Response() AutoApprovedPrivateLinkServicesResult {
  4019  	return iter.page.Response()
  4020  }
  4021  
  4022  // Value returns the current value or a zero-initialized value if the
  4023  // iterator has advanced beyond the end of the collection.
  4024  func (iter AutoApprovedPrivateLinkServicesResultIterator) Value() AutoApprovedPrivateLinkService {
  4025  	if !iter.page.NotDone() {
  4026  		return AutoApprovedPrivateLinkService{}
  4027  	}
  4028  	return iter.page.Values()[iter.i]
  4029  }
  4030  
  4031  // Creates a new instance of the AutoApprovedPrivateLinkServicesResultIterator type.
  4032  func NewAutoApprovedPrivateLinkServicesResultIterator(page AutoApprovedPrivateLinkServicesResultPage) AutoApprovedPrivateLinkServicesResultIterator {
  4033  	return AutoApprovedPrivateLinkServicesResultIterator{page: page}
  4034  }
  4035  
  4036  // IsEmpty returns true if the ListResult contains no values.
  4037  func (aaplsr AutoApprovedPrivateLinkServicesResult) IsEmpty() bool {
  4038  	return aaplsr.Value == nil || len(*aaplsr.Value) == 0
  4039  }
  4040  
  4041  // hasNextLink returns true if the NextLink is not empty.
  4042  func (aaplsr AutoApprovedPrivateLinkServicesResult) hasNextLink() bool {
  4043  	return aaplsr.NextLink != nil && len(*aaplsr.NextLink) != 0
  4044  }
  4045  
  4046  // autoApprovedPrivateLinkServicesResultPreparer prepares a request to retrieve the next set of results.
  4047  // It returns nil if no more results exist.
  4048  func (aaplsr AutoApprovedPrivateLinkServicesResult) autoApprovedPrivateLinkServicesResultPreparer(ctx context.Context) (*http.Request, error) {
  4049  	if !aaplsr.hasNextLink() {
  4050  		return nil, nil
  4051  	}
  4052  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  4053  		autorest.AsJSON(),
  4054  		autorest.AsGet(),
  4055  		autorest.WithBaseURL(to.String(aaplsr.NextLink)))
  4056  }
  4057  
  4058  // AutoApprovedPrivateLinkServicesResultPage contains a page of AutoApprovedPrivateLinkService values.
  4059  type AutoApprovedPrivateLinkServicesResultPage struct {
  4060  	fn     func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)
  4061  	aaplsr AutoApprovedPrivateLinkServicesResult
  4062  }
  4063  
  4064  // NextWithContext advances to the next page of values.  If there was an error making
  4065  // the request the page does not advance and the error is returned.
  4066  func (page *AutoApprovedPrivateLinkServicesResultPage) NextWithContext(ctx context.Context) (err error) {
  4067  	if tracing.IsEnabled() {
  4068  		ctx = tracing.StartSpan(ctx, fqdn+"/AutoApprovedPrivateLinkServicesResultPage.NextWithContext")
  4069  		defer func() {
  4070  			sc := -1
  4071  			if page.Response().Response.Response != nil {
  4072  				sc = page.Response().Response.Response.StatusCode
  4073  			}
  4074  			tracing.EndSpan(ctx, sc, err)
  4075  		}()
  4076  	}
  4077  	for {
  4078  		next, err := page.fn(ctx, page.aaplsr)
  4079  		if err != nil {
  4080  			return err
  4081  		}
  4082  		page.aaplsr = next
  4083  		if !next.hasNextLink() || !next.IsEmpty() {
  4084  			break
  4085  		}
  4086  	}
  4087  	return nil
  4088  }
  4089  
  4090  // Next advances to the next page of values.  If there was an error making
  4091  // the request the page does not advance and the error is returned.
  4092  // Deprecated: Use NextWithContext() instead.
  4093  func (page *AutoApprovedPrivateLinkServicesResultPage) Next() error {
  4094  	return page.NextWithContext(context.Background())
  4095  }
  4096  
  4097  // NotDone returns true if the page enumeration should be started or is not yet complete.
  4098  func (page AutoApprovedPrivateLinkServicesResultPage) NotDone() bool {
  4099  	return !page.aaplsr.IsEmpty()
  4100  }
  4101  
  4102  // Response returns the raw server response from the last page request.
  4103  func (page AutoApprovedPrivateLinkServicesResultPage) Response() AutoApprovedPrivateLinkServicesResult {
  4104  	return page.aaplsr
  4105  }
  4106  
  4107  // Values returns the slice of values for the current page or nil if there are no values.
  4108  func (page AutoApprovedPrivateLinkServicesResultPage) Values() []AutoApprovedPrivateLinkService {
  4109  	if page.aaplsr.IsEmpty() {
  4110  		return nil
  4111  	}
  4112  	return *page.aaplsr.Value
  4113  }
  4114  
  4115  // Creates a new instance of the AutoApprovedPrivateLinkServicesResultPage type.
  4116  func NewAutoApprovedPrivateLinkServicesResultPage(cur AutoApprovedPrivateLinkServicesResult, getNextPage func(context.Context, AutoApprovedPrivateLinkServicesResult) (AutoApprovedPrivateLinkServicesResult, error)) AutoApprovedPrivateLinkServicesResultPage {
  4117  	return AutoApprovedPrivateLinkServicesResultPage{
  4118  		fn:     getNextPage,
  4119  		aaplsr: cur,
  4120  	}
  4121  }
  4122  
  4123  // Availability availability of the metric.
  4124  type Availability struct {
  4125  	// TimeGrain - The time grain of the availability.
  4126  	TimeGrain *string `json:"timeGrain,omitempty"`
  4127  	// Retention - The retention of the availability.
  4128  	Retention *string `json:"retention,omitempty"`
  4129  	// BlobDuration - Duration of the availability blob.
  4130  	BlobDuration *string `json:"blobDuration,omitempty"`
  4131  }
  4132  
  4133  // AvailableDelegation the serviceName of an AvailableDelegation indicates a possible delegation for a
  4134  // subnet.
  4135  type AvailableDelegation struct {
  4136  	// Name - The name of the AvailableDelegation resource.
  4137  	Name *string `json:"name,omitempty"`
  4138  	// ID - A unique identifier of the AvailableDelegation resource.
  4139  	ID *string `json:"id,omitempty"`
  4140  	// Type - Resource type.
  4141  	Type *string `json:"type,omitempty"`
  4142  	// ServiceName - The name of the service and resource.
  4143  	ServiceName *string `json:"serviceName,omitempty"`
  4144  	// Actions - The actions permitted to the service upon delegation.
  4145  	Actions *[]string `json:"actions,omitempty"`
  4146  }
  4147  
  4148  // AvailableDelegationsResult an array of available delegations.
  4149  type AvailableDelegationsResult struct {
  4150  	autorest.Response `json:"-"`
  4151  	// Value - An array of available delegations.
  4152  	Value *[]AvailableDelegation `json:"value,omitempty"`
  4153  	// NextLink - READ-ONLY; The URL to get the next set of results.
  4154  	NextLink *string `json:"nextLink,omitempty"`
  4155  }
  4156  
  4157  // MarshalJSON is the custom marshaler for AvailableDelegationsResult.
  4158  func (adr AvailableDelegationsResult) MarshalJSON() ([]byte, error) {
  4159  	objectMap := make(map[string]interface{})
  4160  	if adr.Value != nil {
  4161  		objectMap["value"] = adr.Value
  4162  	}
  4163  	return json.Marshal(objectMap)
  4164  }
  4165  
  4166  // AvailableDelegationsResultIterator provides access to a complete listing of AvailableDelegation values.
  4167  type AvailableDelegationsResultIterator struct {
  4168  	i    int
  4169  	page AvailableDelegationsResultPage
  4170  }
  4171  
  4172  // NextWithContext advances to the next value.  If there was an error making
  4173  // the request the iterator does not advance and the error is returned.
  4174  func (iter *AvailableDelegationsResultIterator) NextWithContext(ctx context.Context) (err error) {
  4175  	if tracing.IsEnabled() {
  4176  		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultIterator.NextWithContext")
  4177  		defer func() {
  4178  			sc := -1
  4179  			if iter.Response().Response.Response != nil {
  4180  				sc = iter.Response().Response.Response.StatusCode
  4181  			}
  4182  			tracing.EndSpan(ctx, sc, err)
  4183  		}()
  4184  	}
  4185  	iter.i++
  4186  	if iter.i < len(iter.page.Values()) {
  4187  		return nil
  4188  	}
  4189  	err = iter.page.NextWithContext(ctx)
  4190  	if err != nil {
  4191  		iter.i--
  4192  		return err
  4193  	}
  4194  	iter.i = 0
  4195  	return nil
  4196  }
  4197  
  4198  // Next advances to the next value.  If there was an error making
  4199  // the request the iterator does not advance and the error is returned.
  4200  // Deprecated: Use NextWithContext() instead.
  4201  func (iter *AvailableDelegationsResultIterator) Next() error {
  4202  	return iter.NextWithContext(context.Background())
  4203  }
  4204  
  4205  // NotDone returns true if the enumeration should be started or is not yet complete.
  4206  func (iter AvailableDelegationsResultIterator) NotDone() bool {
  4207  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  4208  }
  4209  
  4210  // Response returns the raw server response from the last page request.
  4211  func (iter AvailableDelegationsResultIterator) Response() AvailableDelegationsResult {
  4212  	return iter.page.Response()
  4213  }
  4214  
  4215  // Value returns the current value or a zero-initialized value if the
  4216  // iterator has advanced beyond the end of the collection.
  4217  func (iter AvailableDelegationsResultIterator) Value() AvailableDelegation {
  4218  	if !iter.page.NotDone() {
  4219  		return AvailableDelegation{}
  4220  	}
  4221  	return iter.page.Values()[iter.i]
  4222  }
  4223  
  4224  // Creates a new instance of the AvailableDelegationsResultIterator type.
  4225  func NewAvailableDelegationsResultIterator(page AvailableDelegationsResultPage) AvailableDelegationsResultIterator {
  4226  	return AvailableDelegationsResultIterator{page: page}
  4227  }
  4228  
  4229  // IsEmpty returns true if the ListResult contains no values.
  4230  func (adr AvailableDelegationsResult) IsEmpty() bool {
  4231  	return adr.Value == nil || len(*adr.Value) == 0
  4232  }
  4233  
  4234  // hasNextLink returns true if the NextLink is not empty.
  4235  func (adr AvailableDelegationsResult) hasNextLink() bool {
  4236  	return adr.NextLink != nil && len(*adr.NextLink) != 0
  4237  }
  4238  
  4239  // availableDelegationsResultPreparer prepares a request to retrieve the next set of results.
  4240  // It returns nil if no more results exist.
  4241  func (adr AvailableDelegationsResult) availableDelegationsResultPreparer(ctx context.Context) (*http.Request, error) {
  4242  	if !adr.hasNextLink() {
  4243  		return nil, nil
  4244  	}
  4245  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  4246  		autorest.AsJSON(),
  4247  		autorest.AsGet(),
  4248  		autorest.WithBaseURL(to.String(adr.NextLink)))
  4249  }
  4250  
  4251  // AvailableDelegationsResultPage contains a page of AvailableDelegation values.
  4252  type AvailableDelegationsResultPage struct {
  4253  	fn  func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)
  4254  	adr AvailableDelegationsResult
  4255  }
  4256  
  4257  // NextWithContext advances to the next page of values.  If there was an error making
  4258  // the request the page does not advance and the error is returned.
  4259  func (page *AvailableDelegationsResultPage) NextWithContext(ctx context.Context) (err error) {
  4260  	if tracing.IsEnabled() {
  4261  		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableDelegationsResultPage.NextWithContext")
  4262  		defer func() {
  4263  			sc := -1
  4264  			if page.Response().Response.Response != nil {
  4265  				sc = page.Response().Response.Response.StatusCode
  4266  			}
  4267  			tracing.EndSpan(ctx, sc, err)
  4268  		}()
  4269  	}
  4270  	for {
  4271  		next, err := page.fn(ctx, page.adr)
  4272  		if err != nil {
  4273  			return err
  4274  		}
  4275  		page.adr = next
  4276  		if !next.hasNextLink() || !next.IsEmpty() {
  4277  			break
  4278  		}
  4279  	}
  4280  	return nil
  4281  }
  4282  
  4283  // Next advances to the next page of values.  If there was an error making
  4284  // the request the page does not advance and the error is returned.
  4285  // Deprecated: Use NextWithContext() instead.
  4286  func (page *AvailableDelegationsResultPage) Next() error {
  4287  	return page.NextWithContext(context.Background())
  4288  }
  4289  
  4290  // NotDone returns true if the page enumeration should be started or is not yet complete.
  4291  func (page AvailableDelegationsResultPage) NotDone() bool {
  4292  	return !page.adr.IsEmpty()
  4293  }
  4294  
  4295  // Response returns the raw server response from the last page request.
  4296  func (page AvailableDelegationsResultPage) Response() AvailableDelegationsResult {
  4297  	return page.adr
  4298  }
  4299  
  4300  // Values returns the slice of values for the current page or nil if there are no values.
  4301  func (page AvailableDelegationsResultPage) Values() []AvailableDelegation {
  4302  	if page.adr.IsEmpty() {
  4303  		return nil
  4304  	}
  4305  	return *page.adr.Value
  4306  }
  4307  
  4308  // Creates a new instance of the AvailableDelegationsResultPage type.
  4309  func NewAvailableDelegationsResultPage(cur AvailableDelegationsResult, getNextPage func(context.Context, AvailableDelegationsResult) (AvailableDelegationsResult, error)) AvailableDelegationsResultPage {
  4310  	return AvailableDelegationsResultPage{
  4311  		fn:  getNextPage,
  4312  		adr: cur,
  4313  	}
  4314  }
  4315  
  4316  // AvailablePrivateEndpointType the information of an AvailablePrivateEndpointType.
  4317  type AvailablePrivateEndpointType struct {
  4318  	// Name - The name of the service and resource.
  4319  	Name *string `json:"name,omitempty"`
  4320  	// ID - A unique identifier of the AvailablePrivateEndpoint Type resource.
  4321  	ID *string `json:"id,omitempty"`
  4322  	// Type - Resource type.
  4323  	Type *string `json:"type,omitempty"`
  4324  	// ResourceName - The name of the service and resource.
  4325  	ResourceName *string `json:"resourceName,omitempty"`
  4326  }
  4327  
  4328  // AvailablePrivateEndpointTypesResult an array of available PrivateEndpoint types.
  4329  type AvailablePrivateEndpointTypesResult struct {
  4330  	autorest.Response `json:"-"`
  4331  	// Value - An array of available privateEndpoint type.
  4332  	Value *[]AvailablePrivateEndpointType `json:"value,omitempty"`
  4333  	// NextLink - READ-ONLY; The URL to get the next set of results.
  4334  	NextLink *string `json:"nextLink,omitempty"`
  4335  }
  4336  
  4337  // MarshalJSON is the custom marshaler for AvailablePrivateEndpointTypesResult.
  4338  func (apetr AvailablePrivateEndpointTypesResult) MarshalJSON() ([]byte, error) {
  4339  	objectMap := make(map[string]interface{})
  4340  	if apetr.Value != nil {
  4341  		objectMap["value"] = apetr.Value
  4342  	}
  4343  	return json.Marshal(objectMap)
  4344  }
  4345  
  4346  // AvailablePrivateEndpointTypesResultIterator provides access to a complete listing of
  4347  // AvailablePrivateEndpointType values.
  4348  type AvailablePrivateEndpointTypesResultIterator struct {
  4349  	i    int
  4350  	page AvailablePrivateEndpointTypesResultPage
  4351  }
  4352  
  4353  // NextWithContext advances to the next value.  If there was an error making
  4354  // the request the iterator does not advance and the error is returned.
  4355  func (iter *AvailablePrivateEndpointTypesResultIterator) NextWithContext(ctx context.Context) (err error) {
  4356  	if tracing.IsEnabled() {
  4357  		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultIterator.NextWithContext")
  4358  		defer func() {
  4359  			sc := -1
  4360  			if iter.Response().Response.Response != nil {
  4361  				sc = iter.Response().Response.Response.StatusCode
  4362  			}
  4363  			tracing.EndSpan(ctx, sc, err)
  4364  		}()
  4365  	}
  4366  	iter.i++
  4367  	if iter.i < len(iter.page.Values()) {
  4368  		return nil
  4369  	}
  4370  	err = iter.page.NextWithContext(ctx)
  4371  	if err != nil {
  4372  		iter.i--
  4373  		return err
  4374  	}
  4375  	iter.i = 0
  4376  	return nil
  4377  }
  4378  
  4379  // Next advances to the next value.  If there was an error making
  4380  // the request the iterator does not advance and the error is returned.
  4381  // Deprecated: Use NextWithContext() instead.
  4382  func (iter *AvailablePrivateEndpointTypesResultIterator) Next() error {
  4383  	return iter.NextWithContext(context.Background())
  4384  }
  4385  
  4386  // NotDone returns true if the enumeration should be started or is not yet complete.
  4387  func (iter AvailablePrivateEndpointTypesResultIterator) NotDone() bool {
  4388  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  4389  }
  4390  
  4391  // Response returns the raw server response from the last page request.
  4392  func (iter AvailablePrivateEndpointTypesResultIterator) Response() AvailablePrivateEndpointTypesResult {
  4393  	return iter.page.Response()
  4394  }
  4395  
  4396  // Value returns the current value or a zero-initialized value if the
  4397  // iterator has advanced beyond the end of the collection.
  4398  func (iter AvailablePrivateEndpointTypesResultIterator) Value() AvailablePrivateEndpointType {
  4399  	if !iter.page.NotDone() {
  4400  		return AvailablePrivateEndpointType{}
  4401  	}
  4402  	return iter.page.Values()[iter.i]
  4403  }
  4404  
  4405  // Creates a new instance of the AvailablePrivateEndpointTypesResultIterator type.
  4406  func NewAvailablePrivateEndpointTypesResultIterator(page AvailablePrivateEndpointTypesResultPage) AvailablePrivateEndpointTypesResultIterator {
  4407  	return AvailablePrivateEndpointTypesResultIterator{page: page}
  4408  }
  4409  
  4410  // IsEmpty returns true if the ListResult contains no values.
  4411  func (apetr AvailablePrivateEndpointTypesResult) IsEmpty() bool {
  4412  	return apetr.Value == nil || len(*apetr.Value) == 0
  4413  }
  4414  
  4415  // hasNextLink returns true if the NextLink is not empty.
  4416  func (apetr AvailablePrivateEndpointTypesResult) hasNextLink() bool {
  4417  	return apetr.NextLink != nil && len(*apetr.NextLink) != 0
  4418  }
  4419  
  4420  // availablePrivateEndpointTypesResultPreparer prepares a request to retrieve the next set of results.
  4421  // It returns nil if no more results exist.
  4422  func (apetr AvailablePrivateEndpointTypesResult) availablePrivateEndpointTypesResultPreparer(ctx context.Context) (*http.Request, error) {
  4423  	if !apetr.hasNextLink() {
  4424  		return nil, nil
  4425  	}
  4426  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  4427  		autorest.AsJSON(),
  4428  		autorest.AsGet(),
  4429  		autorest.WithBaseURL(to.String(apetr.NextLink)))
  4430  }
  4431  
  4432  // AvailablePrivateEndpointTypesResultPage contains a page of AvailablePrivateEndpointType values.
  4433  type AvailablePrivateEndpointTypesResultPage struct {
  4434  	fn    func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)
  4435  	apetr AvailablePrivateEndpointTypesResult
  4436  }
  4437  
  4438  // NextWithContext advances to the next page of values.  If there was an error making
  4439  // the request the page does not advance and the error is returned.
  4440  func (page *AvailablePrivateEndpointTypesResultPage) NextWithContext(ctx context.Context) (err error) {
  4441  	if tracing.IsEnabled() {
  4442  		ctx = tracing.StartSpan(ctx, fqdn+"/AvailablePrivateEndpointTypesResultPage.NextWithContext")
  4443  		defer func() {
  4444  			sc := -1
  4445  			if page.Response().Response.Response != nil {
  4446  				sc = page.Response().Response.Response.StatusCode
  4447  			}
  4448  			tracing.EndSpan(ctx, sc, err)
  4449  		}()
  4450  	}
  4451  	for {
  4452  		next, err := page.fn(ctx, page.apetr)
  4453  		if err != nil {
  4454  			return err
  4455  		}
  4456  		page.apetr = next
  4457  		if !next.hasNextLink() || !next.IsEmpty() {
  4458  			break
  4459  		}
  4460  	}
  4461  	return nil
  4462  }
  4463  
  4464  // Next advances to the next page of values.  If there was an error making
  4465  // the request the page does not advance and the error is returned.
  4466  // Deprecated: Use NextWithContext() instead.
  4467  func (page *AvailablePrivateEndpointTypesResultPage) Next() error {
  4468  	return page.NextWithContext(context.Background())
  4469  }
  4470  
  4471  // NotDone returns true if the page enumeration should be started or is not yet complete.
  4472  func (page AvailablePrivateEndpointTypesResultPage) NotDone() bool {
  4473  	return !page.apetr.IsEmpty()
  4474  }
  4475  
  4476  // Response returns the raw server response from the last page request.
  4477  func (page AvailablePrivateEndpointTypesResultPage) Response() AvailablePrivateEndpointTypesResult {
  4478  	return page.apetr
  4479  }
  4480  
  4481  // Values returns the slice of values for the current page or nil if there are no values.
  4482  func (page AvailablePrivateEndpointTypesResultPage) Values() []AvailablePrivateEndpointType {
  4483  	if page.apetr.IsEmpty() {
  4484  		return nil
  4485  	}
  4486  	return *page.apetr.Value
  4487  }
  4488  
  4489  // Creates a new instance of the AvailablePrivateEndpointTypesResultPage type.
  4490  func NewAvailablePrivateEndpointTypesResultPage(cur AvailablePrivateEndpointTypesResult, getNextPage func(context.Context, AvailablePrivateEndpointTypesResult) (AvailablePrivateEndpointTypesResult, error)) AvailablePrivateEndpointTypesResultPage {
  4491  	return AvailablePrivateEndpointTypesResultPage{
  4492  		fn:    getNextPage,
  4493  		apetr: cur,
  4494  	}
  4495  }
  4496  
  4497  // AvailableProvidersList list of available countries with details.
  4498  type AvailableProvidersList struct {
  4499  	autorest.Response `json:"-"`
  4500  	// Countries - List of available countries.
  4501  	Countries *[]AvailableProvidersListCountry `json:"countries,omitempty"`
  4502  }
  4503  
  4504  // AvailableProvidersListCity city or town details.
  4505  type AvailableProvidersListCity struct {
  4506  	// CityName - The city or town name.
  4507  	CityName *string `json:"cityName,omitempty"`
  4508  	// Providers - A list of Internet service providers.
  4509  	Providers *[]string `json:"providers,omitempty"`
  4510  }
  4511  
  4512  // AvailableProvidersListCountry country details.
  4513  type AvailableProvidersListCountry struct {
  4514  	// CountryName - The country name.
  4515  	CountryName *string `json:"countryName,omitempty"`
  4516  	// Providers - A list of Internet service providers.
  4517  	Providers *[]string `json:"providers,omitempty"`
  4518  	// States - List of available states in the country.
  4519  	States *[]AvailableProvidersListState `json:"states,omitempty"`
  4520  }
  4521  
  4522  // AvailableProvidersListParameters constraints that determine the list of available Internet service
  4523  // providers.
  4524  type AvailableProvidersListParameters struct {
  4525  	// AzureLocations - A list of Azure regions.
  4526  	AzureLocations *[]string `json:"azureLocations,omitempty"`
  4527  	// Country - The country for available providers list.
  4528  	Country *string `json:"country,omitempty"`
  4529  	// State - The state for available providers list.
  4530  	State *string `json:"state,omitempty"`
  4531  	// City - The city or town for available providers list.
  4532  	City *string `json:"city,omitempty"`
  4533  }
  4534  
  4535  // AvailableProvidersListState state details.
  4536  type AvailableProvidersListState struct {
  4537  	// StateName - The state name.
  4538  	StateName *string `json:"stateName,omitempty"`
  4539  	// Providers - A list of Internet service providers.
  4540  	Providers *[]string `json:"providers,omitempty"`
  4541  	// Cities - List of available cities or towns in the state.
  4542  	Cities *[]AvailableProvidersListCity `json:"cities,omitempty"`
  4543  }
  4544  
  4545  // AvailableServiceAlias the available service alias.
  4546  type AvailableServiceAlias struct {
  4547  	// Name - The name of the service alias.
  4548  	Name *string `json:"name,omitempty"`
  4549  	// ID - The ID of the service alias.
  4550  	ID *string `json:"id,omitempty"`
  4551  	// Type - The type of the resource.
  4552  	Type *string `json:"type,omitempty"`
  4553  	// ResourceName - The resource name of the service alias.
  4554  	ResourceName *string `json:"resourceName,omitempty"`
  4555  }
  4556  
  4557  // AvailableServiceAliasesResult an array of available service aliases.
  4558  type AvailableServiceAliasesResult struct {
  4559  	autorest.Response `json:"-"`
  4560  	// Value - An array of available service aliases.
  4561  	Value *[]AvailableServiceAlias `json:"value,omitempty"`
  4562  	// NextLink - READ-ONLY; The URL to get the next set of results.
  4563  	NextLink *string `json:"nextLink,omitempty"`
  4564  }
  4565  
  4566  // MarshalJSON is the custom marshaler for AvailableServiceAliasesResult.
  4567  func (asar AvailableServiceAliasesResult) MarshalJSON() ([]byte, error) {
  4568  	objectMap := make(map[string]interface{})
  4569  	if asar.Value != nil {
  4570  		objectMap["value"] = asar.Value
  4571  	}
  4572  	return json.Marshal(objectMap)
  4573  }
  4574  
  4575  // AvailableServiceAliasesResultIterator provides access to a complete listing of AvailableServiceAlias
  4576  // values.
  4577  type AvailableServiceAliasesResultIterator struct {
  4578  	i    int
  4579  	page AvailableServiceAliasesResultPage
  4580  }
  4581  
  4582  // NextWithContext advances to the next value.  If there was an error making
  4583  // the request the iterator does not advance and the error is returned.
  4584  func (iter *AvailableServiceAliasesResultIterator) NextWithContext(ctx context.Context) (err error) {
  4585  	if tracing.IsEnabled() {
  4586  		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableServiceAliasesResultIterator.NextWithContext")
  4587  		defer func() {
  4588  			sc := -1
  4589  			if iter.Response().Response.Response != nil {
  4590  				sc = iter.Response().Response.Response.StatusCode
  4591  			}
  4592  			tracing.EndSpan(ctx, sc, err)
  4593  		}()
  4594  	}
  4595  	iter.i++
  4596  	if iter.i < len(iter.page.Values()) {
  4597  		return nil
  4598  	}
  4599  	err = iter.page.NextWithContext(ctx)
  4600  	if err != nil {
  4601  		iter.i--
  4602  		return err
  4603  	}
  4604  	iter.i = 0
  4605  	return nil
  4606  }
  4607  
  4608  // Next advances to the next value.  If there was an error making
  4609  // the request the iterator does not advance and the error is returned.
  4610  // Deprecated: Use NextWithContext() instead.
  4611  func (iter *AvailableServiceAliasesResultIterator) Next() error {
  4612  	return iter.NextWithContext(context.Background())
  4613  }
  4614  
  4615  // NotDone returns true if the enumeration should be started or is not yet complete.
  4616  func (iter AvailableServiceAliasesResultIterator) NotDone() bool {
  4617  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  4618  }
  4619  
  4620  // Response returns the raw server response from the last page request.
  4621  func (iter AvailableServiceAliasesResultIterator) Response() AvailableServiceAliasesResult {
  4622  	return iter.page.Response()
  4623  }
  4624  
  4625  // Value returns the current value or a zero-initialized value if the
  4626  // iterator has advanced beyond the end of the collection.
  4627  func (iter AvailableServiceAliasesResultIterator) Value() AvailableServiceAlias {
  4628  	if !iter.page.NotDone() {
  4629  		return AvailableServiceAlias{}
  4630  	}
  4631  	return iter.page.Values()[iter.i]
  4632  }
  4633  
  4634  // Creates a new instance of the AvailableServiceAliasesResultIterator type.
  4635  func NewAvailableServiceAliasesResultIterator(page AvailableServiceAliasesResultPage) AvailableServiceAliasesResultIterator {
  4636  	return AvailableServiceAliasesResultIterator{page: page}
  4637  }
  4638  
  4639  // IsEmpty returns true if the ListResult contains no values.
  4640  func (asar AvailableServiceAliasesResult) IsEmpty() bool {
  4641  	return asar.Value == nil || len(*asar.Value) == 0
  4642  }
  4643  
  4644  // hasNextLink returns true if the NextLink is not empty.
  4645  func (asar AvailableServiceAliasesResult) hasNextLink() bool {
  4646  	return asar.NextLink != nil && len(*asar.NextLink) != 0
  4647  }
  4648  
  4649  // availableServiceAliasesResultPreparer prepares a request to retrieve the next set of results.
  4650  // It returns nil if no more results exist.
  4651  func (asar AvailableServiceAliasesResult) availableServiceAliasesResultPreparer(ctx context.Context) (*http.Request, error) {
  4652  	if !asar.hasNextLink() {
  4653  		return nil, nil
  4654  	}
  4655  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  4656  		autorest.AsJSON(),
  4657  		autorest.AsGet(),
  4658  		autorest.WithBaseURL(to.String(asar.NextLink)))
  4659  }
  4660  
  4661  // AvailableServiceAliasesResultPage contains a page of AvailableServiceAlias values.
  4662  type AvailableServiceAliasesResultPage struct {
  4663  	fn   func(context.Context, AvailableServiceAliasesResult) (AvailableServiceAliasesResult, error)
  4664  	asar AvailableServiceAliasesResult
  4665  }
  4666  
  4667  // NextWithContext advances to the next page of values.  If there was an error making
  4668  // the request the page does not advance and the error is returned.
  4669  func (page *AvailableServiceAliasesResultPage) NextWithContext(ctx context.Context) (err error) {
  4670  	if tracing.IsEnabled() {
  4671  		ctx = tracing.StartSpan(ctx, fqdn+"/AvailableServiceAliasesResultPage.NextWithContext")
  4672  		defer func() {
  4673  			sc := -1
  4674  			if page.Response().Response.Response != nil {
  4675  				sc = page.Response().Response.Response.StatusCode
  4676  			}
  4677  			tracing.EndSpan(ctx, sc, err)
  4678  		}()
  4679  	}
  4680  	for {
  4681  		next, err := page.fn(ctx, page.asar)
  4682  		if err != nil {
  4683  			return err
  4684  		}
  4685  		page.asar = next
  4686  		if !next.hasNextLink() || !next.IsEmpty() {
  4687  			break
  4688  		}
  4689  	}
  4690  	return nil
  4691  }
  4692  
  4693  // Next advances to the next page of values.  If there was an error making
  4694  // the request the page does not advance and the error is returned.
  4695  // Deprecated: Use NextWithContext() instead.
  4696  func (page *AvailableServiceAliasesResultPage) Next() error {
  4697  	return page.NextWithContext(context.Background())
  4698  }
  4699  
  4700  // NotDone returns true if the page enumeration should be started or is not yet complete.
  4701  func (page AvailableServiceAliasesResultPage) NotDone() bool {
  4702  	return !page.asar.IsEmpty()
  4703  }
  4704  
  4705  // Response returns the raw server response from the last page request.
  4706  func (page AvailableServiceAliasesResultPage) Response() AvailableServiceAliasesResult {
  4707  	return page.asar
  4708  }
  4709  
  4710  // Values returns the slice of values for the current page or nil if there are no values.
  4711  func (page AvailableServiceAliasesResultPage) Values() []AvailableServiceAlias {
  4712  	if page.asar.IsEmpty() {
  4713  		return nil
  4714  	}
  4715  	return *page.asar.Value
  4716  }
  4717  
  4718  // Creates a new instance of the AvailableServiceAliasesResultPage type.
  4719  func NewAvailableServiceAliasesResultPage(cur AvailableServiceAliasesResult, getNextPage func(context.Context, AvailableServiceAliasesResult) (AvailableServiceAliasesResult, error)) AvailableServiceAliasesResultPage {
  4720  	return AvailableServiceAliasesResultPage{
  4721  		fn:   getNextPage,
  4722  		asar: cur,
  4723  	}
  4724  }
  4725  
  4726  // AzureAsyncOperationResult the response body contains the status of the specified asynchronous operation,
  4727  // indicating whether it has succeeded, is in progress, or has failed. Note that this status is distinct
  4728  // from the HTTP status code returned for the Get Operation Status operation itself. If the asynchronous
  4729  // operation succeeded, the response body includes the HTTP status code for the successful request. If the
  4730  // asynchronous operation failed, the response body includes the HTTP status code for the failed request
  4731  // and error information regarding the failure.
  4732  type AzureAsyncOperationResult struct {
  4733  	// Status - Status of the Azure async operation. Possible values include: 'OperationStatusInProgress', 'OperationStatusSucceeded', 'OperationStatusFailed'
  4734  	Status OperationStatus `json:"status,omitempty"`
  4735  	// Error - Details of the error occurred during specified asynchronous operation.
  4736  	Error *Error `json:"error,omitempty"`
  4737  }
  4738  
  4739  // AzureFirewall azure Firewall resource.
  4740  type AzureFirewall struct {
  4741  	autorest.Response `json:"-"`
  4742  	// AzureFirewallPropertiesFormat - Properties of the azure firewall.
  4743  	*AzureFirewallPropertiesFormat `json:"properties,omitempty"`
  4744  	// Zones - A list of availability zones denoting where the resource needs to come from.
  4745  	Zones *[]string `json:"zones,omitempty"`
  4746  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  4747  	Etag *string `json:"etag,omitempty"`
  4748  	// ID - Resource ID.
  4749  	ID *string `json:"id,omitempty"`
  4750  	// Name - READ-ONLY; Resource name.
  4751  	Name *string `json:"name,omitempty"`
  4752  	// Type - READ-ONLY; Resource type.
  4753  	Type *string `json:"type,omitempty"`
  4754  	// Location - Resource location.
  4755  	Location *string `json:"location,omitempty"`
  4756  	// Tags - Resource tags.
  4757  	Tags map[string]*string `json:"tags"`
  4758  }
  4759  
  4760  // MarshalJSON is the custom marshaler for AzureFirewall.
  4761  func (af AzureFirewall) MarshalJSON() ([]byte, error) {
  4762  	objectMap := make(map[string]interface{})
  4763  	if af.AzureFirewallPropertiesFormat != nil {
  4764  		objectMap["properties"] = af.AzureFirewallPropertiesFormat
  4765  	}
  4766  	if af.Zones != nil {
  4767  		objectMap["zones"] = af.Zones
  4768  	}
  4769  	if af.ID != nil {
  4770  		objectMap["id"] = af.ID
  4771  	}
  4772  	if af.Location != nil {
  4773  		objectMap["location"] = af.Location
  4774  	}
  4775  	if af.Tags != nil {
  4776  		objectMap["tags"] = af.Tags
  4777  	}
  4778  	return json.Marshal(objectMap)
  4779  }
  4780  
  4781  // UnmarshalJSON is the custom unmarshaler for AzureFirewall struct.
  4782  func (af *AzureFirewall) UnmarshalJSON(body []byte) error {
  4783  	var m map[string]*json.RawMessage
  4784  	err := json.Unmarshal(body, &m)
  4785  	if err != nil {
  4786  		return err
  4787  	}
  4788  	for k, v := range m {
  4789  		switch k {
  4790  		case "properties":
  4791  			if v != nil {
  4792  				var azureFirewallPropertiesFormat AzureFirewallPropertiesFormat
  4793  				err = json.Unmarshal(*v, &azureFirewallPropertiesFormat)
  4794  				if err != nil {
  4795  					return err
  4796  				}
  4797  				af.AzureFirewallPropertiesFormat = &azureFirewallPropertiesFormat
  4798  			}
  4799  		case "zones":
  4800  			if v != nil {
  4801  				var zones []string
  4802  				err = json.Unmarshal(*v, &zones)
  4803  				if err != nil {
  4804  					return err
  4805  				}
  4806  				af.Zones = &zones
  4807  			}
  4808  		case "etag":
  4809  			if v != nil {
  4810  				var etag string
  4811  				err = json.Unmarshal(*v, &etag)
  4812  				if err != nil {
  4813  					return err
  4814  				}
  4815  				af.Etag = &etag
  4816  			}
  4817  		case "id":
  4818  			if v != nil {
  4819  				var ID string
  4820  				err = json.Unmarshal(*v, &ID)
  4821  				if err != nil {
  4822  					return err
  4823  				}
  4824  				af.ID = &ID
  4825  			}
  4826  		case "name":
  4827  			if v != nil {
  4828  				var name string
  4829  				err = json.Unmarshal(*v, &name)
  4830  				if err != nil {
  4831  					return err
  4832  				}
  4833  				af.Name = &name
  4834  			}
  4835  		case "type":
  4836  			if v != nil {
  4837  				var typeVar string
  4838  				err = json.Unmarshal(*v, &typeVar)
  4839  				if err != nil {
  4840  					return err
  4841  				}
  4842  				af.Type = &typeVar
  4843  			}
  4844  		case "location":
  4845  			if v != nil {
  4846  				var location string
  4847  				err = json.Unmarshal(*v, &location)
  4848  				if err != nil {
  4849  					return err
  4850  				}
  4851  				af.Location = &location
  4852  			}
  4853  		case "tags":
  4854  			if v != nil {
  4855  				var tags map[string]*string
  4856  				err = json.Unmarshal(*v, &tags)
  4857  				if err != nil {
  4858  					return err
  4859  				}
  4860  				af.Tags = tags
  4861  			}
  4862  		}
  4863  	}
  4864  
  4865  	return nil
  4866  }
  4867  
  4868  // AzureFirewallApplicationRule properties of an application rule.
  4869  type AzureFirewallApplicationRule struct {
  4870  	// Name - Name of the application rule.
  4871  	Name *string `json:"name,omitempty"`
  4872  	// Description - Description of the rule.
  4873  	Description *string `json:"description,omitempty"`
  4874  	// SourceAddresses - List of source IP addresses for this rule.
  4875  	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
  4876  	// Protocols - Array of ApplicationRuleProtocols.
  4877  	Protocols *[]AzureFirewallApplicationRuleProtocol `json:"protocols,omitempty"`
  4878  	// TargetFqdns - List of FQDNs for this rule.
  4879  	TargetFqdns *[]string `json:"targetFqdns,omitempty"`
  4880  	// FqdnTags - List of FQDN Tags for this rule.
  4881  	FqdnTags *[]string `json:"fqdnTags,omitempty"`
  4882  	// SourceIPGroups - List of source IpGroups for this rule.
  4883  	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
  4884  }
  4885  
  4886  // AzureFirewallApplicationRuleCollection application rule collection resource.
  4887  type AzureFirewallApplicationRuleCollection struct {
  4888  	// AzureFirewallApplicationRuleCollectionPropertiesFormat - Properties of the azure firewall application rule collection.
  4889  	*AzureFirewallApplicationRuleCollectionPropertiesFormat `json:"properties,omitempty"`
  4890  	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
  4891  	Name *string `json:"name,omitempty"`
  4892  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  4893  	Etag *string `json:"etag,omitempty"`
  4894  	// ID - Resource ID.
  4895  	ID *string `json:"id,omitempty"`
  4896  }
  4897  
  4898  // MarshalJSON is the custom marshaler for AzureFirewallApplicationRuleCollection.
  4899  func (afarc AzureFirewallApplicationRuleCollection) MarshalJSON() ([]byte, error) {
  4900  	objectMap := make(map[string]interface{})
  4901  	if afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat != nil {
  4902  		objectMap["properties"] = afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat
  4903  	}
  4904  	if afarc.Name != nil {
  4905  		objectMap["name"] = afarc.Name
  4906  	}
  4907  	if afarc.ID != nil {
  4908  		objectMap["id"] = afarc.ID
  4909  	}
  4910  	return json.Marshal(objectMap)
  4911  }
  4912  
  4913  // UnmarshalJSON is the custom unmarshaler for AzureFirewallApplicationRuleCollection struct.
  4914  func (afarc *AzureFirewallApplicationRuleCollection) UnmarshalJSON(body []byte) error {
  4915  	var m map[string]*json.RawMessage
  4916  	err := json.Unmarshal(body, &m)
  4917  	if err != nil {
  4918  		return err
  4919  	}
  4920  	for k, v := range m {
  4921  		switch k {
  4922  		case "properties":
  4923  			if v != nil {
  4924  				var azureFirewallApplicationRuleCollectionPropertiesFormat AzureFirewallApplicationRuleCollectionPropertiesFormat
  4925  				err = json.Unmarshal(*v, &azureFirewallApplicationRuleCollectionPropertiesFormat)
  4926  				if err != nil {
  4927  					return err
  4928  				}
  4929  				afarc.AzureFirewallApplicationRuleCollectionPropertiesFormat = &azureFirewallApplicationRuleCollectionPropertiesFormat
  4930  			}
  4931  		case "name":
  4932  			if v != nil {
  4933  				var name string
  4934  				err = json.Unmarshal(*v, &name)
  4935  				if err != nil {
  4936  					return err
  4937  				}
  4938  				afarc.Name = &name
  4939  			}
  4940  		case "etag":
  4941  			if v != nil {
  4942  				var etag string
  4943  				err = json.Unmarshal(*v, &etag)
  4944  				if err != nil {
  4945  					return err
  4946  				}
  4947  				afarc.Etag = &etag
  4948  			}
  4949  		case "id":
  4950  			if v != nil {
  4951  				var ID string
  4952  				err = json.Unmarshal(*v, &ID)
  4953  				if err != nil {
  4954  					return err
  4955  				}
  4956  				afarc.ID = &ID
  4957  			}
  4958  		}
  4959  	}
  4960  
  4961  	return nil
  4962  }
  4963  
  4964  // AzureFirewallApplicationRuleCollectionPropertiesFormat properties of the application rule collection.
  4965  type AzureFirewallApplicationRuleCollectionPropertiesFormat struct {
  4966  	// Priority - Priority of the application rule collection resource.
  4967  	Priority *int32 `json:"priority,omitempty"`
  4968  	// Action - The action type of a rule collection.
  4969  	Action *AzureFirewallRCAction `json:"action,omitempty"`
  4970  	// Rules - Collection of rules used by a application rule collection.
  4971  	Rules *[]AzureFirewallApplicationRule `json:"rules,omitempty"`
  4972  	// ProvisioningState - READ-ONLY; The provisioning state of the application rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  4973  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  4974  }
  4975  
  4976  // MarshalJSON is the custom marshaler for AzureFirewallApplicationRuleCollectionPropertiesFormat.
  4977  func (afarcpf AzureFirewallApplicationRuleCollectionPropertiesFormat) MarshalJSON() ([]byte, error) {
  4978  	objectMap := make(map[string]interface{})
  4979  	if afarcpf.Priority != nil {
  4980  		objectMap["priority"] = afarcpf.Priority
  4981  	}
  4982  	if afarcpf.Action != nil {
  4983  		objectMap["action"] = afarcpf.Action
  4984  	}
  4985  	if afarcpf.Rules != nil {
  4986  		objectMap["rules"] = afarcpf.Rules
  4987  	}
  4988  	return json.Marshal(objectMap)
  4989  }
  4990  
  4991  // AzureFirewallApplicationRuleProtocol properties of the application rule protocol.
  4992  type AzureFirewallApplicationRuleProtocol struct {
  4993  	// ProtocolType - Protocol type. Possible values include: 'AzureFirewallApplicationRuleProtocolTypeHTTP', 'AzureFirewallApplicationRuleProtocolTypeHTTPS', 'AzureFirewallApplicationRuleProtocolTypeMssql'
  4994  	ProtocolType AzureFirewallApplicationRuleProtocolType `json:"protocolType,omitempty"`
  4995  	// Port - Port number for the protocol, cannot be greater than 64000. This field is optional.
  4996  	Port *int32 `json:"port,omitempty"`
  4997  }
  4998  
  4999  // AzureFirewallFqdnTag azure Firewall FQDN Tag Resource.
  5000  type AzureFirewallFqdnTag struct {
  5001  	// AzureFirewallFqdnTagPropertiesFormat - Properties of the azure firewall FQDN tag.
  5002  	*AzureFirewallFqdnTagPropertiesFormat `json:"properties,omitempty"`
  5003  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  5004  	Etag *string `json:"etag,omitempty"`
  5005  	// ID - Resource ID.
  5006  	ID *string `json:"id,omitempty"`
  5007  	// Name - READ-ONLY; Resource name.
  5008  	Name *string `json:"name,omitempty"`
  5009  	// Type - READ-ONLY; Resource type.
  5010  	Type *string `json:"type,omitempty"`
  5011  	// Location - Resource location.
  5012  	Location *string `json:"location,omitempty"`
  5013  	// Tags - Resource tags.
  5014  	Tags map[string]*string `json:"tags"`
  5015  }
  5016  
  5017  // MarshalJSON is the custom marshaler for AzureFirewallFqdnTag.
  5018  func (afft AzureFirewallFqdnTag) MarshalJSON() ([]byte, error) {
  5019  	objectMap := make(map[string]interface{})
  5020  	if afft.AzureFirewallFqdnTagPropertiesFormat != nil {
  5021  		objectMap["properties"] = afft.AzureFirewallFqdnTagPropertiesFormat
  5022  	}
  5023  	if afft.ID != nil {
  5024  		objectMap["id"] = afft.ID
  5025  	}
  5026  	if afft.Location != nil {
  5027  		objectMap["location"] = afft.Location
  5028  	}
  5029  	if afft.Tags != nil {
  5030  		objectMap["tags"] = afft.Tags
  5031  	}
  5032  	return json.Marshal(objectMap)
  5033  }
  5034  
  5035  // UnmarshalJSON is the custom unmarshaler for AzureFirewallFqdnTag struct.
  5036  func (afft *AzureFirewallFqdnTag) UnmarshalJSON(body []byte) error {
  5037  	var m map[string]*json.RawMessage
  5038  	err := json.Unmarshal(body, &m)
  5039  	if err != nil {
  5040  		return err
  5041  	}
  5042  	for k, v := range m {
  5043  		switch k {
  5044  		case "properties":
  5045  			if v != nil {
  5046  				var azureFirewallFqdnTagPropertiesFormat AzureFirewallFqdnTagPropertiesFormat
  5047  				err = json.Unmarshal(*v, &azureFirewallFqdnTagPropertiesFormat)
  5048  				if err != nil {
  5049  					return err
  5050  				}
  5051  				afft.AzureFirewallFqdnTagPropertiesFormat = &azureFirewallFqdnTagPropertiesFormat
  5052  			}
  5053  		case "etag":
  5054  			if v != nil {
  5055  				var etag string
  5056  				err = json.Unmarshal(*v, &etag)
  5057  				if err != nil {
  5058  					return err
  5059  				}
  5060  				afft.Etag = &etag
  5061  			}
  5062  		case "id":
  5063  			if v != nil {
  5064  				var ID string
  5065  				err = json.Unmarshal(*v, &ID)
  5066  				if err != nil {
  5067  					return err
  5068  				}
  5069  				afft.ID = &ID
  5070  			}
  5071  		case "name":
  5072  			if v != nil {
  5073  				var name string
  5074  				err = json.Unmarshal(*v, &name)
  5075  				if err != nil {
  5076  					return err
  5077  				}
  5078  				afft.Name = &name
  5079  			}
  5080  		case "type":
  5081  			if v != nil {
  5082  				var typeVar string
  5083  				err = json.Unmarshal(*v, &typeVar)
  5084  				if err != nil {
  5085  					return err
  5086  				}
  5087  				afft.Type = &typeVar
  5088  			}
  5089  		case "location":
  5090  			if v != nil {
  5091  				var location string
  5092  				err = json.Unmarshal(*v, &location)
  5093  				if err != nil {
  5094  					return err
  5095  				}
  5096  				afft.Location = &location
  5097  			}
  5098  		case "tags":
  5099  			if v != nil {
  5100  				var tags map[string]*string
  5101  				err = json.Unmarshal(*v, &tags)
  5102  				if err != nil {
  5103  					return err
  5104  				}
  5105  				afft.Tags = tags
  5106  			}
  5107  		}
  5108  	}
  5109  
  5110  	return nil
  5111  }
  5112  
  5113  // AzureFirewallFqdnTagListResult response for ListAzureFirewallFqdnTags API service call.
  5114  type AzureFirewallFqdnTagListResult struct {
  5115  	autorest.Response `json:"-"`
  5116  	// Value - List of Azure Firewall FQDN Tags in a resource group.
  5117  	Value *[]AzureFirewallFqdnTag `json:"value,omitempty"`
  5118  	// NextLink - URL to get the next set of results.
  5119  	NextLink *string `json:"nextLink,omitempty"`
  5120  }
  5121  
  5122  // AzureFirewallFqdnTagListResultIterator provides access to a complete listing of AzureFirewallFqdnTag
  5123  // values.
  5124  type AzureFirewallFqdnTagListResultIterator struct {
  5125  	i    int
  5126  	page AzureFirewallFqdnTagListResultPage
  5127  }
  5128  
  5129  // NextWithContext advances to the next value.  If there was an error making
  5130  // the request the iterator does not advance and the error is returned.
  5131  func (iter *AzureFirewallFqdnTagListResultIterator) NextWithContext(ctx context.Context) (err error) {
  5132  	if tracing.IsEnabled() {
  5133  		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultIterator.NextWithContext")
  5134  		defer func() {
  5135  			sc := -1
  5136  			if iter.Response().Response.Response != nil {
  5137  				sc = iter.Response().Response.Response.StatusCode
  5138  			}
  5139  			tracing.EndSpan(ctx, sc, err)
  5140  		}()
  5141  	}
  5142  	iter.i++
  5143  	if iter.i < len(iter.page.Values()) {
  5144  		return nil
  5145  	}
  5146  	err = iter.page.NextWithContext(ctx)
  5147  	if err != nil {
  5148  		iter.i--
  5149  		return err
  5150  	}
  5151  	iter.i = 0
  5152  	return nil
  5153  }
  5154  
  5155  // Next advances to the next value.  If there was an error making
  5156  // the request the iterator does not advance and the error is returned.
  5157  // Deprecated: Use NextWithContext() instead.
  5158  func (iter *AzureFirewallFqdnTagListResultIterator) Next() error {
  5159  	return iter.NextWithContext(context.Background())
  5160  }
  5161  
  5162  // NotDone returns true if the enumeration should be started or is not yet complete.
  5163  func (iter AzureFirewallFqdnTagListResultIterator) NotDone() bool {
  5164  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  5165  }
  5166  
  5167  // Response returns the raw server response from the last page request.
  5168  func (iter AzureFirewallFqdnTagListResultIterator) Response() AzureFirewallFqdnTagListResult {
  5169  	return iter.page.Response()
  5170  }
  5171  
  5172  // Value returns the current value or a zero-initialized value if the
  5173  // iterator has advanced beyond the end of the collection.
  5174  func (iter AzureFirewallFqdnTagListResultIterator) Value() AzureFirewallFqdnTag {
  5175  	if !iter.page.NotDone() {
  5176  		return AzureFirewallFqdnTag{}
  5177  	}
  5178  	return iter.page.Values()[iter.i]
  5179  }
  5180  
  5181  // Creates a new instance of the AzureFirewallFqdnTagListResultIterator type.
  5182  func NewAzureFirewallFqdnTagListResultIterator(page AzureFirewallFqdnTagListResultPage) AzureFirewallFqdnTagListResultIterator {
  5183  	return AzureFirewallFqdnTagListResultIterator{page: page}
  5184  }
  5185  
  5186  // IsEmpty returns true if the ListResult contains no values.
  5187  func (afftlr AzureFirewallFqdnTagListResult) IsEmpty() bool {
  5188  	return afftlr.Value == nil || len(*afftlr.Value) == 0
  5189  }
  5190  
  5191  // hasNextLink returns true if the NextLink is not empty.
  5192  func (afftlr AzureFirewallFqdnTagListResult) hasNextLink() bool {
  5193  	return afftlr.NextLink != nil && len(*afftlr.NextLink) != 0
  5194  }
  5195  
  5196  // azureFirewallFqdnTagListResultPreparer prepares a request to retrieve the next set of results.
  5197  // It returns nil if no more results exist.
  5198  func (afftlr AzureFirewallFqdnTagListResult) azureFirewallFqdnTagListResultPreparer(ctx context.Context) (*http.Request, error) {
  5199  	if !afftlr.hasNextLink() {
  5200  		return nil, nil
  5201  	}
  5202  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  5203  		autorest.AsJSON(),
  5204  		autorest.AsGet(),
  5205  		autorest.WithBaseURL(to.String(afftlr.NextLink)))
  5206  }
  5207  
  5208  // AzureFirewallFqdnTagListResultPage contains a page of AzureFirewallFqdnTag values.
  5209  type AzureFirewallFqdnTagListResultPage struct {
  5210  	fn     func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)
  5211  	afftlr AzureFirewallFqdnTagListResult
  5212  }
  5213  
  5214  // NextWithContext advances to the next page of values.  If there was an error making
  5215  // the request the page does not advance and the error is returned.
  5216  func (page *AzureFirewallFqdnTagListResultPage) NextWithContext(ctx context.Context) (err error) {
  5217  	if tracing.IsEnabled() {
  5218  		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallFqdnTagListResultPage.NextWithContext")
  5219  		defer func() {
  5220  			sc := -1
  5221  			if page.Response().Response.Response != nil {
  5222  				sc = page.Response().Response.Response.StatusCode
  5223  			}
  5224  			tracing.EndSpan(ctx, sc, err)
  5225  		}()
  5226  	}
  5227  	for {
  5228  		next, err := page.fn(ctx, page.afftlr)
  5229  		if err != nil {
  5230  			return err
  5231  		}
  5232  		page.afftlr = next
  5233  		if !next.hasNextLink() || !next.IsEmpty() {
  5234  			break
  5235  		}
  5236  	}
  5237  	return nil
  5238  }
  5239  
  5240  // Next advances to the next page of values.  If there was an error making
  5241  // the request the page does not advance and the error is returned.
  5242  // Deprecated: Use NextWithContext() instead.
  5243  func (page *AzureFirewallFqdnTagListResultPage) Next() error {
  5244  	return page.NextWithContext(context.Background())
  5245  }
  5246  
  5247  // NotDone returns true if the page enumeration should be started or is not yet complete.
  5248  func (page AzureFirewallFqdnTagListResultPage) NotDone() bool {
  5249  	return !page.afftlr.IsEmpty()
  5250  }
  5251  
  5252  // Response returns the raw server response from the last page request.
  5253  func (page AzureFirewallFqdnTagListResultPage) Response() AzureFirewallFqdnTagListResult {
  5254  	return page.afftlr
  5255  }
  5256  
  5257  // Values returns the slice of values for the current page or nil if there are no values.
  5258  func (page AzureFirewallFqdnTagListResultPage) Values() []AzureFirewallFqdnTag {
  5259  	if page.afftlr.IsEmpty() {
  5260  		return nil
  5261  	}
  5262  	return *page.afftlr.Value
  5263  }
  5264  
  5265  // Creates a new instance of the AzureFirewallFqdnTagListResultPage type.
  5266  func NewAzureFirewallFqdnTagListResultPage(cur AzureFirewallFqdnTagListResult, getNextPage func(context.Context, AzureFirewallFqdnTagListResult) (AzureFirewallFqdnTagListResult, error)) AzureFirewallFqdnTagListResultPage {
  5267  	return AzureFirewallFqdnTagListResultPage{
  5268  		fn:     getNextPage,
  5269  		afftlr: cur,
  5270  	}
  5271  }
  5272  
  5273  // AzureFirewallFqdnTagPropertiesFormat azure Firewall FQDN Tag Properties.
  5274  type AzureFirewallFqdnTagPropertiesFormat struct {
  5275  	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall FQDN tag resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  5276  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  5277  	// FqdnTagName - READ-ONLY; The name of this FQDN Tag.
  5278  	FqdnTagName *string `json:"fqdnTagName,omitempty"`
  5279  }
  5280  
  5281  // MarshalJSON is the custom marshaler for AzureFirewallFqdnTagPropertiesFormat.
  5282  func (afftpf AzureFirewallFqdnTagPropertiesFormat) MarshalJSON() ([]byte, error) {
  5283  	objectMap := make(map[string]interface{})
  5284  	return json.Marshal(objectMap)
  5285  }
  5286  
  5287  // AzureFirewallIPConfiguration IP configuration of an Azure Firewall.
  5288  type AzureFirewallIPConfiguration struct {
  5289  	// AzureFirewallIPConfigurationPropertiesFormat - Properties of the azure firewall IP configuration.
  5290  	*AzureFirewallIPConfigurationPropertiesFormat `json:"properties,omitempty"`
  5291  	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
  5292  	Name *string `json:"name,omitempty"`
  5293  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  5294  	Etag *string `json:"etag,omitempty"`
  5295  	// Type - READ-ONLY; Type of the resource.
  5296  	Type *string `json:"type,omitempty"`
  5297  	// ID - Resource ID.
  5298  	ID *string `json:"id,omitempty"`
  5299  }
  5300  
  5301  // MarshalJSON is the custom marshaler for AzureFirewallIPConfiguration.
  5302  func (afic AzureFirewallIPConfiguration) MarshalJSON() ([]byte, error) {
  5303  	objectMap := make(map[string]interface{})
  5304  	if afic.AzureFirewallIPConfigurationPropertiesFormat != nil {
  5305  		objectMap["properties"] = afic.AzureFirewallIPConfigurationPropertiesFormat
  5306  	}
  5307  	if afic.Name != nil {
  5308  		objectMap["name"] = afic.Name
  5309  	}
  5310  	if afic.ID != nil {
  5311  		objectMap["id"] = afic.ID
  5312  	}
  5313  	return json.Marshal(objectMap)
  5314  }
  5315  
  5316  // UnmarshalJSON is the custom unmarshaler for AzureFirewallIPConfiguration struct.
  5317  func (afic *AzureFirewallIPConfiguration) UnmarshalJSON(body []byte) error {
  5318  	var m map[string]*json.RawMessage
  5319  	err := json.Unmarshal(body, &m)
  5320  	if err != nil {
  5321  		return err
  5322  	}
  5323  	for k, v := range m {
  5324  		switch k {
  5325  		case "properties":
  5326  			if v != nil {
  5327  				var azureFirewallIPConfigurationPropertiesFormat AzureFirewallIPConfigurationPropertiesFormat
  5328  				err = json.Unmarshal(*v, &azureFirewallIPConfigurationPropertiesFormat)
  5329  				if err != nil {
  5330  					return err
  5331  				}
  5332  				afic.AzureFirewallIPConfigurationPropertiesFormat = &azureFirewallIPConfigurationPropertiesFormat
  5333  			}
  5334  		case "name":
  5335  			if v != nil {
  5336  				var name string
  5337  				err = json.Unmarshal(*v, &name)
  5338  				if err != nil {
  5339  					return err
  5340  				}
  5341  				afic.Name = &name
  5342  			}
  5343  		case "etag":
  5344  			if v != nil {
  5345  				var etag string
  5346  				err = json.Unmarshal(*v, &etag)
  5347  				if err != nil {
  5348  					return err
  5349  				}
  5350  				afic.Etag = &etag
  5351  			}
  5352  		case "type":
  5353  			if v != nil {
  5354  				var typeVar string
  5355  				err = json.Unmarshal(*v, &typeVar)
  5356  				if err != nil {
  5357  					return err
  5358  				}
  5359  				afic.Type = &typeVar
  5360  			}
  5361  		case "id":
  5362  			if v != nil {
  5363  				var ID string
  5364  				err = json.Unmarshal(*v, &ID)
  5365  				if err != nil {
  5366  					return err
  5367  				}
  5368  				afic.ID = &ID
  5369  			}
  5370  		}
  5371  	}
  5372  
  5373  	return nil
  5374  }
  5375  
  5376  // AzureFirewallIPConfigurationPropertiesFormat properties of IP configuration of an Azure Firewall.
  5377  type AzureFirewallIPConfigurationPropertiesFormat struct {
  5378  	// PrivateIPAddress - READ-ONLY; The Firewall Internal Load Balancer IP to be used as the next hop in User Defined Routes.
  5379  	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
  5380  	// Subnet - Reference to the subnet resource. This resource must be named 'AzureFirewallSubnet' or 'AzureFirewallManagementSubnet'.
  5381  	Subnet *SubResource `json:"subnet,omitempty"`
  5382  	// PublicIPAddress - Reference to the PublicIP resource. This field is a mandatory input if subnet is not null.
  5383  	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
  5384  	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  5385  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  5386  }
  5387  
  5388  // MarshalJSON is the custom marshaler for AzureFirewallIPConfigurationPropertiesFormat.
  5389  func (aficpf AzureFirewallIPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
  5390  	objectMap := make(map[string]interface{})
  5391  	if aficpf.Subnet != nil {
  5392  		objectMap["subnet"] = aficpf.Subnet
  5393  	}
  5394  	if aficpf.PublicIPAddress != nil {
  5395  		objectMap["publicIPAddress"] = aficpf.PublicIPAddress
  5396  	}
  5397  	return json.Marshal(objectMap)
  5398  }
  5399  
  5400  // AzureFirewallIPGroups ipGroups associated with azure firewall.
  5401  type AzureFirewallIPGroups struct {
  5402  	// ID - READ-ONLY; Resource ID.
  5403  	ID *string `json:"id,omitempty"`
  5404  	// ChangeNumber - READ-ONLY; The iteration number.
  5405  	ChangeNumber *string `json:"changeNumber,omitempty"`
  5406  }
  5407  
  5408  // MarshalJSON is the custom marshaler for AzureFirewallIPGroups.
  5409  func (afig AzureFirewallIPGroups) MarshalJSON() ([]byte, error) {
  5410  	objectMap := make(map[string]interface{})
  5411  	return json.Marshal(objectMap)
  5412  }
  5413  
  5414  // AzureFirewallListResult response for ListAzureFirewalls API service call.
  5415  type AzureFirewallListResult struct {
  5416  	autorest.Response `json:"-"`
  5417  	// Value - List of Azure Firewalls in a resource group.
  5418  	Value *[]AzureFirewall `json:"value,omitempty"`
  5419  	// NextLink - URL to get the next set of results.
  5420  	NextLink *string `json:"nextLink,omitempty"`
  5421  }
  5422  
  5423  // AzureFirewallListResultIterator provides access to a complete listing of AzureFirewall values.
  5424  type AzureFirewallListResultIterator struct {
  5425  	i    int
  5426  	page AzureFirewallListResultPage
  5427  }
  5428  
  5429  // NextWithContext advances to the next value.  If there was an error making
  5430  // the request the iterator does not advance and the error is returned.
  5431  func (iter *AzureFirewallListResultIterator) NextWithContext(ctx context.Context) (err error) {
  5432  	if tracing.IsEnabled() {
  5433  		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultIterator.NextWithContext")
  5434  		defer func() {
  5435  			sc := -1
  5436  			if iter.Response().Response.Response != nil {
  5437  				sc = iter.Response().Response.Response.StatusCode
  5438  			}
  5439  			tracing.EndSpan(ctx, sc, err)
  5440  		}()
  5441  	}
  5442  	iter.i++
  5443  	if iter.i < len(iter.page.Values()) {
  5444  		return nil
  5445  	}
  5446  	err = iter.page.NextWithContext(ctx)
  5447  	if err != nil {
  5448  		iter.i--
  5449  		return err
  5450  	}
  5451  	iter.i = 0
  5452  	return nil
  5453  }
  5454  
  5455  // Next advances to the next value.  If there was an error making
  5456  // the request the iterator does not advance and the error is returned.
  5457  // Deprecated: Use NextWithContext() instead.
  5458  func (iter *AzureFirewallListResultIterator) Next() error {
  5459  	return iter.NextWithContext(context.Background())
  5460  }
  5461  
  5462  // NotDone returns true if the enumeration should be started or is not yet complete.
  5463  func (iter AzureFirewallListResultIterator) NotDone() bool {
  5464  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  5465  }
  5466  
  5467  // Response returns the raw server response from the last page request.
  5468  func (iter AzureFirewallListResultIterator) Response() AzureFirewallListResult {
  5469  	return iter.page.Response()
  5470  }
  5471  
  5472  // Value returns the current value or a zero-initialized value if the
  5473  // iterator has advanced beyond the end of the collection.
  5474  func (iter AzureFirewallListResultIterator) Value() AzureFirewall {
  5475  	if !iter.page.NotDone() {
  5476  		return AzureFirewall{}
  5477  	}
  5478  	return iter.page.Values()[iter.i]
  5479  }
  5480  
  5481  // Creates a new instance of the AzureFirewallListResultIterator type.
  5482  func NewAzureFirewallListResultIterator(page AzureFirewallListResultPage) AzureFirewallListResultIterator {
  5483  	return AzureFirewallListResultIterator{page: page}
  5484  }
  5485  
  5486  // IsEmpty returns true if the ListResult contains no values.
  5487  func (aflr AzureFirewallListResult) IsEmpty() bool {
  5488  	return aflr.Value == nil || len(*aflr.Value) == 0
  5489  }
  5490  
  5491  // hasNextLink returns true if the NextLink is not empty.
  5492  func (aflr AzureFirewallListResult) hasNextLink() bool {
  5493  	return aflr.NextLink != nil && len(*aflr.NextLink) != 0
  5494  }
  5495  
  5496  // azureFirewallListResultPreparer prepares a request to retrieve the next set of results.
  5497  // It returns nil if no more results exist.
  5498  func (aflr AzureFirewallListResult) azureFirewallListResultPreparer(ctx context.Context) (*http.Request, error) {
  5499  	if !aflr.hasNextLink() {
  5500  		return nil, nil
  5501  	}
  5502  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  5503  		autorest.AsJSON(),
  5504  		autorest.AsGet(),
  5505  		autorest.WithBaseURL(to.String(aflr.NextLink)))
  5506  }
  5507  
  5508  // AzureFirewallListResultPage contains a page of AzureFirewall values.
  5509  type AzureFirewallListResultPage struct {
  5510  	fn   func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)
  5511  	aflr AzureFirewallListResult
  5512  }
  5513  
  5514  // NextWithContext advances to the next page of values.  If there was an error making
  5515  // the request the page does not advance and the error is returned.
  5516  func (page *AzureFirewallListResultPage) NextWithContext(ctx context.Context) (err error) {
  5517  	if tracing.IsEnabled() {
  5518  		ctx = tracing.StartSpan(ctx, fqdn+"/AzureFirewallListResultPage.NextWithContext")
  5519  		defer func() {
  5520  			sc := -1
  5521  			if page.Response().Response.Response != nil {
  5522  				sc = page.Response().Response.Response.StatusCode
  5523  			}
  5524  			tracing.EndSpan(ctx, sc, err)
  5525  		}()
  5526  	}
  5527  	for {
  5528  		next, err := page.fn(ctx, page.aflr)
  5529  		if err != nil {
  5530  			return err
  5531  		}
  5532  		page.aflr = next
  5533  		if !next.hasNextLink() || !next.IsEmpty() {
  5534  			break
  5535  		}
  5536  	}
  5537  	return nil
  5538  }
  5539  
  5540  // Next advances to the next page of values.  If there was an error making
  5541  // the request the page does not advance and the error is returned.
  5542  // Deprecated: Use NextWithContext() instead.
  5543  func (page *AzureFirewallListResultPage) Next() error {
  5544  	return page.NextWithContext(context.Background())
  5545  }
  5546  
  5547  // NotDone returns true if the page enumeration should be started or is not yet complete.
  5548  func (page AzureFirewallListResultPage) NotDone() bool {
  5549  	return !page.aflr.IsEmpty()
  5550  }
  5551  
  5552  // Response returns the raw server response from the last page request.
  5553  func (page AzureFirewallListResultPage) Response() AzureFirewallListResult {
  5554  	return page.aflr
  5555  }
  5556  
  5557  // Values returns the slice of values for the current page or nil if there are no values.
  5558  func (page AzureFirewallListResultPage) Values() []AzureFirewall {
  5559  	if page.aflr.IsEmpty() {
  5560  		return nil
  5561  	}
  5562  	return *page.aflr.Value
  5563  }
  5564  
  5565  // Creates a new instance of the AzureFirewallListResultPage type.
  5566  func NewAzureFirewallListResultPage(cur AzureFirewallListResult, getNextPage func(context.Context, AzureFirewallListResult) (AzureFirewallListResult, error)) AzureFirewallListResultPage {
  5567  	return AzureFirewallListResultPage{
  5568  		fn:   getNextPage,
  5569  		aflr: cur,
  5570  	}
  5571  }
  5572  
  5573  // AzureFirewallNatRCAction azureFirewall NAT Rule Collection Action.
  5574  type AzureFirewallNatRCAction struct {
  5575  	// Type - The type of action. Possible values include: 'Snat', 'Dnat'
  5576  	Type AzureFirewallNatRCActionType `json:"type,omitempty"`
  5577  }
  5578  
  5579  // AzureFirewallNatRule properties of a NAT rule.
  5580  type AzureFirewallNatRule struct {
  5581  	// Name - Name of the NAT rule.
  5582  	Name *string `json:"name,omitempty"`
  5583  	// Description - Description of the rule.
  5584  	Description *string `json:"description,omitempty"`
  5585  	// SourceAddresses - List of source IP addresses for this rule.
  5586  	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
  5587  	// DestinationAddresses - List of destination IP addresses for this rule. Supports IP ranges, prefixes, and service tags.
  5588  	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
  5589  	// DestinationPorts - List of destination ports.
  5590  	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
  5591  	// Protocols - Array of AzureFirewallNetworkRuleProtocols applicable to this NAT rule.
  5592  	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
  5593  	// TranslatedAddress - The translated address for this NAT rule.
  5594  	TranslatedAddress *string `json:"translatedAddress,omitempty"`
  5595  	// TranslatedPort - The translated port for this NAT rule.
  5596  	TranslatedPort *string `json:"translatedPort,omitempty"`
  5597  	// TranslatedFqdn - The translated FQDN for this NAT rule.
  5598  	TranslatedFqdn *string `json:"translatedFqdn,omitempty"`
  5599  	// SourceIPGroups - List of source IpGroups for this rule.
  5600  	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
  5601  }
  5602  
  5603  // AzureFirewallNatRuleCollection NAT rule collection resource.
  5604  type AzureFirewallNatRuleCollection struct {
  5605  	// AzureFirewallNatRuleCollectionProperties - Properties of the azure firewall NAT rule collection.
  5606  	*AzureFirewallNatRuleCollectionProperties `json:"properties,omitempty"`
  5607  	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
  5608  	Name *string `json:"name,omitempty"`
  5609  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  5610  	Etag *string `json:"etag,omitempty"`
  5611  	// ID - Resource ID.
  5612  	ID *string `json:"id,omitempty"`
  5613  }
  5614  
  5615  // MarshalJSON is the custom marshaler for AzureFirewallNatRuleCollection.
  5616  func (afnrc AzureFirewallNatRuleCollection) MarshalJSON() ([]byte, error) {
  5617  	objectMap := make(map[string]interface{})
  5618  	if afnrc.AzureFirewallNatRuleCollectionProperties != nil {
  5619  		objectMap["properties"] = afnrc.AzureFirewallNatRuleCollectionProperties
  5620  	}
  5621  	if afnrc.Name != nil {
  5622  		objectMap["name"] = afnrc.Name
  5623  	}
  5624  	if afnrc.ID != nil {
  5625  		objectMap["id"] = afnrc.ID
  5626  	}
  5627  	return json.Marshal(objectMap)
  5628  }
  5629  
  5630  // UnmarshalJSON is the custom unmarshaler for AzureFirewallNatRuleCollection struct.
  5631  func (afnrc *AzureFirewallNatRuleCollection) UnmarshalJSON(body []byte) error {
  5632  	var m map[string]*json.RawMessage
  5633  	err := json.Unmarshal(body, &m)
  5634  	if err != nil {
  5635  		return err
  5636  	}
  5637  	for k, v := range m {
  5638  		switch k {
  5639  		case "properties":
  5640  			if v != nil {
  5641  				var azureFirewallNatRuleCollectionProperties AzureFirewallNatRuleCollectionProperties
  5642  				err = json.Unmarshal(*v, &azureFirewallNatRuleCollectionProperties)
  5643  				if err != nil {
  5644  					return err
  5645  				}
  5646  				afnrc.AzureFirewallNatRuleCollectionProperties = &azureFirewallNatRuleCollectionProperties
  5647  			}
  5648  		case "name":
  5649  			if v != nil {
  5650  				var name string
  5651  				err = json.Unmarshal(*v, &name)
  5652  				if err != nil {
  5653  					return err
  5654  				}
  5655  				afnrc.Name = &name
  5656  			}
  5657  		case "etag":
  5658  			if v != nil {
  5659  				var etag string
  5660  				err = json.Unmarshal(*v, &etag)
  5661  				if err != nil {
  5662  					return err
  5663  				}
  5664  				afnrc.Etag = &etag
  5665  			}
  5666  		case "id":
  5667  			if v != nil {
  5668  				var ID string
  5669  				err = json.Unmarshal(*v, &ID)
  5670  				if err != nil {
  5671  					return err
  5672  				}
  5673  				afnrc.ID = &ID
  5674  			}
  5675  		}
  5676  	}
  5677  
  5678  	return nil
  5679  }
  5680  
  5681  // AzureFirewallNatRuleCollectionProperties properties of the NAT rule collection.
  5682  type AzureFirewallNatRuleCollectionProperties struct {
  5683  	// Priority - Priority of the NAT rule collection resource.
  5684  	Priority *int32 `json:"priority,omitempty"`
  5685  	// Action - The action type of a NAT rule collection.
  5686  	Action *AzureFirewallNatRCAction `json:"action,omitempty"`
  5687  	// Rules - Collection of rules used by a NAT rule collection.
  5688  	Rules *[]AzureFirewallNatRule `json:"rules,omitempty"`
  5689  	// ProvisioningState - READ-ONLY; The provisioning state of the NAT rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  5690  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  5691  }
  5692  
  5693  // MarshalJSON is the custom marshaler for AzureFirewallNatRuleCollectionProperties.
  5694  func (afnrcp AzureFirewallNatRuleCollectionProperties) MarshalJSON() ([]byte, error) {
  5695  	objectMap := make(map[string]interface{})
  5696  	if afnrcp.Priority != nil {
  5697  		objectMap["priority"] = afnrcp.Priority
  5698  	}
  5699  	if afnrcp.Action != nil {
  5700  		objectMap["action"] = afnrcp.Action
  5701  	}
  5702  	if afnrcp.Rules != nil {
  5703  		objectMap["rules"] = afnrcp.Rules
  5704  	}
  5705  	return json.Marshal(objectMap)
  5706  }
  5707  
  5708  // AzureFirewallNetworkRule properties of the network rule.
  5709  type AzureFirewallNetworkRule struct {
  5710  	// Name - Name of the network rule.
  5711  	Name *string `json:"name,omitempty"`
  5712  	// Description - Description of the rule.
  5713  	Description *string `json:"description,omitempty"`
  5714  	// Protocols - Array of AzureFirewallNetworkRuleProtocols.
  5715  	Protocols *[]AzureFirewallNetworkRuleProtocol `json:"protocols,omitempty"`
  5716  	// SourceAddresses - List of source IP addresses for this rule.
  5717  	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
  5718  	// DestinationAddresses - List of destination IP addresses.
  5719  	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
  5720  	// DestinationPorts - List of destination ports.
  5721  	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
  5722  	// DestinationFqdns - List of destination FQDNs.
  5723  	DestinationFqdns *[]string `json:"destinationFqdns,omitempty"`
  5724  	// SourceIPGroups - List of source IpGroups for this rule.
  5725  	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
  5726  	// DestinationIPGroups - List of destination IpGroups for this rule.
  5727  	DestinationIPGroups *[]string `json:"destinationIpGroups,omitempty"`
  5728  }
  5729  
  5730  // AzureFirewallNetworkRuleCollection network rule collection resource.
  5731  type AzureFirewallNetworkRuleCollection struct {
  5732  	// AzureFirewallNetworkRuleCollectionPropertiesFormat - Properties of the azure firewall network rule collection.
  5733  	*AzureFirewallNetworkRuleCollectionPropertiesFormat `json:"properties,omitempty"`
  5734  	// Name - The name of the resource that is unique within the Azure firewall. This name can be used to access the resource.
  5735  	Name *string `json:"name,omitempty"`
  5736  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  5737  	Etag *string `json:"etag,omitempty"`
  5738  	// ID - Resource ID.
  5739  	ID *string `json:"id,omitempty"`
  5740  }
  5741  
  5742  // MarshalJSON is the custom marshaler for AzureFirewallNetworkRuleCollection.
  5743  func (afnrc AzureFirewallNetworkRuleCollection) MarshalJSON() ([]byte, error) {
  5744  	objectMap := make(map[string]interface{})
  5745  	if afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat != nil {
  5746  		objectMap["properties"] = afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat
  5747  	}
  5748  	if afnrc.Name != nil {
  5749  		objectMap["name"] = afnrc.Name
  5750  	}
  5751  	if afnrc.ID != nil {
  5752  		objectMap["id"] = afnrc.ID
  5753  	}
  5754  	return json.Marshal(objectMap)
  5755  }
  5756  
  5757  // UnmarshalJSON is the custom unmarshaler for AzureFirewallNetworkRuleCollection struct.
  5758  func (afnrc *AzureFirewallNetworkRuleCollection) UnmarshalJSON(body []byte) error {
  5759  	var m map[string]*json.RawMessage
  5760  	err := json.Unmarshal(body, &m)
  5761  	if err != nil {
  5762  		return err
  5763  	}
  5764  	for k, v := range m {
  5765  		switch k {
  5766  		case "properties":
  5767  			if v != nil {
  5768  				var azureFirewallNetworkRuleCollectionPropertiesFormat AzureFirewallNetworkRuleCollectionPropertiesFormat
  5769  				err = json.Unmarshal(*v, &azureFirewallNetworkRuleCollectionPropertiesFormat)
  5770  				if err != nil {
  5771  					return err
  5772  				}
  5773  				afnrc.AzureFirewallNetworkRuleCollectionPropertiesFormat = &azureFirewallNetworkRuleCollectionPropertiesFormat
  5774  			}
  5775  		case "name":
  5776  			if v != nil {
  5777  				var name string
  5778  				err = json.Unmarshal(*v, &name)
  5779  				if err != nil {
  5780  					return err
  5781  				}
  5782  				afnrc.Name = &name
  5783  			}
  5784  		case "etag":
  5785  			if v != nil {
  5786  				var etag string
  5787  				err = json.Unmarshal(*v, &etag)
  5788  				if err != nil {
  5789  					return err
  5790  				}
  5791  				afnrc.Etag = &etag
  5792  			}
  5793  		case "id":
  5794  			if v != nil {
  5795  				var ID string
  5796  				err = json.Unmarshal(*v, &ID)
  5797  				if err != nil {
  5798  					return err
  5799  				}
  5800  				afnrc.ID = &ID
  5801  			}
  5802  		}
  5803  	}
  5804  
  5805  	return nil
  5806  }
  5807  
  5808  // AzureFirewallNetworkRuleCollectionPropertiesFormat properties of the network rule collection.
  5809  type AzureFirewallNetworkRuleCollectionPropertiesFormat struct {
  5810  	// Priority - Priority of the network rule collection resource.
  5811  	Priority *int32 `json:"priority,omitempty"`
  5812  	// Action - The action type of a rule collection.
  5813  	Action *AzureFirewallRCAction `json:"action,omitempty"`
  5814  	// Rules - Collection of rules used by a network rule collection.
  5815  	Rules *[]AzureFirewallNetworkRule `json:"rules,omitempty"`
  5816  	// ProvisioningState - READ-ONLY; The provisioning state of the network rule collection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  5817  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  5818  }
  5819  
  5820  // MarshalJSON is the custom marshaler for AzureFirewallNetworkRuleCollectionPropertiesFormat.
  5821  func (afnrcpf AzureFirewallNetworkRuleCollectionPropertiesFormat) MarshalJSON() ([]byte, error) {
  5822  	objectMap := make(map[string]interface{})
  5823  	if afnrcpf.Priority != nil {
  5824  		objectMap["priority"] = afnrcpf.Priority
  5825  	}
  5826  	if afnrcpf.Action != nil {
  5827  		objectMap["action"] = afnrcpf.Action
  5828  	}
  5829  	if afnrcpf.Rules != nil {
  5830  		objectMap["rules"] = afnrcpf.Rules
  5831  	}
  5832  	return json.Marshal(objectMap)
  5833  }
  5834  
  5835  // AzureFirewallPropertiesFormat properties of the Azure Firewall.
  5836  type AzureFirewallPropertiesFormat struct {
  5837  	// ApplicationRuleCollections - Collection of application rule collections used by Azure Firewall.
  5838  	ApplicationRuleCollections *[]AzureFirewallApplicationRuleCollection `json:"applicationRuleCollections,omitempty"`
  5839  	// NatRuleCollections - Collection of NAT rule collections used by Azure Firewall.
  5840  	NatRuleCollections *[]AzureFirewallNatRuleCollection `json:"natRuleCollections,omitempty"`
  5841  	// NetworkRuleCollections - Collection of network rule collections used by Azure Firewall.
  5842  	NetworkRuleCollections *[]AzureFirewallNetworkRuleCollection `json:"networkRuleCollections,omitempty"`
  5843  	// IPConfigurations - IP configuration of the Azure Firewall resource.
  5844  	IPConfigurations *[]AzureFirewallIPConfiguration `json:"ipConfigurations,omitempty"`
  5845  	// ManagementIPConfiguration - IP configuration of the Azure Firewall used for management traffic.
  5846  	ManagementIPConfiguration *AzureFirewallIPConfiguration `json:"managementIpConfiguration,omitempty"`
  5847  	// ProvisioningState - READ-ONLY; The provisioning state of the Azure firewall resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  5848  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  5849  	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
  5850  	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
  5851  	// VirtualHub - The virtualHub to which the firewall belongs.
  5852  	VirtualHub *SubResource `json:"virtualHub,omitempty"`
  5853  	// FirewallPolicy - The firewallPolicy associated with this azure firewall.
  5854  	FirewallPolicy *SubResource `json:"firewallPolicy,omitempty"`
  5855  	// HubIPAddresses - READ-ONLY; IP addresses associated with AzureFirewall.
  5856  	HubIPAddresses *HubIPAddresses `json:"hubIpAddresses,omitempty"`
  5857  	// IPGroups - READ-ONLY; IpGroups associated with AzureFirewall.
  5858  	IPGroups *[]AzureFirewallIPGroups `json:"ipGroups,omitempty"`
  5859  	// Sku - The Azure Firewall Resource SKU.
  5860  	Sku *AzureFirewallSku `json:"sku,omitempty"`
  5861  	// AdditionalProperties - The additional properties used to further config this azure firewall.
  5862  	AdditionalProperties map[string]*string `json:"additionalProperties"`
  5863  }
  5864  
  5865  // MarshalJSON is the custom marshaler for AzureFirewallPropertiesFormat.
  5866  func (afpf AzureFirewallPropertiesFormat) MarshalJSON() ([]byte, error) {
  5867  	objectMap := make(map[string]interface{})
  5868  	if afpf.ApplicationRuleCollections != nil {
  5869  		objectMap["applicationRuleCollections"] = afpf.ApplicationRuleCollections
  5870  	}
  5871  	if afpf.NatRuleCollections != nil {
  5872  		objectMap["natRuleCollections"] = afpf.NatRuleCollections
  5873  	}
  5874  	if afpf.NetworkRuleCollections != nil {
  5875  		objectMap["networkRuleCollections"] = afpf.NetworkRuleCollections
  5876  	}
  5877  	if afpf.IPConfigurations != nil {
  5878  		objectMap["ipConfigurations"] = afpf.IPConfigurations
  5879  	}
  5880  	if afpf.ManagementIPConfiguration != nil {
  5881  		objectMap["managementIpConfiguration"] = afpf.ManagementIPConfiguration
  5882  	}
  5883  	if afpf.ThreatIntelMode != "" {
  5884  		objectMap["threatIntelMode"] = afpf.ThreatIntelMode
  5885  	}
  5886  	if afpf.VirtualHub != nil {
  5887  		objectMap["virtualHub"] = afpf.VirtualHub
  5888  	}
  5889  	if afpf.FirewallPolicy != nil {
  5890  		objectMap["firewallPolicy"] = afpf.FirewallPolicy
  5891  	}
  5892  	if afpf.Sku != nil {
  5893  		objectMap["sku"] = afpf.Sku
  5894  	}
  5895  	if afpf.AdditionalProperties != nil {
  5896  		objectMap["additionalProperties"] = afpf.AdditionalProperties
  5897  	}
  5898  	return json.Marshal(objectMap)
  5899  }
  5900  
  5901  // AzureFirewallPublicIPAddress public IP Address associated with azure firewall.
  5902  type AzureFirewallPublicIPAddress struct {
  5903  	// Address - Public IP Address value.
  5904  	Address *string `json:"address,omitempty"`
  5905  }
  5906  
  5907  // AzureFirewallRCAction properties of the AzureFirewallRCAction.
  5908  type AzureFirewallRCAction struct {
  5909  	// Type - The type of action. Possible values include: 'AzureFirewallRCActionTypeAllow', 'AzureFirewallRCActionTypeDeny'
  5910  	Type AzureFirewallRCActionType `json:"type,omitempty"`
  5911  }
  5912  
  5913  // AzureFirewallsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
  5914  // long-running operation.
  5915  type AzureFirewallsCreateOrUpdateFuture struct {
  5916  	azure.FutureAPI
  5917  	// Result returns the result of the asynchronous operation.
  5918  	// If the operation has not completed it will return an error.
  5919  	Result func(AzureFirewallsClient) (AzureFirewall, error)
  5920  }
  5921  
  5922  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  5923  func (future *AzureFirewallsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
  5924  	var azFuture azure.Future
  5925  	if err := json.Unmarshal(body, &azFuture); err != nil {
  5926  		return err
  5927  	}
  5928  	future.FutureAPI = &azFuture
  5929  	future.Result = future.result
  5930  	return nil
  5931  }
  5932  
  5933  // result is the default implementation for AzureFirewallsCreateOrUpdateFuture.Result.
  5934  func (future *AzureFirewallsCreateOrUpdateFuture) result(client AzureFirewallsClient) (af AzureFirewall, err error) {
  5935  	var done bool
  5936  	done, err = future.DoneWithContext(context.Background(), client)
  5937  	if err != nil {
  5938  		err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
  5939  		return
  5940  	}
  5941  	if !done {
  5942  		af.Response.Response = future.Response()
  5943  		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsCreateOrUpdateFuture")
  5944  		return
  5945  	}
  5946  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  5947  	if af.Response.Response, err = future.GetResult(sender); err == nil && af.Response.Response.StatusCode != http.StatusNoContent {
  5948  		af, err = client.CreateOrUpdateResponder(af.Response.Response)
  5949  		if err != nil {
  5950  			err = autorest.NewErrorWithError(err, "network.AzureFirewallsCreateOrUpdateFuture", "Result", af.Response.Response, "Failure responding to request")
  5951  		}
  5952  	}
  5953  	return
  5954  }
  5955  
  5956  // AzureFirewallsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
  5957  // operation.
  5958  type AzureFirewallsDeleteFuture struct {
  5959  	azure.FutureAPI
  5960  	// Result returns the result of the asynchronous operation.
  5961  	// If the operation has not completed it will return an error.
  5962  	Result func(AzureFirewallsClient) (autorest.Response, error)
  5963  }
  5964  
  5965  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  5966  func (future *AzureFirewallsDeleteFuture) UnmarshalJSON(body []byte) error {
  5967  	var azFuture azure.Future
  5968  	if err := json.Unmarshal(body, &azFuture); err != nil {
  5969  		return err
  5970  	}
  5971  	future.FutureAPI = &azFuture
  5972  	future.Result = future.result
  5973  	return nil
  5974  }
  5975  
  5976  // result is the default implementation for AzureFirewallsDeleteFuture.Result.
  5977  func (future *AzureFirewallsDeleteFuture) result(client AzureFirewallsClient) (ar autorest.Response, err error) {
  5978  	var done bool
  5979  	done, err = future.DoneWithContext(context.Background(), client)
  5980  	if err != nil {
  5981  		err = autorest.NewErrorWithError(err, "network.AzureFirewallsDeleteFuture", "Result", future.Response(), "Polling failure")
  5982  		return
  5983  	}
  5984  	if !done {
  5985  		ar.Response = future.Response()
  5986  		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsDeleteFuture")
  5987  		return
  5988  	}
  5989  	ar.Response = future.Response()
  5990  	return
  5991  }
  5992  
  5993  // AzureFirewallSku SKU of an Azure Firewall.
  5994  type AzureFirewallSku struct {
  5995  	// Name - Name of an Azure Firewall SKU. Possible values include: 'AZFWVNet', 'AZFWHub'
  5996  	Name AzureFirewallSkuName `json:"name,omitempty"`
  5997  	// Tier - Tier of an Azure Firewall. Possible values include: 'Standard', 'Premium'
  5998  	Tier AzureFirewallSkuTier `json:"tier,omitempty"`
  5999  }
  6000  
  6001  // AzureFirewallsUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
  6002  // long-running operation.
  6003  type AzureFirewallsUpdateTagsFuture struct {
  6004  	azure.FutureAPI
  6005  	// Result returns the result of the asynchronous operation.
  6006  	// If the operation has not completed it will return an error.
  6007  	Result func(AzureFirewallsClient) (AzureFirewall, error)
  6008  }
  6009  
  6010  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  6011  func (future *AzureFirewallsUpdateTagsFuture) UnmarshalJSON(body []byte) error {
  6012  	var azFuture azure.Future
  6013  	if err := json.Unmarshal(body, &azFuture); err != nil {
  6014  		return err
  6015  	}
  6016  	future.FutureAPI = &azFuture
  6017  	future.Result = future.result
  6018  	return nil
  6019  }
  6020  
  6021  // result is the default implementation for AzureFirewallsUpdateTagsFuture.Result.
  6022  func (future *AzureFirewallsUpdateTagsFuture) result(client AzureFirewallsClient) (af AzureFirewall, err error) {
  6023  	var done bool
  6024  	done, err = future.DoneWithContext(context.Background(), client)
  6025  	if err != nil {
  6026  		err = autorest.NewErrorWithError(err, "network.AzureFirewallsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
  6027  		return
  6028  	}
  6029  	if !done {
  6030  		af.Response.Response = future.Response()
  6031  		err = azure.NewAsyncOpIncompleteError("network.AzureFirewallsUpdateTagsFuture")
  6032  		return
  6033  	}
  6034  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  6035  	if af.Response.Response, err = future.GetResult(sender); err == nil && af.Response.Response.StatusCode != http.StatusNoContent {
  6036  		af, err = client.UpdateTagsResponder(af.Response.Response)
  6037  		if err != nil {
  6038  			err = autorest.NewErrorWithError(err, "network.AzureFirewallsUpdateTagsFuture", "Result", af.Response.Response, "Failure responding to request")
  6039  		}
  6040  	}
  6041  	return
  6042  }
  6043  
  6044  // AzureReachabilityReport azure reachability report details.
  6045  type AzureReachabilityReport struct {
  6046  	autorest.Response `json:"-"`
  6047  	// AggregationLevel - The aggregation level of Azure reachability report. Can be Country, State or City.
  6048  	AggregationLevel *string `json:"aggregationLevel,omitempty"`
  6049  	// ProviderLocation - Parameters that define a geographic location.
  6050  	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
  6051  	// ReachabilityReport - List of Azure reachability report items.
  6052  	ReachabilityReport *[]AzureReachabilityReportItem `json:"reachabilityReport,omitempty"`
  6053  }
  6054  
  6055  // AzureReachabilityReportItem azure reachability report details for a given provider location.
  6056  type AzureReachabilityReportItem struct {
  6057  	// Provider - The Internet service provider.
  6058  	Provider *string `json:"provider,omitempty"`
  6059  	// AzureLocation - The Azure region.
  6060  	AzureLocation *string `json:"azureLocation,omitempty"`
  6061  	// Latencies - List of latency details for each of the time series.
  6062  	Latencies *[]AzureReachabilityReportLatencyInfo `json:"latencies,omitempty"`
  6063  }
  6064  
  6065  // AzureReachabilityReportLatencyInfo details on latency for a time series.
  6066  type AzureReachabilityReportLatencyInfo struct {
  6067  	// TimeStamp - The time stamp.
  6068  	TimeStamp *date.Time `json:"timeStamp,omitempty"`
  6069  	// Score - The relative latency score between 1 and 100, higher values indicating a faster connection.
  6070  	Score *int32 `json:"score,omitempty"`
  6071  }
  6072  
  6073  // AzureReachabilityReportLocation parameters that define a geographic location.
  6074  type AzureReachabilityReportLocation struct {
  6075  	// Country - The name of the country.
  6076  	Country *string `json:"country,omitempty"`
  6077  	// State - The name of the state.
  6078  	State *string `json:"state,omitempty"`
  6079  	// City - The name of the city or town.
  6080  	City *string `json:"city,omitempty"`
  6081  }
  6082  
  6083  // AzureReachabilityReportParameters geographic and time constraints for Azure reachability report.
  6084  type AzureReachabilityReportParameters struct {
  6085  	// ProviderLocation - Parameters that define a geographic location.
  6086  	ProviderLocation *AzureReachabilityReportLocation `json:"providerLocation,omitempty"`
  6087  	// Providers - List of Internet service providers.
  6088  	Providers *[]string `json:"providers,omitempty"`
  6089  	// AzureLocations - Optional Azure regions to scope the query to.
  6090  	AzureLocations *[]string `json:"azureLocations,omitempty"`
  6091  	// StartTime - The start time for the Azure reachability report.
  6092  	StartTime *date.Time `json:"startTime,omitempty"`
  6093  	// EndTime - The end time for the Azure reachability report.
  6094  	EndTime *date.Time `json:"endTime,omitempty"`
  6095  }
  6096  
  6097  // BackendAddressPool pool of backend IP addresses.
  6098  type BackendAddressPool struct {
  6099  	autorest.Response `json:"-"`
  6100  	// BackendAddressPoolPropertiesFormat - Properties of load balancer backend address pool.
  6101  	*BackendAddressPoolPropertiesFormat `json:"properties,omitempty"`
  6102  	// Name - The name of the resource that is unique within the set of backend address pools used by the load balancer. This name can be used to access the resource.
  6103  	Name *string `json:"name,omitempty"`
  6104  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  6105  	Etag *string `json:"etag,omitempty"`
  6106  	// Type - READ-ONLY; Type of the resource.
  6107  	Type *string `json:"type,omitempty"`
  6108  	// ID - Resource ID.
  6109  	ID *string `json:"id,omitempty"`
  6110  }
  6111  
  6112  // MarshalJSON is the custom marshaler for BackendAddressPool.
  6113  func (bap BackendAddressPool) MarshalJSON() ([]byte, error) {
  6114  	objectMap := make(map[string]interface{})
  6115  	if bap.BackendAddressPoolPropertiesFormat != nil {
  6116  		objectMap["properties"] = bap.BackendAddressPoolPropertiesFormat
  6117  	}
  6118  	if bap.Name != nil {
  6119  		objectMap["name"] = bap.Name
  6120  	}
  6121  	if bap.ID != nil {
  6122  		objectMap["id"] = bap.ID
  6123  	}
  6124  	return json.Marshal(objectMap)
  6125  }
  6126  
  6127  // UnmarshalJSON is the custom unmarshaler for BackendAddressPool struct.
  6128  func (bap *BackendAddressPool) UnmarshalJSON(body []byte) error {
  6129  	var m map[string]*json.RawMessage
  6130  	err := json.Unmarshal(body, &m)
  6131  	if err != nil {
  6132  		return err
  6133  	}
  6134  	for k, v := range m {
  6135  		switch k {
  6136  		case "properties":
  6137  			if v != nil {
  6138  				var backendAddressPoolPropertiesFormat BackendAddressPoolPropertiesFormat
  6139  				err = json.Unmarshal(*v, &backendAddressPoolPropertiesFormat)
  6140  				if err != nil {
  6141  					return err
  6142  				}
  6143  				bap.BackendAddressPoolPropertiesFormat = &backendAddressPoolPropertiesFormat
  6144  			}
  6145  		case "name":
  6146  			if v != nil {
  6147  				var name string
  6148  				err = json.Unmarshal(*v, &name)
  6149  				if err != nil {
  6150  					return err
  6151  				}
  6152  				bap.Name = &name
  6153  			}
  6154  		case "etag":
  6155  			if v != nil {
  6156  				var etag string
  6157  				err = json.Unmarshal(*v, &etag)
  6158  				if err != nil {
  6159  					return err
  6160  				}
  6161  				bap.Etag = &etag
  6162  			}
  6163  		case "type":
  6164  			if v != nil {
  6165  				var typeVar string
  6166  				err = json.Unmarshal(*v, &typeVar)
  6167  				if err != nil {
  6168  					return err
  6169  				}
  6170  				bap.Type = &typeVar
  6171  			}
  6172  		case "id":
  6173  			if v != nil {
  6174  				var ID string
  6175  				err = json.Unmarshal(*v, &ID)
  6176  				if err != nil {
  6177  					return err
  6178  				}
  6179  				bap.ID = &ID
  6180  			}
  6181  		}
  6182  	}
  6183  
  6184  	return nil
  6185  }
  6186  
  6187  // BackendAddressPoolPropertiesFormat properties of the backend address pool.
  6188  type BackendAddressPoolPropertiesFormat struct {
  6189  	// LoadBalancerBackendAddresses - An array of backend addresses.
  6190  	LoadBalancerBackendAddresses *[]LoadBalancerBackendAddress `json:"loadBalancerBackendAddresses,omitempty"`
  6191  	// BackendIPConfigurations - READ-ONLY; An array of references to IP addresses defined in network interfaces.
  6192  	BackendIPConfigurations *[]InterfaceIPConfiguration `json:"backendIPConfigurations,omitempty"`
  6193  	// LoadBalancingRules - READ-ONLY; An array of references to load balancing rules that use this backend address pool.
  6194  	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
  6195  	// OutboundRule - READ-ONLY; A reference to an outbound rule that uses this backend address pool.
  6196  	OutboundRule *SubResource `json:"outboundRule,omitempty"`
  6197  	// OutboundRules - READ-ONLY; An array of references to outbound rules that use this backend address pool.
  6198  	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
  6199  	// ProvisioningState - READ-ONLY; The provisioning state of the backend address pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  6200  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  6201  }
  6202  
  6203  // MarshalJSON is the custom marshaler for BackendAddressPoolPropertiesFormat.
  6204  func (bappf BackendAddressPoolPropertiesFormat) MarshalJSON() ([]byte, error) {
  6205  	objectMap := make(map[string]interface{})
  6206  	if bappf.LoadBalancerBackendAddresses != nil {
  6207  		objectMap["loadBalancerBackendAddresses"] = bappf.LoadBalancerBackendAddresses
  6208  	}
  6209  	return json.Marshal(objectMap)
  6210  }
  6211  
  6212  // BastionActiveSession the session detail for a target.
  6213  type BastionActiveSession struct {
  6214  	// SessionID - READ-ONLY; A unique id for the session.
  6215  	SessionID *string `json:"sessionId,omitempty"`
  6216  	// StartTime - READ-ONLY; The time when the session started.
  6217  	StartTime interface{} `json:"startTime,omitempty"`
  6218  	// TargetSubscriptionID - READ-ONLY; The subscription id for the target virtual machine.
  6219  	TargetSubscriptionID *string `json:"targetSubscriptionId,omitempty"`
  6220  	// ResourceType - READ-ONLY; The type of the resource.
  6221  	ResourceType *string `json:"resourceType,omitempty"`
  6222  	// TargetHostName - READ-ONLY; The host name of the target.
  6223  	TargetHostName *string `json:"targetHostName,omitempty"`
  6224  	// TargetResourceGroup - READ-ONLY; The resource group of the target.
  6225  	TargetResourceGroup *string `json:"targetResourceGroup,omitempty"`
  6226  	// UserName - READ-ONLY; The user name who is active on this session.
  6227  	UserName *string `json:"userName,omitempty"`
  6228  	// TargetIPAddress - READ-ONLY; The IP Address of the target.
  6229  	TargetIPAddress *string `json:"targetIpAddress,omitempty"`
  6230  	// Protocol - READ-ONLY; The protocol used to connect to the target. Possible values include: 'SSH', 'RDP'
  6231  	Protocol BastionConnectProtocol `json:"protocol,omitempty"`
  6232  	// TargetResourceID - READ-ONLY; The resource id of the target.
  6233  	TargetResourceID *string `json:"targetResourceId,omitempty"`
  6234  	// SessionDurationInMins - READ-ONLY; Duration in mins the session has been active.
  6235  	SessionDurationInMins *float64 `json:"sessionDurationInMins,omitempty"`
  6236  }
  6237  
  6238  // MarshalJSON is the custom marshaler for BastionActiveSession.
  6239  func (bas BastionActiveSession) MarshalJSON() ([]byte, error) {
  6240  	objectMap := make(map[string]interface{})
  6241  	return json.Marshal(objectMap)
  6242  }
  6243  
  6244  // BastionActiveSessionListResult response for GetActiveSessions.
  6245  type BastionActiveSessionListResult struct {
  6246  	autorest.Response `json:"-"`
  6247  	// Value - List of active sessions on the bastion.
  6248  	Value *[]BastionActiveSession `json:"value,omitempty"`
  6249  	// NextLink - The URL to get the next set of results.
  6250  	NextLink *string `json:"nextLink,omitempty"`
  6251  }
  6252  
  6253  // BastionActiveSessionListResultIterator provides access to a complete listing of BastionActiveSession
  6254  // values.
  6255  type BastionActiveSessionListResultIterator struct {
  6256  	i    int
  6257  	page BastionActiveSessionListResultPage
  6258  }
  6259  
  6260  // NextWithContext advances to the next value.  If there was an error making
  6261  // the request the iterator does not advance and the error is returned.
  6262  func (iter *BastionActiveSessionListResultIterator) NextWithContext(ctx context.Context) (err error) {
  6263  	if tracing.IsEnabled() {
  6264  		ctx = tracing.StartSpan(ctx, fqdn+"/BastionActiveSessionListResultIterator.NextWithContext")
  6265  		defer func() {
  6266  			sc := -1
  6267  			if iter.Response().Response.Response != nil {
  6268  				sc = iter.Response().Response.Response.StatusCode
  6269  			}
  6270  			tracing.EndSpan(ctx, sc, err)
  6271  		}()
  6272  	}
  6273  	iter.i++
  6274  	if iter.i < len(iter.page.Values()) {
  6275  		return nil
  6276  	}
  6277  	err = iter.page.NextWithContext(ctx)
  6278  	if err != nil {
  6279  		iter.i--
  6280  		return err
  6281  	}
  6282  	iter.i = 0
  6283  	return nil
  6284  }
  6285  
  6286  // Next advances to the next value.  If there was an error making
  6287  // the request the iterator does not advance and the error is returned.
  6288  // Deprecated: Use NextWithContext() instead.
  6289  func (iter *BastionActiveSessionListResultIterator) Next() error {
  6290  	return iter.NextWithContext(context.Background())
  6291  }
  6292  
  6293  // NotDone returns true if the enumeration should be started or is not yet complete.
  6294  func (iter BastionActiveSessionListResultIterator) NotDone() bool {
  6295  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  6296  }
  6297  
  6298  // Response returns the raw server response from the last page request.
  6299  func (iter BastionActiveSessionListResultIterator) Response() BastionActiveSessionListResult {
  6300  	return iter.page.Response()
  6301  }
  6302  
  6303  // Value returns the current value or a zero-initialized value if the
  6304  // iterator has advanced beyond the end of the collection.
  6305  func (iter BastionActiveSessionListResultIterator) Value() BastionActiveSession {
  6306  	if !iter.page.NotDone() {
  6307  		return BastionActiveSession{}
  6308  	}
  6309  	return iter.page.Values()[iter.i]
  6310  }
  6311  
  6312  // Creates a new instance of the BastionActiveSessionListResultIterator type.
  6313  func NewBastionActiveSessionListResultIterator(page BastionActiveSessionListResultPage) BastionActiveSessionListResultIterator {
  6314  	return BastionActiveSessionListResultIterator{page: page}
  6315  }
  6316  
  6317  // IsEmpty returns true if the ListResult contains no values.
  6318  func (baslr BastionActiveSessionListResult) IsEmpty() bool {
  6319  	return baslr.Value == nil || len(*baslr.Value) == 0
  6320  }
  6321  
  6322  // hasNextLink returns true if the NextLink is not empty.
  6323  func (baslr BastionActiveSessionListResult) hasNextLink() bool {
  6324  	return baslr.NextLink != nil && len(*baslr.NextLink) != 0
  6325  }
  6326  
  6327  // bastionActiveSessionListResultPreparer prepares a request to retrieve the next set of results.
  6328  // It returns nil if no more results exist.
  6329  func (baslr BastionActiveSessionListResult) bastionActiveSessionListResultPreparer(ctx context.Context) (*http.Request, error) {
  6330  	if !baslr.hasNextLink() {
  6331  		return nil, nil
  6332  	}
  6333  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  6334  		autorest.AsJSON(),
  6335  		autorest.AsGet(),
  6336  		autorest.WithBaseURL(to.String(baslr.NextLink)))
  6337  }
  6338  
  6339  // BastionActiveSessionListResultPage contains a page of BastionActiveSession values.
  6340  type BastionActiveSessionListResultPage struct {
  6341  	fn    func(context.Context, BastionActiveSessionListResult) (BastionActiveSessionListResult, error)
  6342  	baslr BastionActiveSessionListResult
  6343  }
  6344  
  6345  // NextWithContext advances to the next page of values.  If there was an error making
  6346  // the request the page does not advance and the error is returned.
  6347  func (page *BastionActiveSessionListResultPage) NextWithContext(ctx context.Context) (err error) {
  6348  	if tracing.IsEnabled() {
  6349  		ctx = tracing.StartSpan(ctx, fqdn+"/BastionActiveSessionListResultPage.NextWithContext")
  6350  		defer func() {
  6351  			sc := -1
  6352  			if page.Response().Response.Response != nil {
  6353  				sc = page.Response().Response.Response.StatusCode
  6354  			}
  6355  			tracing.EndSpan(ctx, sc, err)
  6356  		}()
  6357  	}
  6358  	for {
  6359  		next, err := page.fn(ctx, page.baslr)
  6360  		if err != nil {
  6361  			return err
  6362  		}
  6363  		page.baslr = next
  6364  		if !next.hasNextLink() || !next.IsEmpty() {
  6365  			break
  6366  		}
  6367  	}
  6368  	return nil
  6369  }
  6370  
  6371  // Next advances to the next page of values.  If there was an error making
  6372  // the request the page does not advance and the error is returned.
  6373  // Deprecated: Use NextWithContext() instead.
  6374  func (page *BastionActiveSessionListResultPage) Next() error {
  6375  	return page.NextWithContext(context.Background())
  6376  }
  6377  
  6378  // NotDone returns true if the page enumeration should be started or is not yet complete.
  6379  func (page BastionActiveSessionListResultPage) NotDone() bool {
  6380  	return !page.baslr.IsEmpty()
  6381  }
  6382  
  6383  // Response returns the raw server response from the last page request.
  6384  func (page BastionActiveSessionListResultPage) Response() BastionActiveSessionListResult {
  6385  	return page.baslr
  6386  }
  6387  
  6388  // Values returns the slice of values for the current page or nil if there are no values.
  6389  func (page BastionActiveSessionListResultPage) Values() []BastionActiveSession {
  6390  	if page.baslr.IsEmpty() {
  6391  		return nil
  6392  	}
  6393  	return *page.baslr.Value
  6394  }
  6395  
  6396  // Creates a new instance of the BastionActiveSessionListResultPage type.
  6397  func NewBastionActiveSessionListResultPage(cur BastionActiveSessionListResult, getNextPage func(context.Context, BastionActiveSessionListResult) (BastionActiveSessionListResult, error)) BastionActiveSessionListResultPage {
  6398  	return BastionActiveSessionListResultPage{
  6399  		fn:    getNextPage,
  6400  		baslr: cur,
  6401  	}
  6402  }
  6403  
  6404  // BastionHost bastion Host resource.
  6405  type BastionHost struct {
  6406  	autorest.Response `json:"-"`
  6407  	// BastionHostPropertiesFormat - Represents the bastion host resource.
  6408  	*BastionHostPropertiesFormat `json:"properties,omitempty"`
  6409  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  6410  	Etag *string `json:"etag,omitempty"`
  6411  	// ID - Resource ID.
  6412  	ID *string `json:"id,omitempty"`
  6413  	// Name - READ-ONLY; Resource name.
  6414  	Name *string `json:"name,omitempty"`
  6415  	// Type - READ-ONLY; Resource type.
  6416  	Type *string `json:"type,omitempty"`
  6417  	// Location - Resource location.
  6418  	Location *string `json:"location,omitempty"`
  6419  	// Tags - Resource tags.
  6420  	Tags map[string]*string `json:"tags"`
  6421  }
  6422  
  6423  // MarshalJSON is the custom marshaler for BastionHost.
  6424  func (bh BastionHost) MarshalJSON() ([]byte, error) {
  6425  	objectMap := make(map[string]interface{})
  6426  	if bh.BastionHostPropertiesFormat != nil {
  6427  		objectMap["properties"] = bh.BastionHostPropertiesFormat
  6428  	}
  6429  	if bh.ID != nil {
  6430  		objectMap["id"] = bh.ID
  6431  	}
  6432  	if bh.Location != nil {
  6433  		objectMap["location"] = bh.Location
  6434  	}
  6435  	if bh.Tags != nil {
  6436  		objectMap["tags"] = bh.Tags
  6437  	}
  6438  	return json.Marshal(objectMap)
  6439  }
  6440  
  6441  // UnmarshalJSON is the custom unmarshaler for BastionHost struct.
  6442  func (bh *BastionHost) UnmarshalJSON(body []byte) error {
  6443  	var m map[string]*json.RawMessage
  6444  	err := json.Unmarshal(body, &m)
  6445  	if err != nil {
  6446  		return err
  6447  	}
  6448  	for k, v := range m {
  6449  		switch k {
  6450  		case "properties":
  6451  			if v != nil {
  6452  				var bastionHostPropertiesFormat BastionHostPropertiesFormat
  6453  				err = json.Unmarshal(*v, &bastionHostPropertiesFormat)
  6454  				if err != nil {
  6455  					return err
  6456  				}
  6457  				bh.BastionHostPropertiesFormat = &bastionHostPropertiesFormat
  6458  			}
  6459  		case "etag":
  6460  			if v != nil {
  6461  				var etag string
  6462  				err = json.Unmarshal(*v, &etag)
  6463  				if err != nil {
  6464  					return err
  6465  				}
  6466  				bh.Etag = &etag
  6467  			}
  6468  		case "id":
  6469  			if v != nil {
  6470  				var ID string
  6471  				err = json.Unmarshal(*v, &ID)
  6472  				if err != nil {
  6473  					return err
  6474  				}
  6475  				bh.ID = &ID
  6476  			}
  6477  		case "name":
  6478  			if v != nil {
  6479  				var name string
  6480  				err = json.Unmarshal(*v, &name)
  6481  				if err != nil {
  6482  					return err
  6483  				}
  6484  				bh.Name = &name
  6485  			}
  6486  		case "type":
  6487  			if v != nil {
  6488  				var typeVar string
  6489  				err = json.Unmarshal(*v, &typeVar)
  6490  				if err != nil {
  6491  					return err
  6492  				}
  6493  				bh.Type = &typeVar
  6494  			}
  6495  		case "location":
  6496  			if v != nil {
  6497  				var location string
  6498  				err = json.Unmarshal(*v, &location)
  6499  				if err != nil {
  6500  					return err
  6501  				}
  6502  				bh.Location = &location
  6503  			}
  6504  		case "tags":
  6505  			if v != nil {
  6506  				var tags map[string]*string
  6507  				err = json.Unmarshal(*v, &tags)
  6508  				if err != nil {
  6509  					return err
  6510  				}
  6511  				bh.Tags = tags
  6512  			}
  6513  		}
  6514  	}
  6515  
  6516  	return nil
  6517  }
  6518  
  6519  // BastionHostIPConfiguration IP configuration of an Bastion Host.
  6520  type BastionHostIPConfiguration struct {
  6521  	// BastionHostIPConfigurationPropertiesFormat - Represents the ip configuration associated with the resource.
  6522  	*BastionHostIPConfigurationPropertiesFormat `json:"properties,omitempty"`
  6523  	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
  6524  	Name *string `json:"name,omitempty"`
  6525  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  6526  	Etag *string `json:"etag,omitempty"`
  6527  	// Type - READ-ONLY; Ip configuration type.
  6528  	Type *string `json:"type,omitempty"`
  6529  	// ID - Resource ID.
  6530  	ID *string `json:"id,omitempty"`
  6531  }
  6532  
  6533  // MarshalJSON is the custom marshaler for BastionHostIPConfiguration.
  6534  func (bhic BastionHostIPConfiguration) MarshalJSON() ([]byte, error) {
  6535  	objectMap := make(map[string]interface{})
  6536  	if bhic.BastionHostIPConfigurationPropertiesFormat != nil {
  6537  		objectMap["properties"] = bhic.BastionHostIPConfigurationPropertiesFormat
  6538  	}
  6539  	if bhic.Name != nil {
  6540  		objectMap["name"] = bhic.Name
  6541  	}
  6542  	if bhic.ID != nil {
  6543  		objectMap["id"] = bhic.ID
  6544  	}
  6545  	return json.Marshal(objectMap)
  6546  }
  6547  
  6548  // UnmarshalJSON is the custom unmarshaler for BastionHostIPConfiguration struct.
  6549  func (bhic *BastionHostIPConfiguration) UnmarshalJSON(body []byte) error {
  6550  	var m map[string]*json.RawMessage
  6551  	err := json.Unmarshal(body, &m)
  6552  	if err != nil {
  6553  		return err
  6554  	}
  6555  	for k, v := range m {
  6556  		switch k {
  6557  		case "properties":
  6558  			if v != nil {
  6559  				var bastionHostIPConfigurationPropertiesFormat BastionHostIPConfigurationPropertiesFormat
  6560  				err = json.Unmarshal(*v, &bastionHostIPConfigurationPropertiesFormat)
  6561  				if err != nil {
  6562  					return err
  6563  				}
  6564  				bhic.BastionHostIPConfigurationPropertiesFormat = &bastionHostIPConfigurationPropertiesFormat
  6565  			}
  6566  		case "name":
  6567  			if v != nil {
  6568  				var name string
  6569  				err = json.Unmarshal(*v, &name)
  6570  				if err != nil {
  6571  					return err
  6572  				}
  6573  				bhic.Name = &name
  6574  			}
  6575  		case "etag":
  6576  			if v != nil {
  6577  				var etag string
  6578  				err = json.Unmarshal(*v, &etag)
  6579  				if err != nil {
  6580  					return err
  6581  				}
  6582  				bhic.Etag = &etag
  6583  			}
  6584  		case "type":
  6585  			if v != nil {
  6586  				var typeVar string
  6587  				err = json.Unmarshal(*v, &typeVar)
  6588  				if err != nil {
  6589  					return err
  6590  				}
  6591  				bhic.Type = &typeVar
  6592  			}
  6593  		case "id":
  6594  			if v != nil {
  6595  				var ID string
  6596  				err = json.Unmarshal(*v, &ID)
  6597  				if err != nil {
  6598  					return err
  6599  				}
  6600  				bhic.ID = &ID
  6601  			}
  6602  		}
  6603  	}
  6604  
  6605  	return nil
  6606  }
  6607  
  6608  // BastionHostIPConfigurationPropertiesFormat properties of IP configuration of an Bastion Host.
  6609  type BastionHostIPConfigurationPropertiesFormat struct {
  6610  	// Subnet - Reference of the subnet resource.
  6611  	Subnet *SubResource `json:"subnet,omitempty"`
  6612  	// PublicIPAddress - Reference of the PublicIP resource.
  6613  	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
  6614  	// ProvisioningState - READ-ONLY; The provisioning state of the bastion host IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  6615  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  6616  	// PrivateIPAllocationMethod - Private IP allocation method. Possible values include: 'Static', 'Dynamic'
  6617  	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
  6618  }
  6619  
  6620  // MarshalJSON is the custom marshaler for BastionHostIPConfigurationPropertiesFormat.
  6621  func (bhicpf BastionHostIPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
  6622  	objectMap := make(map[string]interface{})
  6623  	if bhicpf.Subnet != nil {
  6624  		objectMap["subnet"] = bhicpf.Subnet
  6625  	}
  6626  	if bhicpf.PublicIPAddress != nil {
  6627  		objectMap["publicIPAddress"] = bhicpf.PublicIPAddress
  6628  	}
  6629  	if bhicpf.PrivateIPAllocationMethod != "" {
  6630  		objectMap["privateIPAllocationMethod"] = bhicpf.PrivateIPAllocationMethod
  6631  	}
  6632  	return json.Marshal(objectMap)
  6633  }
  6634  
  6635  // BastionHostListResult response for ListBastionHosts API service call.
  6636  type BastionHostListResult struct {
  6637  	autorest.Response `json:"-"`
  6638  	// Value - List of Bastion Hosts in a resource group.
  6639  	Value *[]BastionHost `json:"value,omitempty"`
  6640  	// NextLink - URL to get the next set of results.
  6641  	NextLink *string `json:"nextLink,omitempty"`
  6642  }
  6643  
  6644  // BastionHostListResultIterator provides access to a complete listing of BastionHost values.
  6645  type BastionHostListResultIterator struct {
  6646  	i    int
  6647  	page BastionHostListResultPage
  6648  }
  6649  
  6650  // NextWithContext advances to the next value.  If there was an error making
  6651  // the request the iterator does not advance and the error is returned.
  6652  func (iter *BastionHostListResultIterator) NextWithContext(ctx context.Context) (err error) {
  6653  	if tracing.IsEnabled() {
  6654  		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultIterator.NextWithContext")
  6655  		defer func() {
  6656  			sc := -1
  6657  			if iter.Response().Response.Response != nil {
  6658  				sc = iter.Response().Response.Response.StatusCode
  6659  			}
  6660  			tracing.EndSpan(ctx, sc, err)
  6661  		}()
  6662  	}
  6663  	iter.i++
  6664  	if iter.i < len(iter.page.Values()) {
  6665  		return nil
  6666  	}
  6667  	err = iter.page.NextWithContext(ctx)
  6668  	if err != nil {
  6669  		iter.i--
  6670  		return err
  6671  	}
  6672  	iter.i = 0
  6673  	return nil
  6674  }
  6675  
  6676  // Next advances to the next value.  If there was an error making
  6677  // the request the iterator does not advance and the error is returned.
  6678  // Deprecated: Use NextWithContext() instead.
  6679  func (iter *BastionHostListResultIterator) Next() error {
  6680  	return iter.NextWithContext(context.Background())
  6681  }
  6682  
  6683  // NotDone returns true if the enumeration should be started or is not yet complete.
  6684  func (iter BastionHostListResultIterator) NotDone() bool {
  6685  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  6686  }
  6687  
  6688  // Response returns the raw server response from the last page request.
  6689  func (iter BastionHostListResultIterator) Response() BastionHostListResult {
  6690  	return iter.page.Response()
  6691  }
  6692  
  6693  // Value returns the current value or a zero-initialized value if the
  6694  // iterator has advanced beyond the end of the collection.
  6695  func (iter BastionHostListResultIterator) Value() BastionHost {
  6696  	if !iter.page.NotDone() {
  6697  		return BastionHost{}
  6698  	}
  6699  	return iter.page.Values()[iter.i]
  6700  }
  6701  
  6702  // Creates a new instance of the BastionHostListResultIterator type.
  6703  func NewBastionHostListResultIterator(page BastionHostListResultPage) BastionHostListResultIterator {
  6704  	return BastionHostListResultIterator{page: page}
  6705  }
  6706  
  6707  // IsEmpty returns true if the ListResult contains no values.
  6708  func (bhlr BastionHostListResult) IsEmpty() bool {
  6709  	return bhlr.Value == nil || len(*bhlr.Value) == 0
  6710  }
  6711  
  6712  // hasNextLink returns true if the NextLink is not empty.
  6713  func (bhlr BastionHostListResult) hasNextLink() bool {
  6714  	return bhlr.NextLink != nil && len(*bhlr.NextLink) != 0
  6715  }
  6716  
  6717  // bastionHostListResultPreparer prepares a request to retrieve the next set of results.
  6718  // It returns nil if no more results exist.
  6719  func (bhlr BastionHostListResult) bastionHostListResultPreparer(ctx context.Context) (*http.Request, error) {
  6720  	if !bhlr.hasNextLink() {
  6721  		return nil, nil
  6722  	}
  6723  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  6724  		autorest.AsJSON(),
  6725  		autorest.AsGet(),
  6726  		autorest.WithBaseURL(to.String(bhlr.NextLink)))
  6727  }
  6728  
  6729  // BastionHostListResultPage contains a page of BastionHost values.
  6730  type BastionHostListResultPage struct {
  6731  	fn   func(context.Context, BastionHostListResult) (BastionHostListResult, error)
  6732  	bhlr BastionHostListResult
  6733  }
  6734  
  6735  // NextWithContext advances to the next page of values.  If there was an error making
  6736  // the request the page does not advance and the error is returned.
  6737  func (page *BastionHostListResultPage) NextWithContext(ctx context.Context) (err error) {
  6738  	if tracing.IsEnabled() {
  6739  		ctx = tracing.StartSpan(ctx, fqdn+"/BastionHostListResultPage.NextWithContext")
  6740  		defer func() {
  6741  			sc := -1
  6742  			if page.Response().Response.Response != nil {
  6743  				sc = page.Response().Response.Response.StatusCode
  6744  			}
  6745  			tracing.EndSpan(ctx, sc, err)
  6746  		}()
  6747  	}
  6748  	for {
  6749  		next, err := page.fn(ctx, page.bhlr)
  6750  		if err != nil {
  6751  			return err
  6752  		}
  6753  		page.bhlr = next
  6754  		if !next.hasNextLink() || !next.IsEmpty() {
  6755  			break
  6756  		}
  6757  	}
  6758  	return nil
  6759  }
  6760  
  6761  // Next advances to the next page of values.  If there was an error making
  6762  // the request the page does not advance and the error is returned.
  6763  // Deprecated: Use NextWithContext() instead.
  6764  func (page *BastionHostListResultPage) Next() error {
  6765  	return page.NextWithContext(context.Background())
  6766  }
  6767  
  6768  // NotDone returns true if the page enumeration should be started or is not yet complete.
  6769  func (page BastionHostListResultPage) NotDone() bool {
  6770  	return !page.bhlr.IsEmpty()
  6771  }
  6772  
  6773  // Response returns the raw server response from the last page request.
  6774  func (page BastionHostListResultPage) Response() BastionHostListResult {
  6775  	return page.bhlr
  6776  }
  6777  
  6778  // Values returns the slice of values for the current page or nil if there are no values.
  6779  func (page BastionHostListResultPage) Values() []BastionHost {
  6780  	if page.bhlr.IsEmpty() {
  6781  		return nil
  6782  	}
  6783  	return *page.bhlr.Value
  6784  }
  6785  
  6786  // Creates a new instance of the BastionHostListResultPage type.
  6787  func NewBastionHostListResultPage(cur BastionHostListResult, getNextPage func(context.Context, BastionHostListResult) (BastionHostListResult, error)) BastionHostListResultPage {
  6788  	return BastionHostListResultPage{
  6789  		fn:   getNextPage,
  6790  		bhlr: cur,
  6791  	}
  6792  }
  6793  
  6794  // BastionHostPropertiesFormat properties of the Bastion Host.
  6795  type BastionHostPropertiesFormat struct {
  6796  	// IPConfigurations - IP configuration of the Bastion Host resource.
  6797  	IPConfigurations *[]BastionHostIPConfiguration `json:"ipConfigurations,omitempty"`
  6798  	// DNSName - FQDN for the endpoint on which bastion host is accessible.
  6799  	DNSName *string `json:"dnsName,omitempty"`
  6800  	// ProvisioningState - READ-ONLY; The provisioning state of the bastion host resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  6801  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  6802  }
  6803  
  6804  // MarshalJSON is the custom marshaler for BastionHostPropertiesFormat.
  6805  func (bhpf BastionHostPropertiesFormat) MarshalJSON() ([]byte, error) {
  6806  	objectMap := make(map[string]interface{})
  6807  	if bhpf.IPConfigurations != nil {
  6808  		objectMap["ipConfigurations"] = bhpf.IPConfigurations
  6809  	}
  6810  	if bhpf.DNSName != nil {
  6811  		objectMap["dnsName"] = bhpf.DNSName
  6812  	}
  6813  	return json.Marshal(objectMap)
  6814  }
  6815  
  6816  // BastionHostsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
  6817  // long-running operation.
  6818  type BastionHostsCreateOrUpdateFuture struct {
  6819  	azure.FutureAPI
  6820  	// Result returns the result of the asynchronous operation.
  6821  	// If the operation has not completed it will return an error.
  6822  	Result func(BastionHostsClient) (BastionHost, error)
  6823  }
  6824  
  6825  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  6826  func (future *BastionHostsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
  6827  	var azFuture azure.Future
  6828  	if err := json.Unmarshal(body, &azFuture); err != nil {
  6829  		return err
  6830  	}
  6831  	future.FutureAPI = &azFuture
  6832  	future.Result = future.result
  6833  	return nil
  6834  }
  6835  
  6836  // result is the default implementation for BastionHostsCreateOrUpdateFuture.Result.
  6837  func (future *BastionHostsCreateOrUpdateFuture) result(client BastionHostsClient) (bh BastionHost, err error) {
  6838  	var done bool
  6839  	done, err = future.DoneWithContext(context.Background(), client)
  6840  	if err != nil {
  6841  		err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
  6842  		return
  6843  	}
  6844  	if !done {
  6845  		bh.Response.Response = future.Response()
  6846  		err = azure.NewAsyncOpIncompleteError("network.BastionHostsCreateOrUpdateFuture")
  6847  		return
  6848  	}
  6849  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  6850  	if bh.Response.Response, err = future.GetResult(sender); err == nil && bh.Response.Response.StatusCode != http.StatusNoContent {
  6851  		bh, err = client.CreateOrUpdateResponder(bh.Response.Response)
  6852  		if err != nil {
  6853  			err = autorest.NewErrorWithError(err, "network.BastionHostsCreateOrUpdateFuture", "Result", bh.Response.Response, "Failure responding to request")
  6854  		}
  6855  	}
  6856  	return
  6857  }
  6858  
  6859  // BastionHostsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
  6860  // operation.
  6861  type BastionHostsDeleteFuture struct {
  6862  	azure.FutureAPI
  6863  	// Result returns the result of the asynchronous operation.
  6864  	// If the operation has not completed it will return an error.
  6865  	Result func(BastionHostsClient) (autorest.Response, error)
  6866  }
  6867  
  6868  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  6869  func (future *BastionHostsDeleteFuture) UnmarshalJSON(body []byte) error {
  6870  	var azFuture azure.Future
  6871  	if err := json.Unmarshal(body, &azFuture); err != nil {
  6872  		return err
  6873  	}
  6874  	future.FutureAPI = &azFuture
  6875  	future.Result = future.result
  6876  	return nil
  6877  }
  6878  
  6879  // result is the default implementation for BastionHostsDeleteFuture.Result.
  6880  func (future *BastionHostsDeleteFuture) result(client BastionHostsClient) (ar autorest.Response, err error) {
  6881  	var done bool
  6882  	done, err = future.DoneWithContext(context.Background(), client)
  6883  	if err != nil {
  6884  		err = autorest.NewErrorWithError(err, "network.BastionHostsDeleteFuture", "Result", future.Response(), "Polling failure")
  6885  		return
  6886  	}
  6887  	if !done {
  6888  		ar.Response = future.Response()
  6889  		err = azure.NewAsyncOpIncompleteError("network.BastionHostsDeleteFuture")
  6890  		return
  6891  	}
  6892  	ar.Response = future.Response()
  6893  	return
  6894  }
  6895  
  6896  // BastionSessionDeleteResult response for DisconnectActiveSessions.
  6897  type BastionSessionDeleteResult struct {
  6898  	autorest.Response `json:"-"`
  6899  	// Value - List of sessions with their corresponding state.
  6900  	Value *[]BastionSessionState `json:"value,omitempty"`
  6901  	// NextLink - The URL to get the next set of results.
  6902  	NextLink *string `json:"nextLink,omitempty"`
  6903  }
  6904  
  6905  // BastionSessionDeleteResultIterator provides access to a complete listing of BastionSessionState values.
  6906  type BastionSessionDeleteResultIterator struct {
  6907  	i    int
  6908  	page BastionSessionDeleteResultPage
  6909  }
  6910  
  6911  // NextWithContext advances to the next value.  If there was an error making
  6912  // the request the iterator does not advance and the error is returned.
  6913  func (iter *BastionSessionDeleteResultIterator) NextWithContext(ctx context.Context) (err error) {
  6914  	if tracing.IsEnabled() {
  6915  		ctx = tracing.StartSpan(ctx, fqdn+"/BastionSessionDeleteResultIterator.NextWithContext")
  6916  		defer func() {
  6917  			sc := -1
  6918  			if iter.Response().Response.Response != nil {
  6919  				sc = iter.Response().Response.Response.StatusCode
  6920  			}
  6921  			tracing.EndSpan(ctx, sc, err)
  6922  		}()
  6923  	}
  6924  	iter.i++
  6925  	if iter.i < len(iter.page.Values()) {
  6926  		return nil
  6927  	}
  6928  	err = iter.page.NextWithContext(ctx)
  6929  	if err != nil {
  6930  		iter.i--
  6931  		return err
  6932  	}
  6933  	iter.i = 0
  6934  	return nil
  6935  }
  6936  
  6937  // Next advances to the next value.  If there was an error making
  6938  // the request the iterator does not advance and the error is returned.
  6939  // Deprecated: Use NextWithContext() instead.
  6940  func (iter *BastionSessionDeleteResultIterator) Next() error {
  6941  	return iter.NextWithContext(context.Background())
  6942  }
  6943  
  6944  // NotDone returns true if the enumeration should be started or is not yet complete.
  6945  func (iter BastionSessionDeleteResultIterator) NotDone() bool {
  6946  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  6947  }
  6948  
  6949  // Response returns the raw server response from the last page request.
  6950  func (iter BastionSessionDeleteResultIterator) Response() BastionSessionDeleteResult {
  6951  	return iter.page.Response()
  6952  }
  6953  
  6954  // Value returns the current value or a zero-initialized value if the
  6955  // iterator has advanced beyond the end of the collection.
  6956  func (iter BastionSessionDeleteResultIterator) Value() BastionSessionState {
  6957  	if !iter.page.NotDone() {
  6958  		return BastionSessionState{}
  6959  	}
  6960  	return iter.page.Values()[iter.i]
  6961  }
  6962  
  6963  // Creates a new instance of the BastionSessionDeleteResultIterator type.
  6964  func NewBastionSessionDeleteResultIterator(page BastionSessionDeleteResultPage) BastionSessionDeleteResultIterator {
  6965  	return BastionSessionDeleteResultIterator{page: page}
  6966  }
  6967  
  6968  // IsEmpty returns true if the ListResult contains no values.
  6969  func (bsdr BastionSessionDeleteResult) IsEmpty() bool {
  6970  	return bsdr.Value == nil || len(*bsdr.Value) == 0
  6971  }
  6972  
  6973  // hasNextLink returns true if the NextLink is not empty.
  6974  func (bsdr BastionSessionDeleteResult) hasNextLink() bool {
  6975  	return bsdr.NextLink != nil && len(*bsdr.NextLink) != 0
  6976  }
  6977  
  6978  // bastionSessionDeleteResultPreparer prepares a request to retrieve the next set of results.
  6979  // It returns nil if no more results exist.
  6980  func (bsdr BastionSessionDeleteResult) bastionSessionDeleteResultPreparer(ctx context.Context) (*http.Request, error) {
  6981  	if !bsdr.hasNextLink() {
  6982  		return nil, nil
  6983  	}
  6984  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  6985  		autorest.AsJSON(),
  6986  		autorest.AsGet(),
  6987  		autorest.WithBaseURL(to.String(bsdr.NextLink)))
  6988  }
  6989  
  6990  // BastionSessionDeleteResultPage contains a page of BastionSessionState values.
  6991  type BastionSessionDeleteResultPage struct {
  6992  	fn   func(context.Context, BastionSessionDeleteResult) (BastionSessionDeleteResult, error)
  6993  	bsdr BastionSessionDeleteResult
  6994  }
  6995  
  6996  // NextWithContext advances to the next page of values.  If there was an error making
  6997  // the request the page does not advance and the error is returned.
  6998  func (page *BastionSessionDeleteResultPage) NextWithContext(ctx context.Context) (err error) {
  6999  	if tracing.IsEnabled() {
  7000  		ctx = tracing.StartSpan(ctx, fqdn+"/BastionSessionDeleteResultPage.NextWithContext")
  7001  		defer func() {
  7002  			sc := -1
  7003  			if page.Response().Response.Response != nil {
  7004  				sc = page.Response().Response.Response.StatusCode
  7005  			}
  7006  			tracing.EndSpan(ctx, sc, err)
  7007  		}()
  7008  	}
  7009  	for {
  7010  		next, err := page.fn(ctx, page.bsdr)
  7011  		if err != nil {
  7012  			return err
  7013  		}
  7014  		page.bsdr = next
  7015  		if !next.hasNextLink() || !next.IsEmpty() {
  7016  			break
  7017  		}
  7018  	}
  7019  	return nil
  7020  }
  7021  
  7022  // Next advances to the next page of values.  If there was an error making
  7023  // the request the page does not advance and the error is returned.
  7024  // Deprecated: Use NextWithContext() instead.
  7025  func (page *BastionSessionDeleteResultPage) Next() error {
  7026  	return page.NextWithContext(context.Background())
  7027  }
  7028  
  7029  // NotDone returns true if the page enumeration should be started or is not yet complete.
  7030  func (page BastionSessionDeleteResultPage) NotDone() bool {
  7031  	return !page.bsdr.IsEmpty()
  7032  }
  7033  
  7034  // Response returns the raw server response from the last page request.
  7035  func (page BastionSessionDeleteResultPage) Response() BastionSessionDeleteResult {
  7036  	return page.bsdr
  7037  }
  7038  
  7039  // Values returns the slice of values for the current page or nil if there are no values.
  7040  func (page BastionSessionDeleteResultPage) Values() []BastionSessionState {
  7041  	if page.bsdr.IsEmpty() {
  7042  		return nil
  7043  	}
  7044  	return *page.bsdr.Value
  7045  }
  7046  
  7047  // Creates a new instance of the BastionSessionDeleteResultPage type.
  7048  func NewBastionSessionDeleteResultPage(cur BastionSessionDeleteResult, getNextPage func(context.Context, BastionSessionDeleteResult) (BastionSessionDeleteResult, error)) BastionSessionDeleteResultPage {
  7049  	return BastionSessionDeleteResultPage{
  7050  		fn:   getNextPage,
  7051  		bsdr: cur,
  7052  	}
  7053  }
  7054  
  7055  // BastionSessionState the session state detail for a target.
  7056  type BastionSessionState struct {
  7057  	// SessionID - READ-ONLY; A unique id for the session.
  7058  	SessionID *string `json:"sessionId,omitempty"`
  7059  	// Message - READ-ONLY; Used for extra information.
  7060  	Message *string `json:"message,omitempty"`
  7061  	// State - READ-ONLY; The state of the session. Disconnected/Failed/NotFound.
  7062  	State *string `json:"state,omitempty"`
  7063  }
  7064  
  7065  // MarshalJSON is the custom marshaler for BastionSessionState.
  7066  func (bss BastionSessionState) MarshalJSON() ([]byte, error) {
  7067  	objectMap := make(map[string]interface{})
  7068  	return json.Marshal(objectMap)
  7069  }
  7070  
  7071  // BastionShareableLink bastion Shareable Link.
  7072  type BastionShareableLink struct {
  7073  	// VM - Reference of the virtual machine resource.
  7074  	VM *VM `json:"vm,omitempty"`
  7075  	// Bsl - READ-ONLY; The unique Bastion Shareable Link to the virtual machine.
  7076  	Bsl *string `json:"bsl,omitempty"`
  7077  	// CreatedAt - READ-ONLY; The time when the link was created.
  7078  	CreatedAt *string `json:"createdAt,omitempty"`
  7079  	// Message - READ-ONLY; Optional field indicating the warning or error message related to the vm in case of partial failure.
  7080  	Message *string `json:"message,omitempty"`
  7081  }
  7082  
  7083  // MarshalJSON is the custom marshaler for BastionShareableLink.
  7084  func (bsl BastionShareableLink) MarshalJSON() ([]byte, error) {
  7085  	objectMap := make(map[string]interface{})
  7086  	if bsl.VM != nil {
  7087  		objectMap["vm"] = bsl.VM
  7088  	}
  7089  	return json.Marshal(objectMap)
  7090  }
  7091  
  7092  // BastionShareableLinkListRequest post request for all the Bastion Shareable Link endpoints.
  7093  type BastionShareableLinkListRequest struct {
  7094  	// Vms - List of VM references.
  7095  	Vms *[]BastionShareableLink `json:"vms,omitempty"`
  7096  }
  7097  
  7098  // BastionShareableLinkListResult response for all the Bastion Shareable Link endpoints.
  7099  type BastionShareableLinkListResult struct {
  7100  	autorest.Response `json:"-"`
  7101  	// Value - List of Bastion Shareable Links for the request.
  7102  	Value *[]BastionShareableLink `json:"value,omitempty"`
  7103  	// NextLink - The URL to get the next set of results.
  7104  	NextLink *string `json:"nextLink,omitempty"`
  7105  }
  7106  
  7107  // BastionShareableLinkListResultIterator provides access to a complete listing of BastionShareableLink
  7108  // values.
  7109  type BastionShareableLinkListResultIterator struct {
  7110  	i    int
  7111  	page BastionShareableLinkListResultPage
  7112  }
  7113  
  7114  // NextWithContext advances to the next value.  If there was an error making
  7115  // the request the iterator does not advance and the error is returned.
  7116  func (iter *BastionShareableLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
  7117  	if tracing.IsEnabled() {
  7118  		ctx = tracing.StartSpan(ctx, fqdn+"/BastionShareableLinkListResultIterator.NextWithContext")
  7119  		defer func() {
  7120  			sc := -1
  7121  			if iter.Response().Response.Response != nil {
  7122  				sc = iter.Response().Response.Response.StatusCode
  7123  			}
  7124  			tracing.EndSpan(ctx, sc, err)
  7125  		}()
  7126  	}
  7127  	iter.i++
  7128  	if iter.i < len(iter.page.Values()) {
  7129  		return nil
  7130  	}
  7131  	err = iter.page.NextWithContext(ctx)
  7132  	if err != nil {
  7133  		iter.i--
  7134  		return err
  7135  	}
  7136  	iter.i = 0
  7137  	return nil
  7138  }
  7139  
  7140  // Next advances to the next value.  If there was an error making
  7141  // the request the iterator does not advance and the error is returned.
  7142  // Deprecated: Use NextWithContext() instead.
  7143  func (iter *BastionShareableLinkListResultIterator) Next() error {
  7144  	return iter.NextWithContext(context.Background())
  7145  }
  7146  
  7147  // NotDone returns true if the enumeration should be started or is not yet complete.
  7148  func (iter BastionShareableLinkListResultIterator) NotDone() bool {
  7149  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  7150  }
  7151  
  7152  // Response returns the raw server response from the last page request.
  7153  func (iter BastionShareableLinkListResultIterator) Response() BastionShareableLinkListResult {
  7154  	return iter.page.Response()
  7155  }
  7156  
  7157  // Value returns the current value or a zero-initialized value if the
  7158  // iterator has advanced beyond the end of the collection.
  7159  func (iter BastionShareableLinkListResultIterator) Value() BastionShareableLink {
  7160  	if !iter.page.NotDone() {
  7161  		return BastionShareableLink{}
  7162  	}
  7163  	return iter.page.Values()[iter.i]
  7164  }
  7165  
  7166  // Creates a new instance of the BastionShareableLinkListResultIterator type.
  7167  func NewBastionShareableLinkListResultIterator(page BastionShareableLinkListResultPage) BastionShareableLinkListResultIterator {
  7168  	return BastionShareableLinkListResultIterator{page: page}
  7169  }
  7170  
  7171  // IsEmpty returns true if the ListResult contains no values.
  7172  func (bsllr BastionShareableLinkListResult) IsEmpty() bool {
  7173  	return bsllr.Value == nil || len(*bsllr.Value) == 0
  7174  }
  7175  
  7176  // hasNextLink returns true if the NextLink is not empty.
  7177  func (bsllr BastionShareableLinkListResult) hasNextLink() bool {
  7178  	return bsllr.NextLink != nil && len(*bsllr.NextLink) != 0
  7179  }
  7180  
  7181  // bastionShareableLinkListResultPreparer prepares a request to retrieve the next set of results.
  7182  // It returns nil if no more results exist.
  7183  func (bsllr BastionShareableLinkListResult) bastionShareableLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
  7184  	if !bsllr.hasNextLink() {
  7185  		return nil, nil
  7186  	}
  7187  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  7188  		autorest.AsJSON(),
  7189  		autorest.AsGet(),
  7190  		autorest.WithBaseURL(to.String(bsllr.NextLink)))
  7191  }
  7192  
  7193  // BastionShareableLinkListResultPage contains a page of BastionShareableLink values.
  7194  type BastionShareableLinkListResultPage struct {
  7195  	fn    func(context.Context, BastionShareableLinkListResult) (BastionShareableLinkListResult, error)
  7196  	bsllr BastionShareableLinkListResult
  7197  }
  7198  
  7199  // NextWithContext advances to the next page of values.  If there was an error making
  7200  // the request the page does not advance and the error is returned.
  7201  func (page *BastionShareableLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
  7202  	if tracing.IsEnabled() {
  7203  		ctx = tracing.StartSpan(ctx, fqdn+"/BastionShareableLinkListResultPage.NextWithContext")
  7204  		defer func() {
  7205  			sc := -1
  7206  			if page.Response().Response.Response != nil {
  7207  				sc = page.Response().Response.Response.StatusCode
  7208  			}
  7209  			tracing.EndSpan(ctx, sc, err)
  7210  		}()
  7211  	}
  7212  	for {
  7213  		next, err := page.fn(ctx, page.bsllr)
  7214  		if err != nil {
  7215  			return err
  7216  		}
  7217  		page.bsllr = next
  7218  		if !next.hasNextLink() || !next.IsEmpty() {
  7219  			break
  7220  		}
  7221  	}
  7222  	return nil
  7223  }
  7224  
  7225  // Next advances to the next page of values.  If there was an error making
  7226  // the request the page does not advance and the error is returned.
  7227  // Deprecated: Use NextWithContext() instead.
  7228  func (page *BastionShareableLinkListResultPage) Next() error {
  7229  	return page.NextWithContext(context.Background())
  7230  }
  7231  
  7232  // NotDone returns true if the page enumeration should be started or is not yet complete.
  7233  func (page BastionShareableLinkListResultPage) NotDone() bool {
  7234  	return !page.bsllr.IsEmpty()
  7235  }
  7236  
  7237  // Response returns the raw server response from the last page request.
  7238  func (page BastionShareableLinkListResultPage) Response() BastionShareableLinkListResult {
  7239  	return page.bsllr
  7240  }
  7241  
  7242  // Values returns the slice of values for the current page or nil if there are no values.
  7243  func (page BastionShareableLinkListResultPage) Values() []BastionShareableLink {
  7244  	if page.bsllr.IsEmpty() {
  7245  		return nil
  7246  	}
  7247  	return *page.bsllr.Value
  7248  }
  7249  
  7250  // Creates a new instance of the BastionShareableLinkListResultPage type.
  7251  func NewBastionShareableLinkListResultPage(cur BastionShareableLinkListResult, getNextPage func(context.Context, BastionShareableLinkListResult) (BastionShareableLinkListResult, error)) BastionShareableLinkListResultPage {
  7252  	return BastionShareableLinkListResultPage{
  7253  		fn:    getNextPage,
  7254  		bsllr: cur,
  7255  	}
  7256  }
  7257  
  7258  // BGPCommunity contains bgp community information offered in Service Community resources.
  7259  type BGPCommunity struct {
  7260  	// ServiceSupportedRegion - The region which the service support. e.g. For O365, region is Global.
  7261  	ServiceSupportedRegion *string `json:"serviceSupportedRegion,omitempty"`
  7262  	// CommunityName - The name of the bgp community. e.g. Skype.
  7263  	CommunityName *string `json:"communityName,omitempty"`
  7264  	// CommunityValue - The value of the bgp community. For more information: https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing.
  7265  	CommunityValue *string `json:"communityValue,omitempty"`
  7266  	// CommunityPrefixes - The prefixes that the bgp community contains.
  7267  	CommunityPrefixes *[]string `json:"communityPrefixes,omitempty"`
  7268  	// IsAuthorizedToUse - Customer is authorized to use bgp community or not.
  7269  	IsAuthorizedToUse *bool `json:"isAuthorizedToUse,omitempty"`
  7270  	// ServiceGroup - The service group of the bgp community contains.
  7271  	ServiceGroup *string `json:"serviceGroup,omitempty"`
  7272  }
  7273  
  7274  // BgpPeerStatus BGP peer status details.
  7275  type BgpPeerStatus struct {
  7276  	// LocalAddress - READ-ONLY; The virtual network gateway's local address.
  7277  	LocalAddress *string `json:"localAddress,omitempty"`
  7278  	// Neighbor - READ-ONLY; The remote BGP peer.
  7279  	Neighbor *string `json:"neighbor,omitempty"`
  7280  	// Asn - READ-ONLY; The autonomous system number of the remote BGP peer.
  7281  	Asn *int64 `json:"asn,omitempty"`
  7282  	// State - READ-ONLY; The BGP peer state. Possible values include: 'BgpPeerStateUnknown', 'BgpPeerStateStopped', 'BgpPeerStateIdle', 'BgpPeerStateConnecting', 'BgpPeerStateConnected'
  7283  	State BgpPeerState `json:"state,omitempty"`
  7284  	// ConnectedDuration - READ-ONLY; For how long the peering has been up.
  7285  	ConnectedDuration *string `json:"connectedDuration,omitempty"`
  7286  	// RoutesReceived - READ-ONLY; The number of routes learned from this peer.
  7287  	RoutesReceived *int64 `json:"routesReceived,omitempty"`
  7288  	// MessagesSent - READ-ONLY; The number of BGP messages sent.
  7289  	MessagesSent *int64 `json:"messagesSent,omitempty"`
  7290  	// MessagesReceived - READ-ONLY; The number of BGP messages received.
  7291  	MessagesReceived *int64 `json:"messagesReceived,omitempty"`
  7292  }
  7293  
  7294  // MarshalJSON is the custom marshaler for BgpPeerStatus.
  7295  func (bps BgpPeerStatus) MarshalJSON() ([]byte, error) {
  7296  	objectMap := make(map[string]interface{})
  7297  	return json.Marshal(objectMap)
  7298  }
  7299  
  7300  // BgpPeerStatusListResult response for list BGP peer status API service call.
  7301  type BgpPeerStatusListResult struct {
  7302  	autorest.Response `json:"-"`
  7303  	// Value - List of BGP peers.
  7304  	Value *[]BgpPeerStatus `json:"value,omitempty"`
  7305  }
  7306  
  7307  // BgpServiceCommunity service Community Properties.
  7308  type BgpServiceCommunity struct {
  7309  	// BgpServiceCommunityPropertiesFormat - Properties of the BGP service community.
  7310  	*BgpServiceCommunityPropertiesFormat `json:"properties,omitempty"`
  7311  	// ID - Resource ID.
  7312  	ID *string `json:"id,omitempty"`
  7313  	// Name - READ-ONLY; Resource name.
  7314  	Name *string `json:"name,omitempty"`
  7315  	// Type - READ-ONLY; Resource type.
  7316  	Type *string `json:"type,omitempty"`
  7317  	// Location - Resource location.
  7318  	Location *string `json:"location,omitempty"`
  7319  	// Tags - Resource tags.
  7320  	Tags map[string]*string `json:"tags"`
  7321  }
  7322  
  7323  // MarshalJSON is the custom marshaler for BgpServiceCommunity.
  7324  func (bsc BgpServiceCommunity) MarshalJSON() ([]byte, error) {
  7325  	objectMap := make(map[string]interface{})
  7326  	if bsc.BgpServiceCommunityPropertiesFormat != nil {
  7327  		objectMap["properties"] = bsc.BgpServiceCommunityPropertiesFormat
  7328  	}
  7329  	if bsc.ID != nil {
  7330  		objectMap["id"] = bsc.ID
  7331  	}
  7332  	if bsc.Location != nil {
  7333  		objectMap["location"] = bsc.Location
  7334  	}
  7335  	if bsc.Tags != nil {
  7336  		objectMap["tags"] = bsc.Tags
  7337  	}
  7338  	return json.Marshal(objectMap)
  7339  }
  7340  
  7341  // UnmarshalJSON is the custom unmarshaler for BgpServiceCommunity struct.
  7342  func (bsc *BgpServiceCommunity) UnmarshalJSON(body []byte) error {
  7343  	var m map[string]*json.RawMessage
  7344  	err := json.Unmarshal(body, &m)
  7345  	if err != nil {
  7346  		return err
  7347  	}
  7348  	for k, v := range m {
  7349  		switch k {
  7350  		case "properties":
  7351  			if v != nil {
  7352  				var bgpServiceCommunityPropertiesFormat BgpServiceCommunityPropertiesFormat
  7353  				err = json.Unmarshal(*v, &bgpServiceCommunityPropertiesFormat)
  7354  				if err != nil {
  7355  					return err
  7356  				}
  7357  				bsc.BgpServiceCommunityPropertiesFormat = &bgpServiceCommunityPropertiesFormat
  7358  			}
  7359  		case "id":
  7360  			if v != nil {
  7361  				var ID string
  7362  				err = json.Unmarshal(*v, &ID)
  7363  				if err != nil {
  7364  					return err
  7365  				}
  7366  				bsc.ID = &ID
  7367  			}
  7368  		case "name":
  7369  			if v != nil {
  7370  				var name string
  7371  				err = json.Unmarshal(*v, &name)
  7372  				if err != nil {
  7373  					return err
  7374  				}
  7375  				bsc.Name = &name
  7376  			}
  7377  		case "type":
  7378  			if v != nil {
  7379  				var typeVar string
  7380  				err = json.Unmarshal(*v, &typeVar)
  7381  				if err != nil {
  7382  					return err
  7383  				}
  7384  				bsc.Type = &typeVar
  7385  			}
  7386  		case "location":
  7387  			if v != nil {
  7388  				var location string
  7389  				err = json.Unmarshal(*v, &location)
  7390  				if err != nil {
  7391  					return err
  7392  				}
  7393  				bsc.Location = &location
  7394  			}
  7395  		case "tags":
  7396  			if v != nil {
  7397  				var tags map[string]*string
  7398  				err = json.Unmarshal(*v, &tags)
  7399  				if err != nil {
  7400  					return err
  7401  				}
  7402  				bsc.Tags = tags
  7403  			}
  7404  		}
  7405  	}
  7406  
  7407  	return nil
  7408  }
  7409  
  7410  // BgpServiceCommunityListResult response for the ListServiceCommunity API service call.
  7411  type BgpServiceCommunityListResult struct {
  7412  	autorest.Response `json:"-"`
  7413  	// Value - A list of service community resources.
  7414  	Value *[]BgpServiceCommunity `json:"value,omitempty"`
  7415  	// NextLink - The URL to get the next set of results.
  7416  	NextLink *string `json:"nextLink,omitempty"`
  7417  }
  7418  
  7419  // BgpServiceCommunityListResultIterator provides access to a complete listing of BgpServiceCommunity
  7420  // values.
  7421  type BgpServiceCommunityListResultIterator struct {
  7422  	i    int
  7423  	page BgpServiceCommunityListResultPage
  7424  }
  7425  
  7426  // NextWithContext advances to the next value.  If there was an error making
  7427  // the request the iterator does not advance and the error is returned.
  7428  func (iter *BgpServiceCommunityListResultIterator) NextWithContext(ctx context.Context) (err error) {
  7429  	if tracing.IsEnabled() {
  7430  		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultIterator.NextWithContext")
  7431  		defer func() {
  7432  			sc := -1
  7433  			if iter.Response().Response.Response != nil {
  7434  				sc = iter.Response().Response.Response.StatusCode
  7435  			}
  7436  			tracing.EndSpan(ctx, sc, err)
  7437  		}()
  7438  	}
  7439  	iter.i++
  7440  	if iter.i < len(iter.page.Values()) {
  7441  		return nil
  7442  	}
  7443  	err = iter.page.NextWithContext(ctx)
  7444  	if err != nil {
  7445  		iter.i--
  7446  		return err
  7447  	}
  7448  	iter.i = 0
  7449  	return nil
  7450  }
  7451  
  7452  // Next advances to the next value.  If there was an error making
  7453  // the request the iterator does not advance and the error is returned.
  7454  // Deprecated: Use NextWithContext() instead.
  7455  func (iter *BgpServiceCommunityListResultIterator) Next() error {
  7456  	return iter.NextWithContext(context.Background())
  7457  }
  7458  
  7459  // NotDone returns true if the enumeration should be started or is not yet complete.
  7460  func (iter BgpServiceCommunityListResultIterator) NotDone() bool {
  7461  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  7462  }
  7463  
  7464  // Response returns the raw server response from the last page request.
  7465  func (iter BgpServiceCommunityListResultIterator) Response() BgpServiceCommunityListResult {
  7466  	return iter.page.Response()
  7467  }
  7468  
  7469  // Value returns the current value or a zero-initialized value if the
  7470  // iterator has advanced beyond the end of the collection.
  7471  func (iter BgpServiceCommunityListResultIterator) Value() BgpServiceCommunity {
  7472  	if !iter.page.NotDone() {
  7473  		return BgpServiceCommunity{}
  7474  	}
  7475  	return iter.page.Values()[iter.i]
  7476  }
  7477  
  7478  // Creates a new instance of the BgpServiceCommunityListResultIterator type.
  7479  func NewBgpServiceCommunityListResultIterator(page BgpServiceCommunityListResultPage) BgpServiceCommunityListResultIterator {
  7480  	return BgpServiceCommunityListResultIterator{page: page}
  7481  }
  7482  
  7483  // IsEmpty returns true if the ListResult contains no values.
  7484  func (bsclr BgpServiceCommunityListResult) IsEmpty() bool {
  7485  	return bsclr.Value == nil || len(*bsclr.Value) == 0
  7486  }
  7487  
  7488  // hasNextLink returns true if the NextLink is not empty.
  7489  func (bsclr BgpServiceCommunityListResult) hasNextLink() bool {
  7490  	return bsclr.NextLink != nil && len(*bsclr.NextLink) != 0
  7491  }
  7492  
  7493  // bgpServiceCommunityListResultPreparer prepares a request to retrieve the next set of results.
  7494  // It returns nil if no more results exist.
  7495  func (bsclr BgpServiceCommunityListResult) bgpServiceCommunityListResultPreparer(ctx context.Context) (*http.Request, error) {
  7496  	if !bsclr.hasNextLink() {
  7497  		return nil, nil
  7498  	}
  7499  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  7500  		autorest.AsJSON(),
  7501  		autorest.AsGet(),
  7502  		autorest.WithBaseURL(to.String(bsclr.NextLink)))
  7503  }
  7504  
  7505  // BgpServiceCommunityListResultPage contains a page of BgpServiceCommunity values.
  7506  type BgpServiceCommunityListResultPage struct {
  7507  	fn    func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)
  7508  	bsclr BgpServiceCommunityListResult
  7509  }
  7510  
  7511  // NextWithContext advances to the next page of values.  If there was an error making
  7512  // the request the page does not advance and the error is returned.
  7513  func (page *BgpServiceCommunityListResultPage) NextWithContext(ctx context.Context) (err error) {
  7514  	if tracing.IsEnabled() {
  7515  		ctx = tracing.StartSpan(ctx, fqdn+"/BgpServiceCommunityListResultPage.NextWithContext")
  7516  		defer func() {
  7517  			sc := -1
  7518  			if page.Response().Response.Response != nil {
  7519  				sc = page.Response().Response.Response.StatusCode
  7520  			}
  7521  			tracing.EndSpan(ctx, sc, err)
  7522  		}()
  7523  	}
  7524  	for {
  7525  		next, err := page.fn(ctx, page.bsclr)
  7526  		if err != nil {
  7527  			return err
  7528  		}
  7529  		page.bsclr = next
  7530  		if !next.hasNextLink() || !next.IsEmpty() {
  7531  			break
  7532  		}
  7533  	}
  7534  	return nil
  7535  }
  7536  
  7537  // Next advances to the next page of values.  If there was an error making
  7538  // the request the page does not advance and the error is returned.
  7539  // Deprecated: Use NextWithContext() instead.
  7540  func (page *BgpServiceCommunityListResultPage) Next() error {
  7541  	return page.NextWithContext(context.Background())
  7542  }
  7543  
  7544  // NotDone returns true if the page enumeration should be started or is not yet complete.
  7545  func (page BgpServiceCommunityListResultPage) NotDone() bool {
  7546  	return !page.bsclr.IsEmpty()
  7547  }
  7548  
  7549  // Response returns the raw server response from the last page request.
  7550  func (page BgpServiceCommunityListResultPage) Response() BgpServiceCommunityListResult {
  7551  	return page.bsclr
  7552  }
  7553  
  7554  // Values returns the slice of values for the current page or nil if there are no values.
  7555  func (page BgpServiceCommunityListResultPage) Values() []BgpServiceCommunity {
  7556  	if page.bsclr.IsEmpty() {
  7557  		return nil
  7558  	}
  7559  	return *page.bsclr.Value
  7560  }
  7561  
  7562  // Creates a new instance of the BgpServiceCommunityListResultPage type.
  7563  func NewBgpServiceCommunityListResultPage(cur BgpServiceCommunityListResult, getNextPage func(context.Context, BgpServiceCommunityListResult) (BgpServiceCommunityListResult, error)) BgpServiceCommunityListResultPage {
  7564  	return BgpServiceCommunityListResultPage{
  7565  		fn:    getNextPage,
  7566  		bsclr: cur,
  7567  	}
  7568  }
  7569  
  7570  // BgpServiceCommunityPropertiesFormat properties of Service Community.
  7571  type BgpServiceCommunityPropertiesFormat struct {
  7572  	// ServiceName - The name of the bgp community. e.g. Skype.
  7573  	ServiceName *string `json:"serviceName,omitempty"`
  7574  	// BgpCommunities - A list of bgp communities.
  7575  	BgpCommunities *[]BGPCommunity `json:"bgpCommunities,omitempty"`
  7576  }
  7577  
  7578  // BgpSettings BGP settings details.
  7579  type BgpSettings struct {
  7580  	// Asn - The BGP speaker's ASN.
  7581  	Asn *int64 `json:"asn,omitempty"`
  7582  	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
  7583  	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
  7584  	// PeerWeight - The weight added to routes learned from this BGP speaker.
  7585  	PeerWeight *int32 `json:"peerWeight,omitempty"`
  7586  	// BgpPeeringAddresses - BGP peering address with IP configuration ID for virtual network gateway.
  7587  	BgpPeeringAddresses *[]IPConfigurationBgpPeeringAddress `json:"bgpPeeringAddresses,omitempty"`
  7588  }
  7589  
  7590  // CheckPrivateLinkServiceVisibilityRequest request body of the CheckPrivateLinkServiceVisibility API
  7591  // service call.
  7592  type CheckPrivateLinkServiceVisibilityRequest struct {
  7593  	// PrivateLinkServiceAlias - The alias of the private link service.
  7594  	PrivateLinkServiceAlias *string `json:"privateLinkServiceAlias,omitempty"`
  7595  }
  7596  
  7597  // CloudError an error response from the service.
  7598  type CloudError struct {
  7599  	// Error - Cloud error body.
  7600  	Error *CloudErrorBody `json:"error,omitempty"`
  7601  }
  7602  
  7603  // CloudErrorBody an error response from the service.
  7604  type CloudErrorBody struct {
  7605  	// Code - An identifier for the error. Codes are invariant and are intended to be consumed programmatically.
  7606  	Code *string `json:"code,omitempty"`
  7607  	// Message - A message describing the error, intended to be suitable for display in a user interface.
  7608  	Message *string `json:"message,omitempty"`
  7609  	// Target - The target of the particular error. For example, the name of the property in error.
  7610  	Target *string `json:"target,omitempty"`
  7611  	// Details - A list of additional details about the error.
  7612  	Details *[]CloudErrorBody `json:"details,omitempty"`
  7613  }
  7614  
  7615  // ConfigurationDiagnosticParameters parameters to get network configuration diagnostic.
  7616  type ConfigurationDiagnosticParameters struct {
  7617  	// TargetResourceID - The ID of the target resource to perform network configuration diagnostic. Valid options are VM, NetworkInterface, VMSS/NetworkInterface and Application Gateway.
  7618  	TargetResourceID *string `json:"targetResourceId,omitempty"`
  7619  	// VerbosityLevel - Verbosity level. Possible values include: 'Normal', 'Minimum', 'Full'
  7620  	VerbosityLevel VerbosityLevel `json:"verbosityLevel,omitempty"`
  7621  	// Profiles - List of network configuration diagnostic profiles.
  7622  	Profiles *[]ConfigurationDiagnosticProfile `json:"profiles,omitempty"`
  7623  }
  7624  
  7625  // ConfigurationDiagnosticProfile parameters to compare with network configuration.
  7626  type ConfigurationDiagnosticProfile struct {
  7627  	// Direction - The direction of the traffic. Possible values include: 'Inbound', 'Outbound'
  7628  	Direction Direction `json:"direction,omitempty"`
  7629  	// Protocol - Protocol to be verified on. Accepted values are '*', TCP, UDP.
  7630  	Protocol *string `json:"protocol,omitempty"`
  7631  	// Source - Traffic source. Accepted values are '*', IP Address/CIDR, Service Tag.
  7632  	Source *string `json:"source,omitempty"`
  7633  	// Destination - Traffic destination. Accepted values are: '*', IP Address/CIDR, Service Tag.
  7634  	Destination *string `json:"destination,omitempty"`
  7635  	// DestinationPort - Traffic destination port. Accepted values are '*' and a single port in the range (0 - 65535).
  7636  	DestinationPort *string `json:"destinationPort,omitempty"`
  7637  }
  7638  
  7639  // ConfigurationDiagnosticResponse results of network configuration diagnostic on the target resource.
  7640  type ConfigurationDiagnosticResponse struct {
  7641  	autorest.Response `json:"-"`
  7642  	// Results - READ-ONLY; List of network configuration diagnostic results.
  7643  	Results *[]ConfigurationDiagnosticResult `json:"results,omitempty"`
  7644  }
  7645  
  7646  // MarshalJSON is the custom marshaler for ConfigurationDiagnosticResponse.
  7647  func (cdr ConfigurationDiagnosticResponse) MarshalJSON() ([]byte, error) {
  7648  	objectMap := make(map[string]interface{})
  7649  	return json.Marshal(objectMap)
  7650  }
  7651  
  7652  // ConfigurationDiagnosticResult network configuration diagnostic result corresponded to provided traffic
  7653  // query.
  7654  type ConfigurationDiagnosticResult struct {
  7655  	// Profile - Network configuration diagnostic profile.
  7656  	Profile *ConfigurationDiagnosticProfile `json:"profile,omitempty"`
  7657  	// NetworkSecurityGroupResult - Network security group result.
  7658  	NetworkSecurityGroupResult *SecurityGroupResult `json:"networkSecurityGroupResult,omitempty"`
  7659  }
  7660  
  7661  // ConnectionMonitor parameters that define the operation to create a connection monitor.
  7662  type ConnectionMonitor struct {
  7663  	// Location - Connection monitor location.
  7664  	Location *string `json:"location,omitempty"`
  7665  	// Tags - Connection monitor tags.
  7666  	Tags map[string]*string `json:"tags"`
  7667  	// ConnectionMonitorParameters - Properties of the connection monitor.
  7668  	*ConnectionMonitorParameters `json:"properties,omitempty"`
  7669  }
  7670  
  7671  // MarshalJSON is the custom marshaler for ConnectionMonitor.
  7672  func (cm ConnectionMonitor) MarshalJSON() ([]byte, error) {
  7673  	objectMap := make(map[string]interface{})
  7674  	if cm.Location != nil {
  7675  		objectMap["location"] = cm.Location
  7676  	}
  7677  	if cm.Tags != nil {
  7678  		objectMap["tags"] = cm.Tags
  7679  	}
  7680  	if cm.ConnectionMonitorParameters != nil {
  7681  		objectMap["properties"] = cm.ConnectionMonitorParameters
  7682  	}
  7683  	return json.Marshal(objectMap)
  7684  }
  7685  
  7686  // UnmarshalJSON is the custom unmarshaler for ConnectionMonitor struct.
  7687  func (cm *ConnectionMonitor) UnmarshalJSON(body []byte) error {
  7688  	var m map[string]*json.RawMessage
  7689  	err := json.Unmarshal(body, &m)
  7690  	if err != nil {
  7691  		return err
  7692  	}
  7693  	for k, v := range m {
  7694  		switch k {
  7695  		case "location":
  7696  			if v != nil {
  7697  				var location string
  7698  				err = json.Unmarshal(*v, &location)
  7699  				if err != nil {
  7700  					return err
  7701  				}
  7702  				cm.Location = &location
  7703  			}
  7704  		case "tags":
  7705  			if v != nil {
  7706  				var tags map[string]*string
  7707  				err = json.Unmarshal(*v, &tags)
  7708  				if err != nil {
  7709  					return err
  7710  				}
  7711  				cm.Tags = tags
  7712  			}
  7713  		case "properties":
  7714  			if v != nil {
  7715  				var connectionMonitorParameters ConnectionMonitorParameters
  7716  				err = json.Unmarshal(*v, &connectionMonitorParameters)
  7717  				if err != nil {
  7718  					return err
  7719  				}
  7720  				cm.ConnectionMonitorParameters = &connectionMonitorParameters
  7721  			}
  7722  		}
  7723  	}
  7724  
  7725  	return nil
  7726  }
  7727  
  7728  // ConnectionMonitorDestination describes the destination of connection monitor.
  7729  type ConnectionMonitorDestination struct {
  7730  	// ResourceID - The ID of the resource used as the destination by connection monitor.
  7731  	ResourceID *string `json:"resourceId,omitempty"`
  7732  	// Address - Address of the connection monitor destination (IP or domain name).
  7733  	Address *string `json:"address,omitempty"`
  7734  	// Port - The destination port used by connection monitor.
  7735  	Port *int32 `json:"port,omitempty"`
  7736  }
  7737  
  7738  // ConnectionMonitorEndpoint describes the connection monitor endpoint.
  7739  type ConnectionMonitorEndpoint struct {
  7740  	// Name - The name of the connection monitor endpoint.
  7741  	Name *string `json:"name,omitempty"`
  7742  	// ResourceID - Resource ID of the connection monitor endpoint.
  7743  	ResourceID *string `json:"resourceId,omitempty"`
  7744  	// Address - Address of the connection monitor endpoint (IP or domain name).
  7745  	Address *string `json:"address,omitempty"`
  7746  	// Filter - Filter for sub-items within the endpoint.
  7747  	Filter *ConnectionMonitorEndpointFilter `json:"filter,omitempty"`
  7748  }
  7749  
  7750  // ConnectionMonitorEndpointFilter describes the connection monitor endpoint filter.
  7751  type ConnectionMonitorEndpointFilter struct {
  7752  	// Type - The behavior of the endpoint filter. Currently only 'Include' is supported. Possible values include: 'Include'
  7753  	Type ConnectionMonitorEndpointFilterType `json:"type,omitempty"`
  7754  	// Items - List of items in the filter.
  7755  	Items *[]ConnectionMonitorEndpointFilterItem `json:"items,omitempty"`
  7756  }
  7757  
  7758  // ConnectionMonitorEndpointFilterItem describes the connection monitor endpoint filter item.
  7759  type ConnectionMonitorEndpointFilterItem struct {
  7760  	// Type - The type of item included in the filter. Currently only 'AgentAddress' is supported. Possible values include: 'AgentAddress'
  7761  	Type ConnectionMonitorEndpointFilterItemType `json:"type,omitempty"`
  7762  	// Address - The address of the filter item.
  7763  	Address *string `json:"address,omitempty"`
  7764  }
  7765  
  7766  // ConnectionMonitorHTTPConfiguration describes the HTTP configuration.
  7767  type ConnectionMonitorHTTPConfiguration struct {
  7768  	// Port - The port to connect to.
  7769  	Port *int32 `json:"port,omitempty"`
  7770  	// Method - The HTTP method to use. Possible values include: 'Get', 'Post'
  7771  	Method HTTPConfigurationMethod `json:"method,omitempty"`
  7772  	// Path - The path component of the URI. For instance, "/dir1/dir2".
  7773  	Path *string `json:"path,omitempty"`
  7774  	// RequestHeaders - The HTTP headers to transmit with the request.
  7775  	RequestHeaders *[]HTTPHeader `json:"requestHeaders,omitempty"`
  7776  	// ValidStatusCodeRanges - HTTP status codes to consider successful. For instance, "2xx,301-304,418".
  7777  	ValidStatusCodeRanges *[]string `json:"validStatusCodeRanges,omitempty"`
  7778  	// PreferHTTPS - Value indicating whether HTTPS is preferred over HTTP in cases where the choice is not explicit.
  7779  	PreferHTTPS *bool `json:"preferHTTPS,omitempty"`
  7780  }
  7781  
  7782  // ConnectionMonitorIcmpConfiguration describes the ICMP configuration.
  7783  type ConnectionMonitorIcmpConfiguration struct {
  7784  	// DisableTraceRoute - Value indicating whether path evaluation with trace route should be disabled.
  7785  	DisableTraceRoute *bool `json:"disableTraceRoute,omitempty"`
  7786  }
  7787  
  7788  // ConnectionMonitorListResult list of connection monitors.
  7789  type ConnectionMonitorListResult struct {
  7790  	autorest.Response `json:"-"`
  7791  	// Value - Information about connection monitors.
  7792  	Value *[]ConnectionMonitorResult `json:"value,omitempty"`
  7793  }
  7794  
  7795  // ConnectionMonitorOutput describes a connection monitor output destination.
  7796  type ConnectionMonitorOutput struct {
  7797  	// Type - Connection monitor output destination type. Currently, only "Workspace" is supported. Possible values include: 'Workspace'
  7798  	Type OutputType `json:"type,omitempty"`
  7799  	// WorkspaceSettings - Describes the settings for producing output into a log analytics workspace.
  7800  	WorkspaceSettings *ConnectionMonitorWorkspaceSettings `json:"workspaceSettings,omitempty"`
  7801  }
  7802  
  7803  // ConnectionMonitorParameters parameters that define the operation to create a connection monitor.
  7804  type ConnectionMonitorParameters struct {
  7805  	// Source - Describes the source of connection monitor.
  7806  	Source *ConnectionMonitorSource `json:"source,omitempty"`
  7807  	// Destination - Describes the destination of connection monitor.
  7808  	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
  7809  	// AutoStart - Determines if the connection monitor will start automatically once created.
  7810  	AutoStart *bool `json:"autoStart,omitempty"`
  7811  	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
  7812  	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
  7813  	// Endpoints - List of connection monitor endpoints.
  7814  	Endpoints *[]ConnectionMonitorEndpoint `json:"endpoints,omitempty"`
  7815  	// TestConfigurations - List of connection monitor test configurations.
  7816  	TestConfigurations *[]ConnectionMonitorTestConfiguration `json:"testConfigurations,omitempty"`
  7817  	// TestGroups - List of connection monitor test groups.
  7818  	TestGroups *[]ConnectionMonitorTestGroup `json:"testGroups,omitempty"`
  7819  	// Outputs - List of connection monitor outputs.
  7820  	Outputs *[]ConnectionMonitorOutput `json:"outputs,omitempty"`
  7821  	// Notes - Optional notes to be associated with the connection monitor.
  7822  	Notes *string `json:"notes,omitempty"`
  7823  }
  7824  
  7825  // ConnectionMonitorQueryResult list of connection states snapshots.
  7826  type ConnectionMonitorQueryResult struct {
  7827  	autorest.Response `json:"-"`
  7828  	// SourceStatus - Status of connection monitor source. Possible values include: 'ConnectionMonitorSourceStatusUnknown', 'ConnectionMonitorSourceStatusActive', 'ConnectionMonitorSourceStatusInactive'
  7829  	SourceStatus ConnectionMonitorSourceStatus `json:"sourceStatus,omitempty"`
  7830  	// States - Information about connection states.
  7831  	States *[]ConnectionStateSnapshot `json:"states,omitempty"`
  7832  }
  7833  
  7834  // ConnectionMonitorResult information about the connection monitor.
  7835  type ConnectionMonitorResult struct {
  7836  	autorest.Response `json:"-"`
  7837  	// Name - READ-ONLY; Name of the connection monitor.
  7838  	Name *string `json:"name,omitempty"`
  7839  	// ID - READ-ONLY; ID of the connection monitor.
  7840  	ID *string `json:"id,omitempty"`
  7841  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  7842  	Etag *string `json:"etag,omitempty"`
  7843  	// Type - READ-ONLY; Connection monitor type.
  7844  	Type *string `json:"type,omitempty"`
  7845  	// Location - Connection monitor location.
  7846  	Location *string `json:"location,omitempty"`
  7847  	// Tags - Connection monitor tags.
  7848  	Tags map[string]*string `json:"tags"`
  7849  	// ConnectionMonitorResultProperties - Properties of the connection monitor result.
  7850  	*ConnectionMonitorResultProperties `json:"properties,omitempty"`
  7851  }
  7852  
  7853  // MarshalJSON is the custom marshaler for ConnectionMonitorResult.
  7854  func (cmr ConnectionMonitorResult) MarshalJSON() ([]byte, error) {
  7855  	objectMap := make(map[string]interface{})
  7856  	if cmr.Location != nil {
  7857  		objectMap["location"] = cmr.Location
  7858  	}
  7859  	if cmr.Tags != nil {
  7860  		objectMap["tags"] = cmr.Tags
  7861  	}
  7862  	if cmr.ConnectionMonitorResultProperties != nil {
  7863  		objectMap["properties"] = cmr.ConnectionMonitorResultProperties
  7864  	}
  7865  	return json.Marshal(objectMap)
  7866  }
  7867  
  7868  // UnmarshalJSON is the custom unmarshaler for ConnectionMonitorResult struct.
  7869  func (cmr *ConnectionMonitorResult) UnmarshalJSON(body []byte) error {
  7870  	var m map[string]*json.RawMessage
  7871  	err := json.Unmarshal(body, &m)
  7872  	if err != nil {
  7873  		return err
  7874  	}
  7875  	for k, v := range m {
  7876  		switch k {
  7877  		case "name":
  7878  			if v != nil {
  7879  				var name string
  7880  				err = json.Unmarshal(*v, &name)
  7881  				if err != nil {
  7882  					return err
  7883  				}
  7884  				cmr.Name = &name
  7885  			}
  7886  		case "id":
  7887  			if v != nil {
  7888  				var ID string
  7889  				err = json.Unmarshal(*v, &ID)
  7890  				if err != nil {
  7891  					return err
  7892  				}
  7893  				cmr.ID = &ID
  7894  			}
  7895  		case "etag":
  7896  			if v != nil {
  7897  				var etag string
  7898  				err = json.Unmarshal(*v, &etag)
  7899  				if err != nil {
  7900  					return err
  7901  				}
  7902  				cmr.Etag = &etag
  7903  			}
  7904  		case "type":
  7905  			if v != nil {
  7906  				var typeVar string
  7907  				err = json.Unmarshal(*v, &typeVar)
  7908  				if err != nil {
  7909  					return err
  7910  				}
  7911  				cmr.Type = &typeVar
  7912  			}
  7913  		case "location":
  7914  			if v != nil {
  7915  				var location string
  7916  				err = json.Unmarshal(*v, &location)
  7917  				if err != nil {
  7918  					return err
  7919  				}
  7920  				cmr.Location = &location
  7921  			}
  7922  		case "tags":
  7923  			if v != nil {
  7924  				var tags map[string]*string
  7925  				err = json.Unmarshal(*v, &tags)
  7926  				if err != nil {
  7927  					return err
  7928  				}
  7929  				cmr.Tags = tags
  7930  			}
  7931  		case "properties":
  7932  			if v != nil {
  7933  				var connectionMonitorResultProperties ConnectionMonitorResultProperties
  7934  				err = json.Unmarshal(*v, &connectionMonitorResultProperties)
  7935  				if err != nil {
  7936  					return err
  7937  				}
  7938  				cmr.ConnectionMonitorResultProperties = &connectionMonitorResultProperties
  7939  			}
  7940  		}
  7941  	}
  7942  
  7943  	return nil
  7944  }
  7945  
  7946  // ConnectionMonitorResultProperties describes the properties of a connection monitor.
  7947  type ConnectionMonitorResultProperties struct {
  7948  	// ProvisioningState - READ-ONLY; The provisioning state of the connection monitor. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  7949  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  7950  	// StartTime - READ-ONLY; The date and time when the connection monitor was started.
  7951  	StartTime *date.Time `json:"startTime,omitempty"`
  7952  	// MonitoringStatus - READ-ONLY; The monitoring status of the connection monitor.
  7953  	MonitoringStatus *string `json:"monitoringStatus,omitempty"`
  7954  	// ConnectionMonitorType - READ-ONLY; Type of connection monitor. Possible values include: 'MultiEndpoint', 'SingleSourceDestination'
  7955  	ConnectionMonitorType ConnectionMonitorType `json:"connectionMonitorType,omitempty"`
  7956  	// Source - Describes the source of connection monitor.
  7957  	Source *ConnectionMonitorSource `json:"source,omitempty"`
  7958  	// Destination - Describes the destination of connection monitor.
  7959  	Destination *ConnectionMonitorDestination `json:"destination,omitempty"`
  7960  	// AutoStart - Determines if the connection monitor will start automatically once created.
  7961  	AutoStart *bool `json:"autoStart,omitempty"`
  7962  	// MonitoringIntervalInSeconds - Monitoring interval in seconds.
  7963  	MonitoringIntervalInSeconds *int32 `json:"monitoringIntervalInSeconds,omitempty"`
  7964  	// Endpoints - List of connection monitor endpoints.
  7965  	Endpoints *[]ConnectionMonitorEndpoint `json:"endpoints,omitempty"`
  7966  	// TestConfigurations - List of connection monitor test configurations.
  7967  	TestConfigurations *[]ConnectionMonitorTestConfiguration `json:"testConfigurations,omitempty"`
  7968  	// TestGroups - List of connection monitor test groups.
  7969  	TestGroups *[]ConnectionMonitorTestGroup `json:"testGroups,omitempty"`
  7970  	// Outputs - List of connection monitor outputs.
  7971  	Outputs *[]ConnectionMonitorOutput `json:"outputs,omitempty"`
  7972  	// Notes - Optional notes to be associated with the connection monitor.
  7973  	Notes *string `json:"notes,omitempty"`
  7974  }
  7975  
  7976  // MarshalJSON is the custom marshaler for ConnectionMonitorResultProperties.
  7977  func (cmrp ConnectionMonitorResultProperties) MarshalJSON() ([]byte, error) {
  7978  	objectMap := make(map[string]interface{})
  7979  	if cmrp.Source != nil {
  7980  		objectMap["source"] = cmrp.Source
  7981  	}
  7982  	if cmrp.Destination != nil {
  7983  		objectMap["destination"] = cmrp.Destination
  7984  	}
  7985  	if cmrp.AutoStart != nil {
  7986  		objectMap["autoStart"] = cmrp.AutoStart
  7987  	}
  7988  	if cmrp.MonitoringIntervalInSeconds != nil {
  7989  		objectMap["monitoringIntervalInSeconds"] = cmrp.MonitoringIntervalInSeconds
  7990  	}
  7991  	if cmrp.Endpoints != nil {
  7992  		objectMap["endpoints"] = cmrp.Endpoints
  7993  	}
  7994  	if cmrp.TestConfigurations != nil {
  7995  		objectMap["testConfigurations"] = cmrp.TestConfigurations
  7996  	}
  7997  	if cmrp.TestGroups != nil {
  7998  		objectMap["testGroups"] = cmrp.TestGroups
  7999  	}
  8000  	if cmrp.Outputs != nil {
  8001  		objectMap["outputs"] = cmrp.Outputs
  8002  	}
  8003  	if cmrp.Notes != nil {
  8004  		objectMap["notes"] = cmrp.Notes
  8005  	}
  8006  	return json.Marshal(objectMap)
  8007  }
  8008  
  8009  // ConnectionMonitorsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
  8010  // long-running operation.
  8011  type ConnectionMonitorsCreateOrUpdateFuture struct {
  8012  	azure.FutureAPI
  8013  	// Result returns the result of the asynchronous operation.
  8014  	// If the operation has not completed it will return an error.
  8015  	Result func(ConnectionMonitorsClient) (ConnectionMonitorResult, error)
  8016  }
  8017  
  8018  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  8019  func (future *ConnectionMonitorsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
  8020  	var azFuture azure.Future
  8021  	if err := json.Unmarshal(body, &azFuture); err != nil {
  8022  		return err
  8023  	}
  8024  	future.FutureAPI = &azFuture
  8025  	future.Result = future.result
  8026  	return nil
  8027  }
  8028  
  8029  // result is the default implementation for ConnectionMonitorsCreateOrUpdateFuture.Result.
  8030  func (future *ConnectionMonitorsCreateOrUpdateFuture) result(client ConnectionMonitorsClient) (cmr ConnectionMonitorResult, err error) {
  8031  	var done bool
  8032  	done, err = future.DoneWithContext(context.Background(), client)
  8033  	if err != nil {
  8034  		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
  8035  		return
  8036  	}
  8037  	if !done {
  8038  		cmr.Response.Response = future.Response()
  8039  		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsCreateOrUpdateFuture")
  8040  		return
  8041  	}
  8042  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  8043  	if cmr.Response.Response, err = future.GetResult(sender); err == nil && cmr.Response.Response.StatusCode != http.StatusNoContent {
  8044  		cmr, err = client.CreateOrUpdateResponder(cmr.Response.Response)
  8045  		if err != nil {
  8046  			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsCreateOrUpdateFuture", "Result", cmr.Response.Response, "Failure responding to request")
  8047  		}
  8048  	}
  8049  	return
  8050  }
  8051  
  8052  // ConnectionMonitorsDeleteFuture an abstraction for monitoring and retrieving the results of a
  8053  // long-running operation.
  8054  type ConnectionMonitorsDeleteFuture struct {
  8055  	azure.FutureAPI
  8056  	// Result returns the result of the asynchronous operation.
  8057  	// If the operation has not completed it will return an error.
  8058  	Result func(ConnectionMonitorsClient) (autorest.Response, error)
  8059  }
  8060  
  8061  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  8062  func (future *ConnectionMonitorsDeleteFuture) UnmarshalJSON(body []byte) error {
  8063  	var azFuture azure.Future
  8064  	if err := json.Unmarshal(body, &azFuture); err != nil {
  8065  		return err
  8066  	}
  8067  	future.FutureAPI = &azFuture
  8068  	future.Result = future.result
  8069  	return nil
  8070  }
  8071  
  8072  // result is the default implementation for ConnectionMonitorsDeleteFuture.Result.
  8073  func (future *ConnectionMonitorsDeleteFuture) result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
  8074  	var done bool
  8075  	done, err = future.DoneWithContext(context.Background(), client)
  8076  	if err != nil {
  8077  		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsDeleteFuture", "Result", future.Response(), "Polling failure")
  8078  		return
  8079  	}
  8080  	if !done {
  8081  		ar.Response = future.Response()
  8082  		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsDeleteFuture")
  8083  		return
  8084  	}
  8085  	ar.Response = future.Response()
  8086  	return
  8087  }
  8088  
  8089  // ConnectionMonitorSource describes the source of connection monitor.
  8090  type ConnectionMonitorSource struct {
  8091  	// ResourceID - The ID of the resource used as the source by connection monitor.
  8092  	ResourceID *string `json:"resourceId,omitempty"`
  8093  	// Port - The source port used by connection monitor.
  8094  	Port *int32 `json:"port,omitempty"`
  8095  }
  8096  
  8097  // ConnectionMonitorsQueryFuture an abstraction for monitoring and retrieving the results of a long-running
  8098  // operation.
  8099  type ConnectionMonitorsQueryFuture struct {
  8100  	azure.FutureAPI
  8101  	// Result returns the result of the asynchronous operation.
  8102  	// If the operation has not completed it will return an error.
  8103  	Result func(ConnectionMonitorsClient) (ConnectionMonitorQueryResult, error)
  8104  }
  8105  
  8106  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  8107  func (future *ConnectionMonitorsQueryFuture) UnmarshalJSON(body []byte) error {
  8108  	var azFuture azure.Future
  8109  	if err := json.Unmarshal(body, &azFuture); err != nil {
  8110  		return err
  8111  	}
  8112  	future.FutureAPI = &azFuture
  8113  	future.Result = future.result
  8114  	return nil
  8115  }
  8116  
  8117  // result is the default implementation for ConnectionMonitorsQueryFuture.Result.
  8118  func (future *ConnectionMonitorsQueryFuture) result(client ConnectionMonitorsClient) (cmqr ConnectionMonitorQueryResult, err error) {
  8119  	var done bool
  8120  	done, err = future.DoneWithContext(context.Background(), client)
  8121  	if err != nil {
  8122  		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", future.Response(), "Polling failure")
  8123  		return
  8124  	}
  8125  	if !done {
  8126  		cmqr.Response.Response = future.Response()
  8127  		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsQueryFuture")
  8128  		return
  8129  	}
  8130  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  8131  	if cmqr.Response.Response, err = future.GetResult(sender); err == nil && cmqr.Response.Response.StatusCode != http.StatusNoContent {
  8132  		cmqr, err = client.QueryResponder(cmqr.Response.Response)
  8133  		if err != nil {
  8134  			err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsQueryFuture", "Result", cmqr.Response.Response, "Failure responding to request")
  8135  		}
  8136  	}
  8137  	return
  8138  }
  8139  
  8140  // ConnectionMonitorsStartFuture an abstraction for monitoring and retrieving the results of a long-running
  8141  // operation.
  8142  type ConnectionMonitorsStartFuture struct {
  8143  	azure.FutureAPI
  8144  	// Result returns the result of the asynchronous operation.
  8145  	// If the operation has not completed it will return an error.
  8146  	Result func(ConnectionMonitorsClient) (autorest.Response, error)
  8147  }
  8148  
  8149  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  8150  func (future *ConnectionMonitorsStartFuture) UnmarshalJSON(body []byte) error {
  8151  	var azFuture azure.Future
  8152  	if err := json.Unmarshal(body, &azFuture); err != nil {
  8153  		return err
  8154  	}
  8155  	future.FutureAPI = &azFuture
  8156  	future.Result = future.result
  8157  	return nil
  8158  }
  8159  
  8160  // result is the default implementation for ConnectionMonitorsStartFuture.Result.
  8161  func (future *ConnectionMonitorsStartFuture) result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
  8162  	var done bool
  8163  	done, err = future.DoneWithContext(context.Background(), client)
  8164  	if err != nil {
  8165  		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStartFuture", "Result", future.Response(), "Polling failure")
  8166  		return
  8167  	}
  8168  	if !done {
  8169  		ar.Response = future.Response()
  8170  		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStartFuture")
  8171  		return
  8172  	}
  8173  	ar.Response = future.Response()
  8174  	return
  8175  }
  8176  
  8177  // ConnectionMonitorsStopFuture an abstraction for monitoring and retrieving the results of a long-running
  8178  // operation.
  8179  type ConnectionMonitorsStopFuture struct {
  8180  	azure.FutureAPI
  8181  	// Result returns the result of the asynchronous operation.
  8182  	// If the operation has not completed it will return an error.
  8183  	Result func(ConnectionMonitorsClient) (autorest.Response, error)
  8184  }
  8185  
  8186  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  8187  func (future *ConnectionMonitorsStopFuture) UnmarshalJSON(body []byte) error {
  8188  	var azFuture azure.Future
  8189  	if err := json.Unmarshal(body, &azFuture); err != nil {
  8190  		return err
  8191  	}
  8192  	future.FutureAPI = &azFuture
  8193  	future.Result = future.result
  8194  	return nil
  8195  }
  8196  
  8197  // result is the default implementation for ConnectionMonitorsStopFuture.Result.
  8198  func (future *ConnectionMonitorsStopFuture) result(client ConnectionMonitorsClient) (ar autorest.Response, err error) {
  8199  	var done bool
  8200  	done, err = future.DoneWithContext(context.Background(), client)
  8201  	if err != nil {
  8202  		err = autorest.NewErrorWithError(err, "network.ConnectionMonitorsStopFuture", "Result", future.Response(), "Polling failure")
  8203  		return
  8204  	}
  8205  	if !done {
  8206  		ar.Response = future.Response()
  8207  		err = azure.NewAsyncOpIncompleteError("network.ConnectionMonitorsStopFuture")
  8208  		return
  8209  	}
  8210  	ar.Response = future.Response()
  8211  	return
  8212  }
  8213  
  8214  // ConnectionMonitorSuccessThreshold describes the threshold for declaring a test successful.
  8215  type ConnectionMonitorSuccessThreshold struct {
  8216  	// ChecksFailedPercent - The maximum percentage of failed checks permitted for a test to evaluate as successful.
  8217  	ChecksFailedPercent *int32 `json:"checksFailedPercent,omitempty"`
  8218  	// RoundTripTimeMs - The maximum round-trip time in milliseconds permitted for a test to evaluate as successful.
  8219  	RoundTripTimeMs *float64 `json:"roundTripTimeMs,omitempty"`
  8220  }
  8221  
  8222  // ConnectionMonitorTCPConfiguration describes the TCP configuration.
  8223  type ConnectionMonitorTCPConfiguration struct {
  8224  	// Port - The port to connect to.
  8225  	Port *int32 `json:"port,omitempty"`
  8226  	// DisableTraceRoute - Value indicating whether path evaluation with trace route should be disabled.
  8227  	DisableTraceRoute *bool `json:"disableTraceRoute,omitempty"`
  8228  }
  8229  
  8230  // ConnectionMonitorTestConfiguration describes a connection monitor test configuration.
  8231  type ConnectionMonitorTestConfiguration struct {
  8232  	// Name - The name of the connection monitor test configuration.
  8233  	Name *string `json:"name,omitempty"`
  8234  	// TestFrequencySec - The frequency of test evaluation, in seconds.
  8235  	TestFrequencySec *int32 `json:"testFrequencySec,omitempty"`
  8236  	// Protocol - The protocol to use in test evaluation. Possible values include: 'ConnectionMonitorTestConfigurationProtocolTCP', 'ConnectionMonitorTestConfigurationProtocolHTTP', 'ConnectionMonitorTestConfigurationProtocolIcmp'
  8237  	Protocol ConnectionMonitorTestConfigurationProtocol `json:"protocol,omitempty"`
  8238  	// PreferredIPVersion - The preferred IP version to use in test evaluation. The connection monitor may choose to use a different version depending on other parameters. Possible values include: 'PreferredIPVersionIPv4', 'PreferredIPVersionIPv6'
  8239  	PreferredIPVersion PreferredIPVersion `json:"preferredIPVersion,omitempty"`
  8240  	// HTTPConfiguration - The parameters used to perform test evaluation over HTTP.
  8241  	HTTPConfiguration *ConnectionMonitorHTTPConfiguration `json:"httpConfiguration,omitempty"`
  8242  	// TCPConfiguration - The parameters used to perform test evaluation over TCP.
  8243  	TCPConfiguration *ConnectionMonitorTCPConfiguration `json:"tcpConfiguration,omitempty"`
  8244  	// IcmpConfiguration - The parameters used to perform test evaluation over ICMP.
  8245  	IcmpConfiguration *ConnectionMonitorIcmpConfiguration `json:"icmpConfiguration,omitempty"`
  8246  	// SuccessThreshold - The threshold for declaring a test successful.
  8247  	SuccessThreshold *ConnectionMonitorSuccessThreshold `json:"successThreshold,omitempty"`
  8248  }
  8249  
  8250  // ConnectionMonitorTestGroup describes the connection monitor test group.
  8251  type ConnectionMonitorTestGroup struct {
  8252  	// Name - The name of the connection monitor test group.
  8253  	Name *string `json:"name,omitempty"`
  8254  	// Disable - Value indicating whether test group is disabled.
  8255  	Disable *bool `json:"disable,omitempty"`
  8256  	// TestConfigurations - List of test configuration names.
  8257  	TestConfigurations *[]string `json:"testConfigurations,omitempty"`
  8258  	// Sources - List of source endpoint names.
  8259  	Sources *[]string `json:"sources,omitempty"`
  8260  	// Destinations - List of destination endpoint names.
  8261  	Destinations *[]string `json:"destinations,omitempty"`
  8262  }
  8263  
  8264  // ConnectionMonitorWorkspaceSettings describes the settings for producing output into a log analytics
  8265  // workspace.
  8266  type ConnectionMonitorWorkspaceSettings struct {
  8267  	// WorkspaceResourceID - Log analytics workspace resource ID.
  8268  	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
  8269  }
  8270  
  8271  // ConnectionResetSharedKey the virtual network connection reset shared key.
  8272  type ConnectionResetSharedKey struct {
  8273  	autorest.Response `json:"-"`
  8274  	// KeyLength - The virtual network connection reset shared key length, should between 1 and 128.
  8275  	KeyLength *int32 `json:"keyLength,omitempty"`
  8276  }
  8277  
  8278  // ConnectionSharedKey response for GetConnectionSharedKey API service call.
  8279  type ConnectionSharedKey struct {
  8280  	autorest.Response `json:"-"`
  8281  	// Value - The virtual network connection shared key value.
  8282  	Value *string `json:"value,omitempty"`
  8283  	// ID - Resource ID.
  8284  	ID *string `json:"id,omitempty"`
  8285  }
  8286  
  8287  // ConnectionStateSnapshot connection state snapshot.
  8288  type ConnectionStateSnapshot struct {
  8289  	// ConnectionState - The connection state. Possible values include: 'ConnectionStateReachable', 'ConnectionStateUnreachable', 'ConnectionStateUnknown'
  8290  	ConnectionState ConnectionState `json:"connectionState,omitempty"`
  8291  	// StartTime - The start time of the connection snapshot.
  8292  	StartTime *date.Time `json:"startTime,omitempty"`
  8293  	// EndTime - The end time of the connection snapshot.
  8294  	EndTime *date.Time `json:"endTime,omitempty"`
  8295  	// EvaluationState - Connectivity analysis evaluation state. Possible values include: 'NotStarted', 'InProgress', 'Completed'
  8296  	EvaluationState EvaluationState `json:"evaluationState,omitempty"`
  8297  	// AvgLatencyInMs - Average latency in ms.
  8298  	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
  8299  	// MinLatencyInMs - Minimum latency in ms.
  8300  	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
  8301  	// MaxLatencyInMs - Maximum latency in ms.
  8302  	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
  8303  	// ProbesSent - The number of sent probes.
  8304  	ProbesSent *int32 `json:"probesSent,omitempty"`
  8305  	// ProbesFailed - The number of failed probes.
  8306  	ProbesFailed *int32 `json:"probesFailed,omitempty"`
  8307  	// Hops - READ-ONLY; List of hops between the source and the destination.
  8308  	Hops *[]ConnectivityHop `json:"hops,omitempty"`
  8309  }
  8310  
  8311  // MarshalJSON is the custom marshaler for ConnectionStateSnapshot.
  8312  func (CSS ConnectionStateSnapshot) MarshalJSON() ([]byte, error) {
  8313  	objectMap := make(map[string]interface{})
  8314  	if CSS.ConnectionState != "" {
  8315  		objectMap["connectionState"] = CSS.ConnectionState
  8316  	}
  8317  	if CSS.StartTime != nil {
  8318  		objectMap["startTime"] = CSS.StartTime
  8319  	}
  8320  	if CSS.EndTime != nil {
  8321  		objectMap["endTime"] = CSS.EndTime
  8322  	}
  8323  	if CSS.EvaluationState != "" {
  8324  		objectMap["evaluationState"] = CSS.EvaluationState
  8325  	}
  8326  	if CSS.AvgLatencyInMs != nil {
  8327  		objectMap["avgLatencyInMs"] = CSS.AvgLatencyInMs
  8328  	}
  8329  	if CSS.MinLatencyInMs != nil {
  8330  		objectMap["minLatencyInMs"] = CSS.MinLatencyInMs
  8331  	}
  8332  	if CSS.MaxLatencyInMs != nil {
  8333  		objectMap["maxLatencyInMs"] = CSS.MaxLatencyInMs
  8334  	}
  8335  	if CSS.ProbesSent != nil {
  8336  		objectMap["probesSent"] = CSS.ProbesSent
  8337  	}
  8338  	if CSS.ProbesFailed != nil {
  8339  		objectMap["probesFailed"] = CSS.ProbesFailed
  8340  	}
  8341  	return json.Marshal(objectMap)
  8342  }
  8343  
  8344  // ConnectivityDestination parameters that define destination of connection.
  8345  type ConnectivityDestination struct {
  8346  	// ResourceID - The ID of the resource to which a connection attempt will be made.
  8347  	ResourceID *string `json:"resourceId,omitempty"`
  8348  	// Address - The IP address or URI the resource to which a connection attempt will be made.
  8349  	Address *string `json:"address,omitempty"`
  8350  	// Port - Port on which check connectivity will be performed.
  8351  	Port *int32 `json:"port,omitempty"`
  8352  }
  8353  
  8354  // ConnectivityHop information about a hop between the source and the destination.
  8355  type ConnectivityHop struct {
  8356  	// Type - READ-ONLY; The type of the hop.
  8357  	Type *string `json:"type,omitempty"`
  8358  	// ID - READ-ONLY; The ID of the hop.
  8359  	ID *string `json:"id,omitempty"`
  8360  	// Address - READ-ONLY; The IP address of the hop.
  8361  	Address *string `json:"address,omitempty"`
  8362  	// ResourceID - READ-ONLY; The ID of the resource corresponding to this hop.
  8363  	ResourceID *string `json:"resourceId,omitempty"`
  8364  	// NextHopIds - READ-ONLY; List of next hop identifiers.
  8365  	NextHopIds *[]string `json:"nextHopIds,omitempty"`
  8366  	// Issues - READ-ONLY; List of issues.
  8367  	Issues *[]ConnectivityIssue `json:"issues,omitempty"`
  8368  }
  8369  
  8370  // MarshalJSON is the custom marshaler for ConnectivityHop.
  8371  func (ch ConnectivityHop) MarshalJSON() ([]byte, error) {
  8372  	objectMap := make(map[string]interface{})
  8373  	return json.Marshal(objectMap)
  8374  }
  8375  
  8376  // ConnectivityInformation information on the connectivity status.
  8377  type ConnectivityInformation struct {
  8378  	autorest.Response `json:"-"`
  8379  	// Hops - READ-ONLY; List of hops between the source and the destination.
  8380  	Hops *[]ConnectivityHop `json:"hops,omitempty"`
  8381  	// ConnectionStatus - READ-ONLY; The connection status. Possible values include: 'ConnectionStatusUnknown', 'ConnectionStatusConnected', 'ConnectionStatusDisconnected', 'ConnectionStatusDegraded'
  8382  	ConnectionStatus ConnectionStatus `json:"connectionStatus,omitempty"`
  8383  	// AvgLatencyInMs - READ-ONLY; Average latency in milliseconds.
  8384  	AvgLatencyInMs *int32 `json:"avgLatencyInMs,omitempty"`
  8385  	// MinLatencyInMs - READ-ONLY; Minimum latency in milliseconds.
  8386  	MinLatencyInMs *int32 `json:"minLatencyInMs,omitempty"`
  8387  	// MaxLatencyInMs - READ-ONLY; Maximum latency in milliseconds.
  8388  	MaxLatencyInMs *int32 `json:"maxLatencyInMs,omitempty"`
  8389  	// ProbesSent - READ-ONLY; Total number of probes sent.
  8390  	ProbesSent *int32 `json:"probesSent,omitempty"`
  8391  	// ProbesFailed - READ-ONLY; Number of failed probes.
  8392  	ProbesFailed *int32 `json:"probesFailed,omitempty"`
  8393  }
  8394  
  8395  // MarshalJSON is the custom marshaler for ConnectivityInformation.
  8396  func (ci ConnectivityInformation) MarshalJSON() ([]byte, error) {
  8397  	objectMap := make(map[string]interface{})
  8398  	return json.Marshal(objectMap)
  8399  }
  8400  
  8401  // ConnectivityIssue information about an issue encountered in the process of checking for connectivity.
  8402  type ConnectivityIssue struct {
  8403  	// Origin - READ-ONLY; The origin of the issue. Possible values include: 'OriginLocal', 'OriginInbound', 'OriginOutbound'
  8404  	Origin Origin `json:"origin,omitempty"`
  8405  	// Severity - READ-ONLY; The severity of the issue. Possible values include: 'SeverityError', 'SeverityWarning'
  8406  	Severity Severity `json:"severity,omitempty"`
  8407  	// Type - READ-ONLY; The type of issue. Possible values include: 'IssueTypeUnknown', 'IssueTypeAgentStopped', 'IssueTypeGuestFirewall', 'IssueTypeDNSResolution', 'IssueTypeSocketBind', 'IssueTypeNetworkSecurityRule', 'IssueTypeUserDefinedRoute', 'IssueTypePortThrottled', 'IssueTypePlatform'
  8408  	Type IssueType `json:"type,omitempty"`
  8409  	// Context - READ-ONLY; Provides additional context on the issue.
  8410  	Context *[]map[string]*string `json:"context,omitempty"`
  8411  }
  8412  
  8413  // MarshalJSON is the custom marshaler for ConnectivityIssue.
  8414  func (ci ConnectivityIssue) MarshalJSON() ([]byte, error) {
  8415  	objectMap := make(map[string]interface{})
  8416  	return json.Marshal(objectMap)
  8417  }
  8418  
  8419  // ConnectivityParameters parameters that determine how the connectivity check will be performed.
  8420  type ConnectivityParameters struct {
  8421  	// Source - The source of the connection.
  8422  	Source *ConnectivitySource `json:"source,omitempty"`
  8423  	// Destination - The destination of connection.
  8424  	Destination *ConnectivityDestination `json:"destination,omitempty"`
  8425  	// Protocol - Network protocol. Possible values include: 'ProtocolTCP', 'ProtocolHTTP', 'ProtocolHTTPS', 'ProtocolIcmp'
  8426  	Protocol Protocol `json:"protocol,omitempty"`
  8427  	// ProtocolConfiguration - Configuration of the protocol.
  8428  	ProtocolConfiguration *ProtocolConfiguration `json:"protocolConfiguration,omitempty"`
  8429  	// PreferredIPVersion - Preferred IP version of the connection. Possible values include: 'IPv4', 'IPv6'
  8430  	PreferredIPVersion IPVersion `json:"preferredIPVersion,omitempty"`
  8431  }
  8432  
  8433  // ConnectivitySource parameters that define the source of the connection.
  8434  type ConnectivitySource struct {
  8435  	// ResourceID - The ID of the resource from which a connectivity check will be initiated.
  8436  	ResourceID *string `json:"resourceId,omitempty"`
  8437  	// Port - The source port from which a connectivity check will be performed.
  8438  	Port *int32 `json:"port,omitempty"`
  8439  }
  8440  
  8441  // Container reference to container resource in remote resource provider.
  8442  type Container struct {
  8443  	// ID - Resource ID.
  8444  	ID *string `json:"id,omitempty"`
  8445  }
  8446  
  8447  // ContainerNetworkInterface container network interface child resource.
  8448  type ContainerNetworkInterface struct {
  8449  	// ContainerNetworkInterfacePropertiesFormat - Container network interface properties.
  8450  	*ContainerNetworkInterfacePropertiesFormat `json:"properties,omitempty"`
  8451  	// Name - The name of the resource. This name can be used to access the resource.
  8452  	Name *string `json:"name,omitempty"`
  8453  	// Type - READ-ONLY; Sub Resource type.
  8454  	Type *string `json:"type,omitempty"`
  8455  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  8456  	Etag *string `json:"etag,omitempty"`
  8457  	// ID - Resource ID.
  8458  	ID *string `json:"id,omitempty"`
  8459  }
  8460  
  8461  // MarshalJSON is the custom marshaler for ContainerNetworkInterface.
  8462  func (cni ContainerNetworkInterface) MarshalJSON() ([]byte, error) {
  8463  	objectMap := make(map[string]interface{})
  8464  	if cni.ContainerNetworkInterfacePropertiesFormat != nil {
  8465  		objectMap["properties"] = cni.ContainerNetworkInterfacePropertiesFormat
  8466  	}
  8467  	if cni.Name != nil {
  8468  		objectMap["name"] = cni.Name
  8469  	}
  8470  	if cni.ID != nil {
  8471  		objectMap["id"] = cni.ID
  8472  	}
  8473  	return json.Marshal(objectMap)
  8474  }
  8475  
  8476  // UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterface struct.
  8477  func (cni *ContainerNetworkInterface) UnmarshalJSON(body []byte) error {
  8478  	var m map[string]*json.RawMessage
  8479  	err := json.Unmarshal(body, &m)
  8480  	if err != nil {
  8481  		return err
  8482  	}
  8483  	for k, v := range m {
  8484  		switch k {
  8485  		case "properties":
  8486  			if v != nil {
  8487  				var containerNetworkInterfacePropertiesFormat ContainerNetworkInterfacePropertiesFormat
  8488  				err = json.Unmarshal(*v, &containerNetworkInterfacePropertiesFormat)
  8489  				if err != nil {
  8490  					return err
  8491  				}
  8492  				cni.ContainerNetworkInterfacePropertiesFormat = &containerNetworkInterfacePropertiesFormat
  8493  			}
  8494  		case "name":
  8495  			if v != nil {
  8496  				var name string
  8497  				err = json.Unmarshal(*v, &name)
  8498  				if err != nil {
  8499  					return err
  8500  				}
  8501  				cni.Name = &name
  8502  			}
  8503  		case "type":
  8504  			if v != nil {
  8505  				var typeVar string
  8506  				err = json.Unmarshal(*v, &typeVar)
  8507  				if err != nil {
  8508  					return err
  8509  				}
  8510  				cni.Type = &typeVar
  8511  			}
  8512  		case "etag":
  8513  			if v != nil {
  8514  				var etag string
  8515  				err = json.Unmarshal(*v, &etag)
  8516  				if err != nil {
  8517  					return err
  8518  				}
  8519  				cni.Etag = &etag
  8520  			}
  8521  		case "id":
  8522  			if v != nil {
  8523  				var ID string
  8524  				err = json.Unmarshal(*v, &ID)
  8525  				if err != nil {
  8526  					return err
  8527  				}
  8528  				cni.ID = &ID
  8529  			}
  8530  		}
  8531  	}
  8532  
  8533  	return nil
  8534  }
  8535  
  8536  // ContainerNetworkInterfaceConfiguration container network interface configuration child resource.
  8537  type ContainerNetworkInterfaceConfiguration struct {
  8538  	// ContainerNetworkInterfaceConfigurationPropertiesFormat - Container network interface configuration properties.
  8539  	*ContainerNetworkInterfaceConfigurationPropertiesFormat `json:"properties,omitempty"`
  8540  	// Name - The name of the resource. This name can be used to access the resource.
  8541  	Name *string `json:"name,omitempty"`
  8542  	// Type - READ-ONLY; Sub Resource type.
  8543  	Type *string `json:"type,omitempty"`
  8544  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  8545  	Etag *string `json:"etag,omitempty"`
  8546  	// ID - Resource ID.
  8547  	ID *string `json:"id,omitempty"`
  8548  }
  8549  
  8550  // MarshalJSON is the custom marshaler for ContainerNetworkInterfaceConfiguration.
  8551  func (cnic ContainerNetworkInterfaceConfiguration) MarshalJSON() ([]byte, error) {
  8552  	objectMap := make(map[string]interface{})
  8553  	if cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat != nil {
  8554  		objectMap["properties"] = cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat
  8555  	}
  8556  	if cnic.Name != nil {
  8557  		objectMap["name"] = cnic.Name
  8558  	}
  8559  	if cnic.ID != nil {
  8560  		objectMap["id"] = cnic.ID
  8561  	}
  8562  	return json.Marshal(objectMap)
  8563  }
  8564  
  8565  // UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceConfiguration struct.
  8566  func (cnic *ContainerNetworkInterfaceConfiguration) UnmarshalJSON(body []byte) error {
  8567  	var m map[string]*json.RawMessage
  8568  	err := json.Unmarshal(body, &m)
  8569  	if err != nil {
  8570  		return err
  8571  	}
  8572  	for k, v := range m {
  8573  		switch k {
  8574  		case "properties":
  8575  			if v != nil {
  8576  				var containerNetworkInterfaceConfigurationPropertiesFormat ContainerNetworkInterfaceConfigurationPropertiesFormat
  8577  				err = json.Unmarshal(*v, &containerNetworkInterfaceConfigurationPropertiesFormat)
  8578  				if err != nil {
  8579  					return err
  8580  				}
  8581  				cnic.ContainerNetworkInterfaceConfigurationPropertiesFormat = &containerNetworkInterfaceConfigurationPropertiesFormat
  8582  			}
  8583  		case "name":
  8584  			if v != nil {
  8585  				var name string
  8586  				err = json.Unmarshal(*v, &name)
  8587  				if err != nil {
  8588  					return err
  8589  				}
  8590  				cnic.Name = &name
  8591  			}
  8592  		case "type":
  8593  			if v != nil {
  8594  				var typeVar string
  8595  				err = json.Unmarshal(*v, &typeVar)
  8596  				if err != nil {
  8597  					return err
  8598  				}
  8599  				cnic.Type = &typeVar
  8600  			}
  8601  		case "etag":
  8602  			if v != nil {
  8603  				var etag string
  8604  				err = json.Unmarshal(*v, &etag)
  8605  				if err != nil {
  8606  					return err
  8607  				}
  8608  				cnic.Etag = &etag
  8609  			}
  8610  		case "id":
  8611  			if v != nil {
  8612  				var ID string
  8613  				err = json.Unmarshal(*v, &ID)
  8614  				if err != nil {
  8615  					return err
  8616  				}
  8617  				cnic.ID = &ID
  8618  			}
  8619  		}
  8620  	}
  8621  
  8622  	return nil
  8623  }
  8624  
  8625  // ContainerNetworkInterfaceConfigurationPropertiesFormat container network interface configuration
  8626  // properties.
  8627  type ContainerNetworkInterfaceConfigurationPropertiesFormat struct {
  8628  	// IPConfigurations - A list of ip configurations of the container network interface configuration.
  8629  	IPConfigurations *[]IPConfigurationProfile `json:"ipConfigurations,omitempty"`
  8630  	// ContainerNetworkInterfaces - A list of container network interfaces created from this container network interface configuration.
  8631  	ContainerNetworkInterfaces *[]SubResource `json:"containerNetworkInterfaces,omitempty"`
  8632  	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  8633  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  8634  }
  8635  
  8636  // MarshalJSON is the custom marshaler for ContainerNetworkInterfaceConfigurationPropertiesFormat.
  8637  func (cnicpf ContainerNetworkInterfaceConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
  8638  	objectMap := make(map[string]interface{})
  8639  	if cnicpf.IPConfigurations != nil {
  8640  		objectMap["ipConfigurations"] = cnicpf.IPConfigurations
  8641  	}
  8642  	if cnicpf.ContainerNetworkInterfaces != nil {
  8643  		objectMap["containerNetworkInterfaces"] = cnicpf.ContainerNetworkInterfaces
  8644  	}
  8645  	return json.Marshal(objectMap)
  8646  }
  8647  
  8648  // ContainerNetworkInterfaceIPConfiguration the ip configuration for a container network interface.
  8649  type ContainerNetworkInterfaceIPConfiguration struct {
  8650  	// ContainerNetworkInterfaceIPConfigurationPropertiesFormat - Properties of the container network interface IP configuration.
  8651  	*ContainerNetworkInterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
  8652  	// Name - The name of the resource. This name can be used to access the resource.
  8653  	Name *string `json:"name,omitempty"`
  8654  	// Type - READ-ONLY; Sub Resource type.
  8655  	Type *string `json:"type,omitempty"`
  8656  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  8657  	Etag *string `json:"etag,omitempty"`
  8658  }
  8659  
  8660  // MarshalJSON is the custom marshaler for ContainerNetworkInterfaceIPConfiguration.
  8661  func (cniic ContainerNetworkInterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
  8662  	objectMap := make(map[string]interface{})
  8663  	if cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat != nil {
  8664  		objectMap["properties"] = cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat
  8665  	}
  8666  	if cniic.Name != nil {
  8667  		objectMap["name"] = cniic.Name
  8668  	}
  8669  	return json.Marshal(objectMap)
  8670  }
  8671  
  8672  // UnmarshalJSON is the custom unmarshaler for ContainerNetworkInterfaceIPConfiguration struct.
  8673  func (cniic *ContainerNetworkInterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
  8674  	var m map[string]*json.RawMessage
  8675  	err := json.Unmarshal(body, &m)
  8676  	if err != nil {
  8677  		return err
  8678  	}
  8679  	for k, v := range m {
  8680  		switch k {
  8681  		case "properties":
  8682  			if v != nil {
  8683  				var containerNetworkInterfaceIPConfigurationPropertiesFormat ContainerNetworkInterfaceIPConfigurationPropertiesFormat
  8684  				err = json.Unmarshal(*v, &containerNetworkInterfaceIPConfigurationPropertiesFormat)
  8685  				if err != nil {
  8686  					return err
  8687  				}
  8688  				cniic.ContainerNetworkInterfaceIPConfigurationPropertiesFormat = &containerNetworkInterfaceIPConfigurationPropertiesFormat
  8689  			}
  8690  		case "name":
  8691  			if v != nil {
  8692  				var name string
  8693  				err = json.Unmarshal(*v, &name)
  8694  				if err != nil {
  8695  					return err
  8696  				}
  8697  				cniic.Name = &name
  8698  			}
  8699  		case "type":
  8700  			if v != nil {
  8701  				var typeVar string
  8702  				err = json.Unmarshal(*v, &typeVar)
  8703  				if err != nil {
  8704  					return err
  8705  				}
  8706  				cniic.Type = &typeVar
  8707  			}
  8708  		case "etag":
  8709  			if v != nil {
  8710  				var etag string
  8711  				err = json.Unmarshal(*v, &etag)
  8712  				if err != nil {
  8713  					return err
  8714  				}
  8715  				cniic.Etag = &etag
  8716  			}
  8717  		}
  8718  	}
  8719  
  8720  	return nil
  8721  }
  8722  
  8723  // ContainerNetworkInterfaceIPConfigurationPropertiesFormat properties of the container network interface
  8724  // IP configuration.
  8725  type ContainerNetworkInterfaceIPConfigurationPropertiesFormat struct {
  8726  	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  8727  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  8728  }
  8729  
  8730  // MarshalJSON is the custom marshaler for ContainerNetworkInterfaceIPConfigurationPropertiesFormat.
  8731  func (cniicpf ContainerNetworkInterfaceIPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
  8732  	objectMap := make(map[string]interface{})
  8733  	return json.Marshal(objectMap)
  8734  }
  8735  
  8736  // ContainerNetworkInterfacePropertiesFormat properties of container network interface.
  8737  type ContainerNetworkInterfacePropertiesFormat struct {
  8738  	// ContainerNetworkInterfaceConfiguration - READ-ONLY; Container network interface configuration from which this container network interface is created.
  8739  	ContainerNetworkInterfaceConfiguration *ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfiguration,omitempty"`
  8740  	// Container - Reference to the container to which this container network interface is attached.
  8741  	Container *Container `json:"container,omitempty"`
  8742  	// IPConfigurations - READ-ONLY; Reference to the ip configuration on this container nic.
  8743  	IPConfigurations *[]ContainerNetworkInterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
  8744  	// ProvisioningState - READ-ONLY; The provisioning state of the container network interface resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  8745  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  8746  }
  8747  
  8748  // MarshalJSON is the custom marshaler for ContainerNetworkInterfacePropertiesFormat.
  8749  func (cnipf ContainerNetworkInterfacePropertiesFormat) MarshalJSON() ([]byte, error) {
  8750  	objectMap := make(map[string]interface{})
  8751  	if cnipf.Container != nil {
  8752  		objectMap["container"] = cnipf.Container
  8753  	}
  8754  	return json.Marshal(objectMap)
  8755  }
  8756  
  8757  // CustomDNSConfigPropertiesFormat contains custom Dns resolution configuration from customer.
  8758  type CustomDNSConfigPropertiesFormat struct {
  8759  	// Fqdn - Fqdn that resolves to private endpoint ip address.
  8760  	Fqdn *string `json:"fqdn,omitempty"`
  8761  	// IPAddresses - A list of private ip addresses of the private endpoint.
  8762  	IPAddresses *[]string `json:"ipAddresses,omitempty"`
  8763  }
  8764  
  8765  // DdosCustomPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
  8766  // long-running operation.
  8767  type DdosCustomPoliciesCreateOrUpdateFuture struct {
  8768  	azure.FutureAPI
  8769  	// Result returns the result of the asynchronous operation.
  8770  	// If the operation has not completed it will return an error.
  8771  	Result func(DdosCustomPoliciesClient) (DdosCustomPolicy, error)
  8772  }
  8773  
  8774  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  8775  func (future *DdosCustomPoliciesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
  8776  	var azFuture azure.Future
  8777  	if err := json.Unmarshal(body, &azFuture); err != nil {
  8778  		return err
  8779  	}
  8780  	future.FutureAPI = &azFuture
  8781  	future.Result = future.result
  8782  	return nil
  8783  }
  8784  
  8785  // result is the default implementation for DdosCustomPoliciesCreateOrUpdateFuture.Result.
  8786  func (future *DdosCustomPoliciesCreateOrUpdateFuture) result(client DdosCustomPoliciesClient) (dcp DdosCustomPolicy, err error) {
  8787  	var done bool
  8788  	done, err = future.DoneWithContext(context.Background(), client)
  8789  	if err != nil {
  8790  		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
  8791  		return
  8792  	}
  8793  	if !done {
  8794  		dcp.Response.Response = future.Response()
  8795  		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesCreateOrUpdateFuture")
  8796  		return
  8797  	}
  8798  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  8799  	if dcp.Response.Response, err = future.GetResult(sender); err == nil && dcp.Response.Response.StatusCode != http.StatusNoContent {
  8800  		dcp, err = client.CreateOrUpdateResponder(dcp.Response.Response)
  8801  		if err != nil {
  8802  			err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesCreateOrUpdateFuture", "Result", dcp.Response.Response, "Failure responding to request")
  8803  		}
  8804  	}
  8805  	return
  8806  }
  8807  
  8808  // DdosCustomPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
  8809  // long-running operation.
  8810  type DdosCustomPoliciesDeleteFuture struct {
  8811  	azure.FutureAPI
  8812  	// Result returns the result of the asynchronous operation.
  8813  	// If the operation has not completed it will return an error.
  8814  	Result func(DdosCustomPoliciesClient) (autorest.Response, error)
  8815  }
  8816  
  8817  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  8818  func (future *DdosCustomPoliciesDeleteFuture) UnmarshalJSON(body []byte) error {
  8819  	var azFuture azure.Future
  8820  	if err := json.Unmarshal(body, &azFuture); err != nil {
  8821  		return err
  8822  	}
  8823  	future.FutureAPI = &azFuture
  8824  	future.Result = future.result
  8825  	return nil
  8826  }
  8827  
  8828  // result is the default implementation for DdosCustomPoliciesDeleteFuture.Result.
  8829  func (future *DdosCustomPoliciesDeleteFuture) result(client DdosCustomPoliciesClient) (ar autorest.Response, err error) {
  8830  	var done bool
  8831  	done, err = future.DoneWithContext(context.Background(), client)
  8832  	if err != nil {
  8833  		err = autorest.NewErrorWithError(err, "network.DdosCustomPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
  8834  		return
  8835  	}
  8836  	if !done {
  8837  		ar.Response = future.Response()
  8838  		err = azure.NewAsyncOpIncompleteError("network.DdosCustomPoliciesDeleteFuture")
  8839  		return
  8840  	}
  8841  	ar.Response = future.Response()
  8842  	return
  8843  }
  8844  
  8845  // DdosCustomPolicy a DDoS custom policy in a resource group.
  8846  type DdosCustomPolicy struct {
  8847  	autorest.Response `json:"-"`
  8848  	// DdosCustomPolicyPropertiesFormat - Properties of the DDoS custom policy.
  8849  	*DdosCustomPolicyPropertiesFormat `json:"properties,omitempty"`
  8850  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  8851  	Etag *string `json:"etag,omitempty"`
  8852  	// ID - Resource ID.
  8853  	ID *string `json:"id,omitempty"`
  8854  	// Name - READ-ONLY; Resource name.
  8855  	Name *string `json:"name,omitempty"`
  8856  	// Type - READ-ONLY; Resource type.
  8857  	Type *string `json:"type,omitempty"`
  8858  	// Location - Resource location.
  8859  	Location *string `json:"location,omitempty"`
  8860  	// Tags - Resource tags.
  8861  	Tags map[string]*string `json:"tags"`
  8862  }
  8863  
  8864  // MarshalJSON is the custom marshaler for DdosCustomPolicy.
  8865  func (dcp DdosCustomPolicy) MarshalJSON() ([]byte, error) {
  8866  	objectMap := make(map[string]interface{})
  8867  	if dcp.DdosCustomPolicyPropertiesFormat != nil {
  8868  		objectMap["properties"] = dcp.DdosCustomPolicyPropertiesFormat
  8869  	}
  8870  	if dcp.ID != nil {
  8871  		objectMap["id"] = dcp.ID
  8872  	}
  8873  	if dcp.Location != nil {
  8874  		objectMap["location"] = dcp.Location
  8875  	}
  8876  	if dcp.Tags != nil {
  8877  		objectMap["tags"] = dcp.Tags
  8878  	}
  8879  	return json.Marshal(objectMap)
  8880  }
  8881  
  8882  // UnmarshalJSON is the custom unmarshaler for DdosCustomPolicy struct.
  8883  func (dcp *DdosCustomPolicy) UnmarshalJSON(body []byte) error {
  8884  	var m map[string]*json.RawMessage
  8885  	err := json.Unmarshal(body, &m)
  8886  	if err != nil {
  8887  		return err
  8888  	}
  8889  	for k, v := range m {
  8890  		switch k {
  8891  		case "properties":
  8892  			if v != nil {
  8893  				var ddosCustomPolicyPropertiesFormat DdosCustomPolicyPropertiesFormat
  8894  				err = json.Unmarshal(*v, &ddosCustomPolicyPropertiesFormat)
  8895  				if err != nil {
  8896  					return err
  8897  				}
  8898  				dcp.DdosCustomPolicyPropertiesFormat = &ddosCustomPolicyPropertiesFormat
  8899  			}
  8900  		case "etag":
  8901  			if v != nil {
  8902  				var etag string
  8903  				err = json.Unmarshal(*v, &etag)
  8904  				if err != nil {
  8905  					return err
  8906  				}
  8907  				dcp.Etag = &etag
  8908  			}
  8909  		case "id":
  8910  			if v != nil {
  8911  				var ID string
  8912  				err = json.Unmarshal(*v, &ID)
  8913  				if err != nil {
  8914  					return err
  8915  				}
  8916  				dcp.ID = &ID
  8917  			}
  8918  		case "name":
  8919  			if v != nil {
  8920  				var name string
  8921  				err = json.Unmarshal(*v, &name)
  8922  				if err != nil {
  8923  					return err
  8924  				}
  8925  				dcp.Name = &name
  8926  			}
  8927  		case "type":
  8928  			if v != nil {
  8929  				var typeVar string
  8930  				err = json.Unmarshal(*v, &typeVar)
  8931  				if err != nil {
  8932  					return err
  8933  				}
  8934  				dcp.Type = &typeVar
  8935  			}
  8936  		case "location":
  8937  			if v != nil {
  8938  				var location string
  8939  				err = json.Unmarshal(*v, &location)
  8940  				if err != nil {
  8941  					return err
  8942  				}
  8943  				dcp.Location = &location
  8944  			}
  8945  		case "tags":
  8946  			if v != nil {
  8947  				var tags map[string]*string
  8948  				err = json.Unmarshal(*v, &tags)
  8949  				if err != nil {
  8950  					return err
  8951  				}
  8952  				dcp.Tags = tags
  8953  			}
  8954  		}
  8955  	}
  8956  
  8957  	return nil
  8958  }
  8959  
  8960  // DdosCustomPolicyPropertiesFormat dDoS custom policy properties.
  8961  type DdosCustomPolicyPropertiesFormat struct {
  8962  	// ResourceGUID - READ-ONLY; The resource GUID property of the DDoS custom policy resource. It uniquely identifies the resource, even if the user changes its name or migrate the resource across subscriptions or resource groups.
  8963  	ResourceGUID *string `json:"resourceGuid,omitempty"`
  8964  	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS custom policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  8965  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  8966  	// PublicIPAddresses - READ-ONLY; The list of public IPs associated with the DDoS custom policy resource. This list is read-only.
  8967  	PublicIPAddresses *[]SubResource `json:"publicIPAddresses,omitempty"`
  8968  	// ProtocolCustomSettings - The protocol-specific DDoS policy customization parameters.
  8969  	ProtocolCustomSettings *[]ProtocolCustomSettingsFormat `json:"protocolCustomSettings,omitempty"`
  8970  }
  8971  
  8972  // MarshalJSON is the custom marshaler for DdosCustomPolicyPropertiesFormat.
  8973  func (dcppf DdosCustomPolicyPropertiesFormat) MarshalJSON() ([]byte, error) {
  8974  	objectMap := make(map[string]interface{})
  8975  	if dcppf.ProtocolCustomSettings != nil {
  8976  		objectMap["protocolCustomSettings"] = dcppf.ProtocolCustomSettings
  8977  	}
  8978  	return json.Marshal(objectMap)
  8979  }
  8980  
  8981  // DdosProtectionPlan a DDoS protection plan in a resource group.
  8982  type DdosProtectionPlan struct {
  8983  	autorest.Response `json:"-"`
  8984  	// ID - READ-ONLY; Resource ID.
  8985  	ID *string `json:"id,omitempty"`
  8986  	// Name - READ-ONLY; Resource name.
  8987  	Name *string `json:"name,omitempty"`
  8988  	// Type - READ-ONLY; Resource type.
  8989  	Type *string `json:"type,omitempty"`
  8990  	// Location - Resource location.
  8991  	Location *string `json:"location,omitempty"`
  8992  	// Tags - Resource tags.
  8993  	Tags map[string]*string `json:"tags"`
  8994  	// DdosProtectionPlanPropertiesFormat - Properties of the DDoS protection plan.
  8995  	*DdosProtectionPlanPropertiesFormat `json:"properties,omitempty"`
  8996  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  8997  	Etag *string `json:"etag,omitempty"`
  8998  }
  8999  
  9000  // MarshalJSON is the custom marshaler for DdosProtectionPlan.
  9001  func (dpp DdosProtectionPlan) MarshalJSON() ([]byte, error) {
  9002  	objectMap := make(map[string]interface{})
  9003  	if dpp.Location != nil {
  9004  		objectMap["location"] = dpp.Location
  9005  	}
  9006  	if dpp.Tags != nil {
  9007  		objectMap["tags"] = dpp.Tags
  9008  	}
  9009  	if dpp.DdosProtectionPlanPropertiesFormat != nil {
  9010  		objectMap["properties"] = dpp.DdosProtectionPlanPropertiesFormat
  9011  	}
  9012  	return json.Marshal(objectMap)
  9013  }
  9014  
  9015  // UnmarshalJSON is the custom unmarshaler for DdosProtectionPlan struct.
  9016  func (dpp *DdosProtectionPlan) UnmarshalJSON(body []byte) error {
  9017  	var m map[string]*json.RawMessage
  9018  	err := json.Unmarshal(body, &m)
  9019  	if err != nil {
  9020  		return err
  9021  	}
  9022  	for k, v := range m {
  9023  		switch k {
  9024  		case "id":
  9025  			if v != nil {
  9026  				var ID string
  9027  				err = json.Unmarshal(*v, &ID)
  9028  				if err != nil {
  9029  					return err
  9030  				}
  9031  				dpp.ID = &ID
  9032  			}
  9033  		case "name":
  9034  			if v != nil {
  9035  				var name string
  9036  				err = json.Unmarshal(*v, &name)
  9037  				if err != nil {
  9038  					return err
  9039  				}
  9040  				dpp.Name = &name
  9041  			}
  9042  		case "type":
  9043  			if v != nil {
  9044  				var typeVar string
  9045  				err = json.Unmarshal(*v, &typeVar)
  9046  				if err != nil {
  9047  					return err
  9048  				}
  9049  				dpp.Type = &typeVar
  9050  			}
  9051  		case "location":
  9052  			if v != nil {
  9053  				var location string
  9054  				err = json.Unmarshal(*v, &location)
  9055  				if err != nil {
  9056  					return err
  9057  				}
  9058  				dpp.Location = &location
  9059  			}
  9060  		case "tags":
  9061  			if v != nil {
  9062  				var tags map[string]*string
  9063  				err = json.Unmarshal(*v, &tags)
  9064  				if err != nil {
  9065  					return err
  9066  				}
  9067  				dpp.Tags = tags
  9068  			}
  9069  		case "properties":
  9070  			if v != nil {
  9071  				var ddosProtectionPlanPropertiesFormat DdosProtectionPlanPropertiesFormat
  9072  				err = json.Unmarshal(*v, &ddosProtectionPlanPropertiesFormat)
  9073  				if err != nil {
  9074  					return err
  9075  				}
  9076  				dpp.DdosProtectionPlanPropertiesFormat = &ddosProtectionPlanPropertiesFormat
  9077  			}
  9078  		case "etag":
  9079  			if v != nil {
  9080  				var etag string
  9081  				err = json.Unmarshal(*v, &etag)
  9082  				if err != nil {
  9083  					return err
  9084  				}
  9085  				dpp.Etag = &etag
  9086  			}
  9087  		}
  9088  	}
  9089  
  9090  	return nil
  9091  }
  9092  
  9093  // DdosProtectionPlanListResult a list of DDoS protection plans.
  9094  type DdosProtectionPlanListResult struct {
  9095  	autorest.Response `json:"-"`
  9096  	// Value - A list of DDoS protection plans.
  9097  	Value *[]DdosProtectionPlan `json:"value,omitempty"`
  9098  	// NextLink - READ-ONLY; The URL to get the next set of results.
  9099  	NextLink *string `json:"nextLink,omitempty"`
  9100  }
  9101  
  9102  // MarshalJSON is the custom marshaler for DdosProtectionPlanListResult.
  9103  func (dpplr DdosProtectionPlanListResult) MarshalJSON() ([]byte, error) {
  9104  	objectMap := make(map[string]interface{})
  9105  	if dpplr.Value != nil {
  9106  		objectMap["value"] = dpplr.Value
  9107  	}
  9108  	return json.Marshal(objectMap)
  9109  }
  9110  
  9111  // DdosProtectionPlanListResultIterator provides access to a complete listing of DdosProtectionPlan values.
  9112  type DdosProtectionPlanListResultIterator struct {
  9113  	i    int
  9114  	page DdosProtectionPlanListResultPage
  9115  }
  9116  
  9117  // NextWithContext advances to the next value.  If there was an error making
  9118  // the request the iterator does not advance and the error is returned.
  9119  func (iter *DdosProtectionPlanListResultIterator) NextWithContext(ctx context.Context) (err error) {
  9120  	if tracing.IsEnabled() {
  9121  		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultIterator.NextWithContext")
  9122  		defer func() {
  9123  			sc := -1
  9124  			if iter.Response().Response.Response != nil {
  9125  				sc = iter.Response().Response.Response.StatusCode
  9126  			}
  9127  			tracing.EndSpan(ctx, sc, err)
  9128  		}()
  9129  	}
  9130  	iter.i++
  9131  	if iter.i < len(iter.page.Values()) {
  9132  		return nil
  9133  	}
  9134  	err = iter.page.NextWithContext(ctx)
  9135  	if err != nil {
  9136  		iter.i--
  9137  		return err
  9138  	}
  9139  	iter.i = 0
  9140  	return nil
  9141  }
  9142  
  9143  // Next advances to the next value.  If there was an error making
  9144  // the request the iterator does not advance and the error is returned.
  9145  // Deprecated: Use NextWithContext() instead.
  9146  func (iter *DdosProtectionPlanListResultIterator) Next() error {
  9147  	return iter.NextWithContext(context.Background())
  9148  }
  9149  
  9150  // NotDone returns true if the enumeration should be started or is not yet complete.
  9151  func (iter DdosProtectionPlanListResultIterator) NotDone() bool {
  9152  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  9153  }
  9154  
  9155  // Response returns the raw server response from the last page request.
  9156  func (iter DdosProtectionPlanListResultIterator) Response() DdosProtectionPlanListResult {
  9157  	return iter.page.Response()
  9158  }
  9159  
  9160  // Value returns the current value or a zero-initialized value if the
  9161  // iterator has advanced beyond the end of the collection.
  9162  func (iter DdosProtectionPlanListResultIterator) Value() DdosProtectionPlan {
  9163  	if !iter.page.NotDone() {
  9164  		return DdosProtectionPlan{}
  9165  	}
  9166  	return iter.page.Values()[iter.i]
  9167  }
  9168  
  9169  // Creates a new instance of the DdosProtectionPlanListResultIterator type.
  9170  func NewDdosProtectionPlanListResultIterator(page DdosProtectionPlanListResultPage) DdosProtectionPlanListResultIterator {
  9171  	return DdosProtectionPlanListResultIterator{page: page}
  9172  }
  9173  
  9174  // IsEmpty returns true if the ListResult contains no values.
  9175  func (dpplr DdosProtectionPlanListResult) IsEmpty() bool {
  9176  	return dpplr.Value == nil || len(*dpplr.Value) == 0
  9177  }
  9178  
  9179  // hasNextLink returns true if the NextLink is not empty.
  9180  func (dpplr DdosProtectionPlanListResult) hasNextLink() bool {
  9181  	return dpplr.NextLink != nil && len(*dpplr.NextLink) != 0
  9182  }
  9183  
  9184  // ddosProtectionPlanListResultPreparer prepares a request to retrieve the next set of results.
  9185  // It returns nil if no more results exist.
  9186  func (dpplr DdosProtectionPlanListResult) ddosProtectionPlanListResultPreparer(ctx context.Context) (*http.Request, error) {
  9187  	if !dpplr.hasNextLink() {
  9188  		return nil, nil
  9189  	}
  9190  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  9191  		autorest.AsJSON(),
  9192  		autorest.AsGet(),
  9193  		autorest.WithBaseURL(to.String(dpplr.NextLink)))
  9194  }
  9195  
  9196  // DdosProtectionPlanListResultPage contains a page of DdosProtectionPlan values.
  9197  type DdosProtectionPlanListResultPage struct {
  9198  	fn    func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)
  9199  	dpplr DdosProtectionPlanListResult
  9200  }
  9201  
  9202  // NextWithContext advances to the next page of values.  If there was an error making
  9203  // the request the page does not advance and the error is returned.
  9204  func (page *DdosProtectionPlanListResultPage) NextWithContext(ctx context.Context) (err error) {
  9205  	if tracing.IsEnabled() {
  9206  		ctx = tracing.StartSpan(ctx, fqdn+"/DdosProtectionPlanListResultPage.NextWithContext")
  9207  		defer func() {
  9208  			sc := -1
  9209  			if page.Response().Response.Response != nil {
  9210  				sc = page.Response().Response.Response.StatusCode
  9211  			}
  9212  			tracing.EndSpan(ctx, sc, err)
  9213  		}()
  9214  	}
  9215  	for {
  9216  		next, err := page.fn(ctx, page.dpplr)
  9217  		if err != nil {
  9218  			return err
  9219  		}
  9220  		page.dpplr = next
  9221  		if !next.hasNextLink() || !next.IsEmpty() {
  9222  			break
  9223  		}
  9224  	}
  9225  	return nil
  9226  }
  9227  
  9228  // Next advances to the next page of values.  If there was an error making
  9229  // the request the page does not advance and the error is returned.
  9230  // Deprecated: Use NextWithContext() instead.
  9231  func (page *DdosProtectionPlanListResultPage) Next() error {
  9232  	return page.NextWithContext(context.Background())
  9233  }
  9234  
  9235  // NotDone returns true if the page enumeration should be started or is not yet complete.
  9236  func (page DdosProtectionPlanListResultPage) NotDone() bool {
  9237  	return !page.dpplr.IsEmpty()
  9238  }
  9239  
  9240  // Response returns the raw server response from the last page request.
  9241  func (page DdosProtectionPlanListResultPage) Response() DdosProtectionPlanListResult {
  9242  	return page.dpplr
  9243  }
  9244  
  9245  // Values returns the slice of values for the current page or nil if there are no values.
  9246  func (page DdosProtectionPlanListResultPage) Values() []DdosProtectionPlan {
  9247  	if page.dpplr.IsEmpty() {
  9248  		return nil
  9249  	}
  9250  	return *page.dpplr.Value
  9251  }
  9252  
  9253  // Creates a new instance of the DdosProtectionPlanListResultPage type.
  9254  func NewDdosProtectionPlanListResultPage(cur DdosProtectionPlanListResult, getNextPage func(context.Context, DdosProtectionPlanListResult) (DdosProtectionPlanListResult, error)) DdosProtectionPlanListResultPage {
  9255  	return DdosProtectionPlanListResultPage{
  9256  		fn:    getNextPage,
  9257  		dpplr: cur,
  9258  	}
  9259  }
  9260  
  9261  // DdosProtectionPlanPropertiesFormat dDoS protection plan properties.
  9262  type DdosProtectionPlanPropertiesFormat struct {
  9263  	// ResourceGUID - READ-ONLY; The resource GUID property of the DDoS protection plan resource. It uniquely identifies the resource, even if the user changes its name or migrate the resource across subscriptions or resource groups.
  9264  	ResourceGUID *string `json:"resourceGuid,omitempty"`
  9265  	// ProvisioningState - READ-ONLY; The provisioning state of the DDoS protection plan resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
  9266  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
  9267  	// VirtualNetworks - READ-ONLY; The list of virtual networks associated with the DDoS protection plan resource. This list is read-only.
  9268  	VirtualNetworks *[]SubResource `json:"virtualNetworks,omitempty"`
  9269  }
  9270  
  9271  // MarshalJSON is the custom marshaler for DdosProtectionPlanPropertiesFormat.
  9272  func (dpppf DdosProtectionPlanPropertiesFormat) MarshalJSON() ([]byte, error) {
  9273  	objectMap := make(map[string]interface{})
  9274  	return json.Marshal(objectMap)
  9275  }
  9276  
  9277  // DdosProtectionPlansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
  9278  // long-running operation.
  9279  type DdosProtectionPlansCreateOrUpdateFuture struct {
  9280  	azure.FutureAPI
  9281  	// Result returns the result of the asynchronous operation.
  9282  	// If the operation has not completed it will return an error.
  9283  	Result func(DdosProtectionPlansClient) (DdosProtectionPlan, error)
  9284  }
  9285  
  9286  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  9287  func (future *DdosProtectionPlansCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
  9288  	var azFuture azure.Future
  9289  	if err := json.Unmarshal(body, &azFuture); err != nil {
  9290  		return err
  9291  	}
  9292  	future.FutureAPI = &azFuture
  9293  	future.Result = future.result
  9294  	return nil
  9295  }
  9296  
  9297  // result is the default implementation for DdosProtectionPlansCreateOrUpdateFuture.Result.
  9298  func (future *DdosProtectionPlansCreateOrUpdateFuture) result(client DdosProtectionPlansClient) (dpp DdosProtectionPlan, err error) {
  9299  	var done bool
  9300  	done, err = future.DoneWithContext(context.Background(), client)
  9301  	if err != nil {
  9302  		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
  9303  		return
  9304  	}
  9305  	if !done {
  9306  		dpp.Response.Response = future.Response()
  9307  		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansCreateOrUpdateFuture")
  9308  		return
  9309  	}
  9310  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
  9311  	if dpp.Response.Response, err = future.GetResult(sender); err == nil && dpp.Response.Response.StatusCode != http.StatusNoContent {
  9312  		dpp, err = client.CreateOrUpdateResponder(dpp.Response.Response)
  9313  		if err != nil {
  9314  			err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansCreateOrUpdateFuture", "Result", dpp.Response.Response, "Failure responding to request")
  9315  		}
  9316  	}
  9317  	return
  9318  }
  9319  
  9320  // DdosProtectionPlansDeleteFuture an abstraction for monitoring and retrieving the results of a
  9321  // long-running operation.
  9322  type DdosProtectionPlansDeleteFuture struct {
  9323  	azure.FutureAPI
  9324  	// Result returns the result of the asynchronous operation.
  9325  	// If the operation has not completed it will return an error.
  9326  	Result func(DdosProtectionPlansClient) (autorest.Response, error)
  9327  }
  9328  
  9329  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  9330  func (future *DdosProtectionPlansDeleteFuture) UnmarshalJSON(body []byte) error {
  9331  	var azFuture azure.Future
  9332  	if err := json.Unmarshal(body, &azFuture); err != nil {
  9333  		return err
  9334  	}
  9335  	future.FutureAPI = &azFuture
  9336  	future.Result = future.result
  9337  	return nil
  9338  }
  9339  
  9340  // result is the default implementation for DdosProtectionPlansDeleteFuture.Result.
  9341  func (future *DdosProtectionPlansDeleteFuture) result(client DdosProtectionPlansClient) (ar autorest.Response, err error) {
  9342  	var done bool
  9343  	done, err = future.DoneWithContext(context.Background(), client)
  9344  	if err != nil {
  9345  		err = autorest.NewErrorWithError(err, "network.DdosProtectionPlansDeleteFuture", "Result", future.Response(), "Polling failure")
  9346  		return
  9347  	}
  9348  	if !done {
  9349  		ar.Response = future.Response()
  9350  		err = azure.NewAsyncOpIncompleteError("network.DdosProtectionPlansDeleteFuture")
  9351  		return
  9352  	}
  9353  	ar.Response = future.Response()
  9354  	return
  9355  }
  9356  
  9357  // DdosSettings contains the DDoS protection settings of the public IP.
  9358  type DdosSettings struct {
  9359  	// DdosCustomPolicy - The DDoS custom policy associated with the public IP.
  9360  	DdosCustomPolicy *SubResource `json:"ddosCustomPolicy,omitempty"`
  9361  	// ProtectionCoverage - The DDoS protection policy customizability of the public IP. Only standard coverage will have the ability to be customized. Possible values include: 'DdosSettingsProtectionCoverageBasic', 'DdosSettingsProtectionCoverageStandard'
  9362  	ProtectionCoverage DdosSettingsProtectionCoverage `json:"protectionCoverage,omitempty"`
  9363  	// ProtectedIP - Enables DDoS protection on the public IP.
  9364  	ProtectedIP *bool `json:"protectedIP,omitempty"`
  9365  }
  9366  
  9367  // Delegation details the service to which the subnet is delegated.
  9368  type Delegation struct {
  9369  	// ServiceDelegationPropertiesFormat - Properties of the subnet.
  9370  	*ServiceDelegationPropertiesFormat `json:"properties,omitempty"`
  9371  	// Name - The name of the resource that is unique within a subnet. This name can be used to access the resource.
  9372  	Name *string `json:"name,omitempty"`
  9373  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  9374  	Etag *string `json:"etag,omitempty"`
  9375  	// ID - Resource ID.
  9376  	ID *string `json:"id,omitempty"`
  9377  }
  9378  
  9379  // MarshalJSON is the custom marshaler for Delegation.
  9380  func (d Delegation) MarshalJSON() ([]byte, error) {
  9381  	objectMap := make(map[string]interface{})
  9382  	if d.ServiceDelegationPropertiesFormat != nil {
  9383  		objectMap["properties"] = d.ServiceDelegationPropertiesFormat
  9384  	}
  9385  	if d.Name != nil {
  9386  		objectMap["name"] = d.Name
  9387  	}
  9388  	if d.ID != nil {
  9389  		objectMap["id"] = d.ID
  9390  	}
  9391  	return json.Marshal(objectMap)
  9392  }
  9393  
  9394  // UnmarshalJSON is the custom unmarshaler for Delegation struct.
  9395  func (d *Delegation) UnmarshalJSON(body []byte) error {
  9396  	var m map[string]*json.RawMessage
  9397  	err := json.Unmarshal(body, &m)
  9398  	if err != nil {
  9399  		return err
  9400  	}
  9401  	for k, v := range m {
  9402  		switch k {
  9403  		case "properties":
  9404  			if v != nil {
  9405  				var serviceDelegationPropertiesFormat ServiceDelegationPropertiesFormat
  9406  				err = json.Unmarshal(*v, &serviceDelegationPropertiesFormat)
  9407  				if err != nil {
  9408  					return err
  9409  				}
  9410  				d.ServiceDelegationPropertiesFormat = &serviceDelegationPropertiesFormat
  9411  			}
  9412  		case "name":
  9413  			if v != nil {
  9414  				var name string
  9415  				err = json.Unmarshal(*v, &name)
  9416  				if err != nil {
  9417  					return err
  9418  				}
  9419  				d.Name = &name
  9420  			}
  9421  		case "etag":
  9422  			if v != nil {
  9423  				var etag string
  9424  				err = json.Unmarshal(*v, &etag)
  9425  				if err != nil {
  9426  					return err
  9427  				}
  9428  				d.Etag = &etag
  9429  			}
  9430  		case "id":
  9431  			if v != nil {
  9432  				var ID string
  9433  				err = json.Unmarshal(*v, &ID)
  9434  				if err != nil {
  9435  					return err
  9436  				}
  9437  				d.ID = &ID
  9438  			}
  9439  		}
  9440  	}
  9441  
  9442  	return nil
  9443  }
  9444  
  9445  // DeleteBastionShareableLinkFuture an abstraction for monitoring and retrieving the results of a
  9446  // long-running operation.
  9447  type DeleteBastionShareableLinkFuture struct {
  9448  	azure.FutureAPI
  9449  	// Result returns the result of the asynchronous operation.
  9450  	// If the operation has not completed it will return an error.
  9451  	Result func(BaseClient) (autorest.Response, error)
  9452  }
  9453  
  9454  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
  9455  func (future *DeleteBastionShareableLinkFuture) UnmarshalJSON(body []byte) error {
  9456  	var azFuture azure.Future
  9457  	if err := json.Unmarshal(body, &azFuture); err != nil {
  9458  		return err
  9459  	}
  9460  	future.FutureAPI = &azFuture
  9461  	future.Result = future.result
  9462  	return nil
  9463  }
  9464  
  9465  // result is the default implementation for DeleteBastionShareableLinkFuture.Result.
  9466  func (future *DeleteBastionShareableLinkFuture) result(client BaseClient) (ar autorest.Response, err error) {
  9467  	var done bool
  9468  	done, err = future.DoneWithContext(context.Background(), client)
  9469  	if err != nil {
  9470  		err = autorest.NewErrorWithError(err, "network.DeleteBastionShareableLinkFuture", "Result", future.Response(), "Polling failure")
  9471  		return
  9472  	}
  9473  	if !done {
  9474  		ar.Response = future.Response()
  9475  		err = azure.NewAsyncOpIncompleteError("network.DeleteBastionShareableLinkFuture")
  9476  		return
  9477  	}
  9478  	ar.Response = future.Response()
  9479  	return
  9480  }
  9481  
  9482  // DeviceProperties list of properties of the device.
  9483  type DeviceProperties struct {
  9484  	// DeviceVendor - Name of the device Vendor.
  9485  	DeviceVendor *string `json:"deviceVendor,omitempty"`
  9486  	// DeviceModel - Model of the device.
  9487  	DeviceModel *string `json:"deviceModel,omitempty"`
  9488  	// LinkSpeedInMbps - Link speed.
  9489  	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
  9490  }
  9491  
  9492  // DhcpOptions dhcpOptions contains an array of DNS servers available to VMs deployed in the virtual
  9493  // network. Standard DHCP option for a subnet overrides VNET DHCP options.
  9494  type DhcpOptions struct {
  9495  	// DNSServers - The list of DNS servers IP addresses.
  9496  	DNSServers *[]string `json:"dnsServers,omitempty"`
  9497  }
  9498  
  9499  // Dimension dimension of the metric.
  9500  type Dimension struct {
  9501  	// Name - The name of the dimension.
  9502  	Name *string `json:"name,omitempty"`
  9503  	// DisplayName - The display name of the dimension.
  9504  	DisplayName *string `json:"displayName,omitempty"`
  9505  	// InternalName - The internal name of the dimension.
  9506  	InternalName *string `json:"internalName,omitempty"`
  9507  }
  9508  
  9509  // DNSNameAvailabilityResult response for the CheckDnsNameAvailability API service call.
  9510  type DNSNameAvailabilityResult struct {
  9511  	autorest.Response `json:"-"`
  9512  	// Available - Domain availability (True/False).
  9513  	Available *bool `json:"available,omitempty"`
  9514  }
  9515  
  9516  // EffectiveNetworkSecurityGroup effective network security group.
  9517  type EffectiveNetworkSecurityGroup struct {
  9518  	// NetworkSecurityGroup - The ID of network security group that is applied.
  9519  	NetworkSecurityGroup *SubResource `json:"networkSecurityGroup,omitempty"`
  9520  	// Association - Associated resources.
  9521  	Association *EffectiveNetworkSecurityGroupAssociation `json:"association,omitempty"`
  9522  	// EffectiveSecurityRules - A collection of effective security rules.
  9523  	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
  9524  	// TagMap - Mapping of tags to list of IP Addresses included within the tag.
  9525  	TagMap map[string][]string `json:"tagMap"`
  9526  }
  9527  
  9528  // MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroup.
  9529  func (ensg EffectiveNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
  9530  	objectMap := make(map[string]interface{})
  9531  	if ensg.NetworkSecurityGroup != nil {
  9532  		objectMap["networkSecurityGroup"] = ensg.NetworkSecurityGroup
  9533  	}
  9534  	if ensg.Association != nil {
  9535  		objectMap["association"] = ensg.Association
  9536  	}
  9537  	if ensg.EffectiveSecurityRules != nil {
  9538  		objectMap["effectiveSecurityRules"] = ensg.EffectiveSecurityRules
  9539  	}
  9540  	if ensg.TagMap != nil {
  9541  		objectMap["tagMap"] = ensg.TagMap
  9542  	}
  9543  	return json.Marshal(objectMap)
  9544  }
  9545  
  9546  // EffectiveNetworkSecurityGroupAssociation the effective network security group association.
  9547  type EffectiveNetworkSecurityGroupAssociation struct {
  9548  	// Subnet - The ID of the subnet if assigned.
  9549  	Subnet *SubResource `json:"subnet,omitempty"`
  9550  	// NetworkInterface - The ID of the network interface if assigned.
  9551  	NetworkInterface *SubResource `json:"networkInterface,omitempty"`
  9552  }
  9553  
  9554  // EffectiveNetworkSecurityGroupListResult response for list effective network security groups API service
  9555  // call.
  9556  type EffectiveNetworkSecurityGroupListResult struct {
  9557  	autorest.Response `json:"-"`
  9558  	// Value - A list of effective network security groups.
  9559  	Value *[]EffectiveNetworkSecurityGroup `json:"value,omitempty"`
  9560  	// NextLink - READ-ONLY; The URL to get the next set of results.
  9561  	NextLink *string `json:"nextLink,omitempty"`
  9562  }
  9563  
  9564  // MarshalJSON is the custom marshaler for EffectiveNetworkSecurityGroupListResult.
  9565  func (ensglr EffectiveNetworkSecurityGroupListResult) MarshalJSON() ([]byte, error) {
  9566  	objectMap := make(map[string]interface{})
  9567  	if ensglr.Value != nil {
  9568  		objectMap["value"] = ensglr.Value
  9569  	}
  9570  	return json.Marshal(objectMap)
  9571  }
  9572  
  9573  // EffectiveNetworkSecurityRule effective network security rules.
  9574  type EffectiveNetworkSecurityRule struct {
  9575  	// Name - The name of the security rule specified by the user (if created by the user).
  9576  	Name *string `json:"name,omitempty"`
  9577  	// Protocol - The network protocol this rule applies to. Possible values include: 'EffectiveSecurityRuleProtocolTCP', 'EffectiveSecurityRuleProtocolUDP', 'EffectiveSecurityRuleProtocolAll'
  9578  	Protocol EffectiveSecurityRuleProtocol `json:"protocol,omitempty"`
  9579  	// SourcePortRange - The source port or range.
  9580  	SourcePortRange *string `json:"sourcePortRange,omitempty"`
  9581  	// DestinationPortRange - The destination port or range.
  9582  	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
  9583  	// SourcePortRanges - The source port ranges. Expected values include a single integer between 0 and 65535, a range using '-' as separator (e.g. 100-400), or an asterisk (*).
  9584  	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
  9585  	// DestinationPortRanges - The destination port ranges. Expected values include a single integer between 0 and 65535, a range using '-' as separator (e.g. 100-400), or an asterisk (*).
  9586  	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
  9587  	// SourceAddressPrefix - The source address prefix.
  9588  	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
  9589  	// DestinationAddressPrefix - The destination address prefix.
  9590  	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
  9591  	// SourceAddressPrefixes - The source address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
  9592  	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
  9593  	// DestinationAddressPrefixes - The destination address prefixes. Expected values include CIDR IP ranges, Default Tags (VirtualNetwork, AzureLoadBalancer, Internet), System Tags, and the asterisk (*).
  9594  	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
  9595  	// ExpandedSourceAddressPrefix - The expanded source address prefix.
  9596  	ExpandedSourceAddressPrefix *[]string `json:"expandedSourceAddressPrefix,omitempty"`
  9597  	// ExpandedDestinationAddressPrefix - Expanded destination address prefix.
  9598  	ExpandedDestinationAddressPrefix *[]string `json:"expandedDestinationAddressPrefix,omitempty"`
  9599  	// Access - Whether network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
  9600  	Access SecurityRuleAccess `json:"access,omitempty"`
  9601  	// Priority - The priority of the rule.
  9602  	Priority *int32 `json:"priority,omitempty"`
  9603  	// Direction - The direction of the rule. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
  9604  	Direction SecurityRuleDirection `json:"direction,omitempty"`
  9605  }
  9606  
  9607  // EffectiveRoute effective Route.
  9608  type EffectiveRoute struct {
  9609  	// Name - The name of the user defined route. This is optional.
  9610  	Name *string `json:"name,omitempty"`
  9611  	// DisableBgpRoutePropagation - If true, on-premises routes are not propagated to the network interfaces in the subnet.
  9612  	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
  9613  	// Source - Who created the route. Possible values include: 'EffectiveRouteSourceUnknown', 'EffectiveRouteSourceUser', 'EffectiveRouteSourceVirtualNetworkGateway', 'EffectiveRouteSourceDefault'
  9614  	Source EffectiveRouteSource `json:"source,omitempty"`
  9615  	// State - The value of effective route. Possible values include: 'Active', 'Invalid'
  9616  	State EffectiveRouteState `json:"state,omitempty"`
  9617  	// AddressPrefix - The address prefixes of the effective routes in CIDR notation.
  9618  	AddressPrefix *[]string `json:"addressPrefix,omitempty"`
  9619  	// NextHopIPAddress - The IP address of the next hop of the effective route.
  9620  	NextHopIPAddress *[]string `json:"nextHopIpAddress,omitempty"`
  9621  	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
  9622  	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
  9623  }
  9624  
  9625  // EffectiveRouteListResult response for list effective route API service call.
  9626  type EffectiveRouteListResult struct {
  9627  	autorest.Response `json:"-"`
  9628  	// Value - A list of effective routes.
  9629  	Value *[]EffectiveRoute `json:"value,omitempty"`
  9630  	// NextLink - READ-ONLY; The URL to get the next set of results.
  9631  	NextLink *string `json:"nextLink,omitempty"`
  9632  }
  9633  
  9634  // MarshalJSON is the custom marshaler for EffectiveRouteListResult.
  9635  func (erlr EffectiveRouteListResult) MarshalJSON() ([]byte, error) {
  9636  	objectMap := make(map[string]interface{})
  9637  	if erlr.Value != nil {
  9638  		objectMap["value"] = erlr.Value
  9639  	}
  9640  	return json.Marshal(objectMap)
  9641  }
  9642  
  9643  // EndpointServiceResult endpoint service.
  9644  type EndpointServiceResult struct {
  9645  	// Name - READ-ONLY; Name of the endpoint service.
  9646  	Name *string `json:"name,omitempty"`
  9647  	// Type - READ-ONLY; Type of the endpoint service.
  9648  	Type *string `json:"type,omitempty"`
  9649  	// ID - Resource ID.
  9650  	ID *string `json:"id,omitempty"`
  9651  }
  9652  
  9653  // MarshalJSON is the custom marshaler for EndpointServiceResult.
  9654  func (esr EndpointServiceResult) MarshalJSON() ([]byte, error) {
  9655  	objectMap := make(map[string]interface{})
  9656  	if esr.ID != nil {
  9657  		objectMap["id"] = esr.ID
  9658  	}
  9659  	return json.Marshal(objectMap)
  9660  }
  9661  
  9662  // EndpointServicesListResult response for the ListAvailableEndpointServices API service call.
  9663  type EndpointServicesListResult struct {
  9664  	autorest.Response `json:"-"`
  9665  	// Value - List of available endpoint services in a region.
  9666  	Value *[]EndpointServiceResult `json:"value,omitempty"`
  9667  	// NextLink - The URL to get the next set of results.
  9668  	NextLink *string `json:"nextLink,omitempty"`
  9669  }
  9670  
  9671  // EndpointServicesListResultIterator provides access to a complete listing of EndpointServiceResult
  9672  // values.
  9673  type EndpointServicesListResultIterator struct {
  9674  	i    int
  9675  	page EndpointServicesListResultPage
  9676  }
  9677  
  9678  // NextWithContext advances to the next value.  If there was an error making
  9679  // the request the iterator does not advance and the error is returned.
  9680  func (iter *EndpointServicesListResultIterator) NextWithContext(ctx context.Context) (err error) {
  9681  	if tracing.IsEnabled() {
  9682  		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultIterator.NextWithContext")
  9683  		defer func() {
  9684  			sc := -1
  9685  			if iter.Response().Response.Response != nil {
  9686  				sc = iter.Response().Response.Response.StatusCode
  9687  			}
  9688  			tracing.EndSpan(ctx, sc, err)
  9689  		}()
  9690  	}
  9691  	iter.i++
  9692  	if iter.i < len(iter.page.Values()) {
  9693  		return nil
  9694  	}
  9695  	err = iter.page.NextWithContext(ctx)
  9696  	if err != nil {
  9697  		iter.i--
  9698  		return err
  9699  	}
  9700  	iter.i = 0
  9701  	return nil
  9702  }
  9703  
  9704  // Next advances to the next value.  If there was an error making
  9705  // the request the iterator does not advance and the error is returned.
  9706  // Deprecated: Use NextWithContext() instead.
  9707  func (iter *EndpointServicesListResultIterator) Next() error {
  9708  	return iter.NextWithContext(context.Background())
  9709  }
  9710  
  9711  // NotDone returns true if the enumeration should be started or is not yet complete.
  9712  func (iter EndpointServicesListResultIterator) NotDone() bool {
  9713  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
  9714  }
  9715  
  9716  // Response returns the raw server response from the last page request.
  9717  func (iter EndpointServicesListResultIterator) Response() EndpointServicesListResult {
  9718  	return iter.page.Response()
  9719  }
  9720  
  9721  // Value returns the current value or a zero-initialized value if the
  9722  // iterator has advanced beyond the end of the collection.
  9723  func (iter EndpointServicesListResultIterator) Value() EndpointServiceResult {
  9724  	if !iter.page.NotDone() {
  9725  		return EndpointServiceResult{}
  9726  	}
  9727  	return iter.page.Values()[iter.i]
  9728  }
  9729  
  9730  // Creates a new instance of the EndpointServicesListResultIterator type.
  9731  func NewEndpointServicesListResultIterator(page EndpointServicesListResultPage) EndpointServicesListResultIterator {
  9732  	return EndpointServicesListResultIterator{page: page}
  9733  }
  9734  
  9735  // IsEmpty returns true if the ListResult contains no values.
  9736  func (eslr EndpointServicesListResult) IsEmpty() bool {
  9737  	return eslr.Value == nil || len(*eslr.Value) == 0
  9738  }
  9739  
  9740  // hasNextLink returns true if the NextLink is not empty.
  9741  func (eslr EndpointServicesListResult) hasNextLink() bool {
  9742  	return eslr.NextLink != nil && len(*eslr.NextLink) != 0
  9743  }
  9744  
  9745  // endpointServicesListResultPreparer prepares a request to retrieve the next set of results.
  9746  // It returns nil if no more results exist.
  9747  func (eslr EndpointServicesListResult) endpointServicesListResultPreparer(ctx context.Context) (*http.Request, error) {
  9748  	if !eslr.hasNextLink() {
  9749  		return nil, nil
  9750  	}
  9751  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
  9752  		autorest.AsJSON(),
  9753  		autorest.AsGet(),
  9754  		autorest.WithBaseURL(to.String(eslr.NextLink)))
  9755  }
  9756  
  9757  // EndpointServicesListResultPage contains a page of EndpointServiceResult values.
  9758  type EndpointServicesListResultPage struct {
  9759  	fn   func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)
  9760  	eslr EndpointServicesListResult
  9761  }
  9762  
  9763  // NextWithContext advances to the next page of values.  If there was an error making
  9764  // the request the page does not advance and the error is returned.
  9765  func (page *EndpointServicesListResultPage) NextWithContext(ctx context.Context) (err error) {
  9766  	if tracing.IsEnabled() {
  9767  		ctx = tracing.StartSpan(ctx, fqdn+"/EndpointServicesListResultPage.NextWithContext")
  9768  		defer func() {
  9769  			sc := -1
  9770  			if page.Response().Response.Response != nil {
  9771  				sc = page.Response().Response.Response.StatusCode
  9772  			}
  9773  			tracing.EndSpan(ctx, sc, err)
  9774  		}()
  9775  	}
  9776  	for {
  9777  		next, err := page.fn(ctx, page.eslr)
  9778  		if err != nil {
  9779  			return err
  9780  		}
  9781  		page.eslr = next
  9782  		if !next.hasNextLink() || !next.IsEmpty() {
  9783  			break
  9784  		}
  9785  	}
  9786  	return nil
  9787  }
  9788  
  9789  // Next advances to the next page of values.  If there was an error making
  9790  // the request the page does not advance and the error is returned.
  9791  // Deprecated: Use NextWithContext() instead.
  9792  func (page *EndpointServicesListResultPage) Next() error {
  9793  	return page.NextWithContext(context.Background())
  9794  }
  9795  
  9796  // NotDone returns true if the page enumeration should be started or is not yet complete.
  9797  func (page EndpointServicesListResultPage) NotDone() bool {
  9798  	return !page.eslr.IsEmpty()
  9799  }
  9800  
  9801  // Response returns the raw server response from the last page request.
  9802  func (page EndpointServicesListResultPage) Response() EndpointServicesListResult {
  9803  	return page.eslr
  9804  }
  9805  
  9806  // Values returns the slice of values for the current page or nil if there are no values.
  9807  func (page EndpointServicesListResultPage) Values() []EndpointServiceResult {
  9808  	if page.eslr.IsEmpty() {
  9809  		return nil
  9810  	}
  9811  	return *page.eslr.Value
  9812  }
  9813  
  9814  // Creates a new instance of the EndpointServicesListResultPage type.
  9815  func NewEndpointServicesListResultPage(cur EndpointServicesListResult, getNextPage func(context.Context, EndpointServicesListResult) (EndpointServicesListResult, error)) EndpointServicesListResultPage {
  9816  	return EndpointServicesListResultPage{
  9817  		fn:   getNextPage,
  9818  		eslr: cur,
  9819  	}
  9820  }
  9821  
  9822  // Error common error representation.
  9823  type Error struct {
  9824  	// Code - Error code.
  9825  	Code *string `json:"code,omitempty"`
  9826  	// Message - Error message.
  9827  	Message *string `json:"message,omitempty"`
  9828  	// Target - Error target.
  9829  	Target *string `json:"target,omitempty"`
  9830  	// Details - Error details.
  9831  	Details *[]ErrorDetails `json:"details,omitempty"`
  9832  	// InnerError - Inner error message.
  9833  	InnerError *string `json:"innerError,omitempty"`
  9834  }
  9835  
  9836  // ErrorDetails common error details representation.
  9837  type ErrorDetails struct {
  9838  	// Code - Error code.
  9839  	Code *string `json:"code,omitempty"`
  9840  	// Target - Error target.
  9841  	Target *string `json:"target,omitempty"`
  9842  	// Message - Error message.
  9843  	Message *string `json:"message,omitempty"`
  9844  }
  9845  
  9846  // ErrorResponse the error object.
  9847  type ErrorResponse struct {
  9848  	// Error - The error details object.
  9849  	Error *ErrorDetails `json:"error,omitempty"`
  9850  }
  9851  
  9852  // EvaluatedNetworkSecurityGroup results of network security group evaluation.
  9853  type EvaluatedNetworkSecurityGroup struct {
  9854  	// NetworkSecurityGroupID - Network security group ID.
  9855  	NetworkSecurityGroupID *string `json:"networkSecurityGroupId,omitempty"`
  9856  	// AppliedTo - Resource ID of nic or subnet to which network security group is applied.
  9857  	AppliedTo *string `json:"appliedTo,omitempty"`
  9858  	// MatchedRule - Matched network security rule.
  9859  	MatchedRule *MatchedRule `json:"matchedRule,omitempty"`
  9860  	// RulesEvaluationResult - READ-ONLY; List of network security rules evaluation results.
  9861  	RulesEvaluationResult *[]SecurityRulesEvaluationResult `json:"rulesEvaluationResult,omitempty"`
  9862  }
  9863  
  9864  // MarshalJSON is the custom marshaler for EvaluatedNetworkSecurityGroup.
  9865  func (ensg EvaluatedNetworkSecurityGroup) MarshalJSON() ([]byte, error) {
  9866  	objectMap := make(map[string]interface{})
  9867  	if ensg.NetworkSecurityGroupID != nil {
  9868  		objectMap["networkSecurityGroupId"] = ensg.NetworkSecurityGroupID
  9869  	}
  9870  	if ensg.AppliedTo != nil {
  9871  		objectMap["appliedTo"] = ensg.AppliedTo
  9872  	}
  9873  	if ensg.MatchedRule != nil {
  9874  		objectMap["matchedRule"] = ensg.MatchedRule
  9875  	}
  9876  	return json.Marshal(objectMap)
  9877  }
  9878  
  9879  // ExpressRouteCircuit expressRouteCircuit resource.
  9880  type ExpressRouteCircuit struct {
  9881  	autorest.Response `json:"-"`
  9882  	// Sku - The SKU.
  9883  	Sku *ExpressRouteCircuitSku `json:"sku,omitempty"`
  9884  	// ExpressRouteCircuitPropertiesFormat - Properties of the express route circuit.
  9885  	*ExpressRouteCircuitPropertiesFormat `json:"properties,omitempty"`
  9886  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
  9887  	Etag *string `json:"etag,omitempty"`
  9888  	// ID - Resource ID.
  9889  	ID *string `json:"id,omitempty"`
  9890  	// Name - READ-ONLY; Resource name.
  9891  	Name *string `json:"name,omitempty"`
  9892  	// Type - READ-ONLY; Resource type.
  9893  	Type *string `json:"type,omitempty"`
  9894  	// Location - Resource location.
  9895  	Location *string `json:"location,omitempty"`
  9896  	// Tags - Resource tags.
  9897  	Tags map[string]*string `json:"tags"`
  9898  }
  9899  
  9900  // MarshalJSON is the custom marshaler for ExpressRouteCircuit.
  9901  func (erc ExpressRouteCircuit) MarshalJSON() ([]byte, error) {
  9902  	objectMap := make(map[string]interface{})
  9903  	if erc.Sku != nil {
  9904  		objectMap["sku"] = erc.Sku
  9905  	}
  9906  	if erc.ExpressRouteCircuitPropertiesFormat != nil {
  9907  		objectMap["properties"] = erc.ExpressRouteCircuitPropertiesFormat
  9908  	}
  9909  	if erc.ID != nil {
  9910  		objectMap["id"] = erc.ID
  9911  	}
  9912  	if erc.Location != nil {
  9913  		objectMap["location"] = erc.Location
  9914  	}
  9915  	if erc.Tags != nil {
  9916  		objectMap["tags"] = erc.Tags
  9917  	}
  9918  	return json.Marshal(objectMap)
  9919  }
  9920  
  9921  // UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuit struct.
  9922  func (erc *ExpressRouteCircuit) UnmarshalJSON(body []byte) error {
  9923  	var m map[string]*json.RawMessage
  9924  	err := json.Unmarshal(body, &m)
  9925  	if err != nil {
  9926  		return err
  9927  	}
  9928  	for k, v := range m {
  9929  		switch k {
  9930  		case "sku":
  9931  			if v != nil {
  9932  				var sku ExpressRouteCircuitSku
  9933  				err = json.Unmarshal(*v, &sku)
  9934  				if err != nil {
  9935  					return err
  9936  				}
  9937  				erc.Sku = &sku
  9938  			}
  9939  		case "properties":
  9940  			if v != nil {
  9941  				var expressRouteCircuitPropertiesFormat ExpressRouteCircuitPropertiesFormat
  9942  				err = json.Unmarshal(*v, &expressRouteCircuitPropertiesFormat)
  9943  				if err != nil {
  9944  					return err
  9945  				}
  9946  				erc.ExpressRouteCircuitPropertiesFormat = &expressRouteCircuitPropertiesFormat
  9947  			}
  9948  		case "etag":
  9949  			if v != nil {
  9950  				var etag string
  9951  				err = json.Unmarshal(*v, &etag)
  9952  				if err != nil {
  9953  					return err
  9954  				}
  9955  				erc.Etag = &etag
  9956  			}
  9957  		case "id":
  9958  			if v != nil {
  9959  				var ID string
  9960  				err = json.Unmarshal(*v, &ID)
  9961  				if err != nil {
  9962  					return err
  9963  				}
  9964  				erc.ID = &ID
  9965  			}
  9966  		case "name":
  9967  			if v != nil {
  9968  				var name string
  9969  				err = json.Unmarshal(*v, &name)
  9970  				if err != nil {
  9971  					return err
  9972  				}
  9973  				erc.Name = &name
  9974  			}
  9975  		case "type":
  9976  			if v != nil {
  9977  				var typeVar string
  9978  				err = json.Unmarshal(*v, &typeVar)
  9979  				if err != nil {
  9980  					return err
  9981  				}
  9982  				erc.Type = &typeVar
  9983  			}
  9984  		case "location":
  9985  			if v != nil {
  9986  				var location string
  9987  				err = json.Unmarshal(*v, &location)
  9988  				if err != nil {
  9989  					return err
  9990  				}
  9991  				erc.Location = &location
  9992  			}
  9993  		case "tags":
  9994  			if v != nil {
  9995  				var tags map[string]*string
  9996  				err = json.Unmarshal(*v, &tags)
  9997  				if err != nil {
  9998  					return err
  9999  				}
 10000  				erc.Tags = tags
 10001  			}
 10002  		}
 10003  	}
 10004  
 10005  	return nil
 10006  }
 10007  
 10008  // ExpressRouteCircuitArpTable the ARP table associated with the ExpressRouteCircuit.
 10009  type ExpressRouteCircuitArpTable struct {
 10010  	// Age - Entry age in minutes.
 10011  	Age *int32 `json:"age,omitempty"`
 10012  	// Interface - Interface address.
 10013  	Interface *string `json:"interface,omitempty"`
 10014  	// IPAddress - The IP address.
 10015  	IPAddress *string `json:"ipAddress,omitempty"`
 10016  	// MacAddress - The MAC address.
 10017  	MacAddress *string `json:"macAddress,omitempty"`
 10018  }
 10019  
 10020  // ExpressRouteCircuitAuthorization authorization in an ExpressRouteCircuit resource.
 10021  type ExpressRouteCircuitAuthorization struct {
 10022  	autorest.Response `json:"-"`
 10023  	// AuthorizationPropertiesFormat - Properties of the express route circuit authorization.
 10024  	*AuthorizationPropertiesFormat `json:"properties,omitempty"`
 10025  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 10026  	Name *string `json:"name,omitempty"`
 10027  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 10028  	Etag *string `json:"etag,omitempty"`
 10029  	// Type - READ-ONLY; Type of the resource.
 10030  	Type *string `json:"type,omitempty"`
 10031  	// ID - Resource ID.
 10032  	ID *string `json:"id,omitempty"`
 10033  }
 10034  
 10035  // MarshalJSON is the custom marshaler for ExpressRouteCircuitAuthorization.
 10036  func (erca ExpressRouteCircuitAuthorization) MarshalJSON() ([]byte, error) {
 10037  	objectMap := make(map[string]interface{})
 10038  	if erca.AuthorizationPropertiesFormat != nil {
 10039  		objectMap["properties"] = erca.AuthorizationPropertiesFormat
 10040  	}
 10041  	if erca.Name != nil {
 10042  		objectMap["name"] = erca.Name
 10043  	}
 10044  	if erca.ID != nil {
 10045  		objectMap["id"] = erca.ID
 10046  	}
 10047  	return json.Marshal(objectMap)
 10048  }
 10049  
 10050  // UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitAuthorization struct.
 10051  func (erca *ExpressRouteCircuitAuthorization) UnmarshalJSON(body []byte) error {
 10052  	var m map[string]*json.RawMessage
 10053  	err := json.Unmarshal(body, &m)
 10054  	if err != nil {
 10055  		return err
 10056  	}
 10057  	for k, v := range m {
 10058  		switch k {
 10059  		case "properties":
 10060  			if v != nil {
 10061  				var authorizationPropertiesFormat AuthorizationPropertiesFormat
 10062  				err = json.Unmarshal(*v, &authorizationPropertiesFormat)
 10063  				if err != nil {
 10064  					return err
 10065  				}
 10066  				erca.AuthorizationPropertiesFormat = &authorizationPropertiesFormat
 10067  			}
 10068  		case "name":
 10069  			if v != nil {
 10070  				var name string
 10071  				err = json.Unmarshal(*v, &name)
 10072  				if err != nil {
 10073  					return err
 10074  				}
 10075  				erca.Name = &name
 10076  			}
 10077  		case "etag":
 10078  			if v != nil {
 10079  				var etag string
 10080  				err = json.Unmarshal(*v, &etag)
 10081  				if err != nil {
 10082  					return err
 10083  				}
 10084  				erca.Etag = &etag
 10085  			}
 10086  		case "type":
 10087  			if v != nil {
 10088  				var typeVar string
 10089  				err = json.Unmarshal(*v, &typeVar)
 10090  				if err != nil {
 10091  					return err
 10092  				}
 10093  				erca.Type = &typeVar
 10094  			}
 10095  		case "id":
 10096  			if v != nil {
 10097  				var ID string
 10098  				err = json.Unmarshal(*v, &ID)
 10099  				if err != nil {
 10100  					return err
 10101  				}
 10102  				erca.ID = &ID
 10103  			}
 10104  		}
 10105  	}
 10106  
 10107  	return nil
 10108  }
 10109  
 10110  // ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
 10111  // results of a long-running operation.
 10112  type ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture struct {
 10113  	azure.FutureAPI
 10114  	// Result returns the result of the asynchronous operation.
 10115  	// If the operation has not completed it will return an error.
 10116  	Result func(ExpressRouteCircuitAuthorizationsClient) (ExpressRouteCircuitAuthorization, error)
 10117  }
 10118  
 10119  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 10120  func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 10121  	var azFuture azure.Future
 10122  	if err := json.Unmarshal(body, &azFuture); err != nil {
 10123  		return err
 10124  	}
 10125  	future.FutureAPI = &azFuture
 10126  	future.Result = future.result
 10127  	return nil
 10128  }
 10129  
 10130  // result is the default implementation for ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture.Result.
 10131  func (future *ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture) result(client ExpressRouteCircuitAuthorizationsClient) (erca ExpressRouteCircuitAuthorization, err error) {
 10132  	var done bool
 10133  	done, err = future.DoneWithContext(context.Background(), client)
 10134  	if err != nil {
 10135  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 10136  		return
 10137  	}
 10138  	if !done {
 10139  		erca.Response.Response = future.Response()
 10140  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture")
 10141  		return
 10142  	}
 10143  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 10144  	if erca.Response.Response, err = future.GetResult(sender); err == nil && erca.Response.Response.StatusCode != http.StatusNoContent {
 10145  		erca, err = client.CreateOrUpdateResponder(erca.Response.Response)
 10146  		if err != nil {
 10147  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsCreateOrUpdateFuture", "Result", erca.Response.Response, "Failure responding to request")
 10148  		}
 10149  	}
 10150  	return
 10151  }
 10152  
 10153  // ExpressRouteCircuitAuthorizationsDeleteFuture an abstraction for monitoring and retrieving the results
 10154  // of a long-running operation.
 10155  type ExpressRouteCircuitAuthorizationsDeleteFuture struct {
 10156  	azure.FutureAPI
 10157  	// Result returns the result of the asynchronous operation.
 10158  	// If the operation has not completed it will return an error.
 10159  	Result func(ExpressRouteCircuitAuthorizationsClient) (autorest.Response, error)
 10160  }
 10161  
 10162  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 10163  func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) UnmarshalJSON(body []byte) error {
 10164  	var azFuture azure.Future
 10165  	if err := json.Unmarshal(body, &azFuture); err != nil {
 10166  		return err
 10167  	}
 10168  	future.FutureAPI = &azFuture
 10169  	future.Result = future.result
 10170  	return nil
 10171  }
 10172  
 10173  // result is the default implementation for ExpressRouteCircuitAuthorizationsDeleteFuture.Result.
 10174  func (future *ExpressRouteCircuitAuthorizationsDeleteFuture) result(client ExpressRouteCircuitAuthorizationsClient) (ar autorest.Response, err error) {
 10175  	var done bool
 10176  	done, err = future.DoneWithContext(context.Background(), client)
 10177  	if err != nil {
 10178  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitAuthorizationsDeleteFuture", "Result", future.Response(), "Polling failure")
 10179  		return
 10180  	}
 10181  	if !done {
 10182  		ar.Response = future.Response()
 10183  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitAuthorizationsDeleteFuture")
 10184  		return
 10185  	}
 10186  	ar.Response = future.Response()
 10187  	return
 10188  }
 10189  
 10190  // ExpressRouteCircuitConnection express Route Circuit Connection in an ExpressRouteCircuitPeering
 10191  // resource.
 10192  type ExpressRouteCircuitConnection struct {
 10193  	autorest.Response `json:"-"`
 10194  	// ExpressRouteCircuitConnectionPropertiesFormat - Properties of the express route circuit connection.
 10195  	*ExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
 10196  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 10197  	Name *string `json:"name,omitempty"`
 10198  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 10199  	Etag *string `json:"etag,omitempty"`
 10200  	// Type - READ-ONLY; Type of the resource.
 10201  	Type *string `json:"type,omitempty"`
 10202  	// ID - Resource ID.
 10203  	ID *string `json:"id,omitempty"`
 10204  }
 10205  
 10206  // MarshalJSON is the custom marshaler for ExpressRouteCircuitConnection.
 10207  func (ercc ExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
 10208  	objectMap := make(map[string]interface{})
 10209  	if ercc.ExpressRouteCircuitConnectionPropertiesFormat != nil {
 10210  		objectMap["properties"] = ercc.ExpressRouteCircuitConnectionPropertiesFormat
 10211  	}
 10212  	if ercc.Name != nil {
 10213  		objectMap["name"] = ercc.Name
 10214  	}
 10215  	if ercc.ID != nil {
 10216  		objectMap["id"] = ercc.ID
 10217  	}
 10218  	return json.Marshal(objectMap)
 10219  }
 10220  
 10221  // UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitConnection struct.
 10222  func (ercc *ExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
 10223  	var m map[string]*json.RawMessage
 10224  	err := json.Unmarshal(body, &m)
 10225  	if err != nil {
 10226  		return err
 10227  	}
 10228  	for k, v := range m {
 10229  		switch k {
 10230  		case "properties":
 10231  			if v != nil {
 10232  				var expressRouteCircuitConnectionPropertiesFormat ExpressRouteCircuitConnectionPropertiesFormat
 10233  				err = json.Unmarshal(*v, &expressRouteCircuitConnectionPropertiesFormat)
 10234  				if err != nil {
 10235  					return err
 10236  				}
 10237  				ercc.ExpressRouteCircuitConnectionPropertiesFormat = &expressRouteCircuitConnectionPropertiesFormat
 10238  			}
 10239  		case "name":
 10240  			if v != nil {
 10241  				var name string
 10242  				err = json.Unmarshal(*v, &name)
 10243  				if err != nil {
 10244  					return err
 10245  				}
 10246  				ercc.Name = &name
 10247  			}
 10248  		case "etag":
 10249  			if v != nil {
 10250  				var etag string
 10251  				err = json.Unmarshal(*v, &etag)
 10252  				if err != nil {
 10253  					return err
 10254  				}
 10255  				ercc.Etag = &etag
 10256  			}
 10257  		case "type":
 10258  			if v != nil {
 10259  				var typeVar string
 10260  				err = json.Unmarshal(*v, &typeVar)
 10261  				if err != nil {
 10262  					return err
 10263  				}
 10264  				ercc.Type = &typeVar
 10265  			}
 10266  		case "id":
 10267  			if v != nil {
 10268  				var ID string
 10269  				err = json.Unmarshal(*v, &ID)
 10270  				if err != nil {
 10271  					return err
 10272  				}
 10273  				ercc.ID = &ID
 10274  			}
 10275  		}
 10276  	}
 10277  
 10278  	return nil
 10279  }
 10280  
 10281  // ExpressRouteCircuitConnectionListResult response for ListConnections API service call retrieves all
 10282  // global reach connections that belongs to a Private Peering for an ExpressRouteCircuit.
 10283  type ExpressRouteCircuitConnectionListResult struct {
 10284  	autorest.Response `json:"-"`
 10285  	// Value - The global reach connection associated with Private Peering in an ExpressRoute Circuit.
 10286  	Value *[]ExpressRouteCircuitConnection `json:"value,omitempty"`
 10287  	// NextLink - The URL to get the next set of results.
 10288  	NextLink *string `json:"nextLink,omitempty"`
 10289  }
 10290  
 10291  // ExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
 10292  // ExpressRouteCircuitConnection values.
 10293  type ExpressRouteCircuitConnectionListResultIterator struct {
 10294  	i    int
 10295  	page ExpressRouteCircuitConnectionListResultPage
 10296  }
 10297  
 10298  // NextWithContext advances to the next value.  If there was an error making
 10299  // the request the iterator does not advance and the error is returned.
 10300  func (iter *ExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
 10301  	if tracing.IsEnabled() {
 10302  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultIterator.NextWithContext")
 10303  		defer func() {
 10304  			sc := -1
 10305  			if iter.Response().Response.Response != nil {
 10306  				sc = iter.Response().Response.Response.StatusCode
 10307  			}
 10308  			tracing.EndSpan(ctx, sc, err)
 10309  		}()
 10310  	}
 10311  	iter.i++
 10312  	if iter.i < len(iter.page.Values()) {
 10313  		return nil
 10314  	}
 10315  	err = iter.page.NextWithContext(ctx)
 10316  	if err != nil {
 10317  		iter.i--
 10318  		return err
 10319  	}
 10320  	iter.i = 0
 10321  	return nil
 10322  }
 10323  
 10324  // Next advances to the next value.  If there was an error making
 10325  // the request the iterator does not advance and the error is returned.
 10326  // Deprecated: Use NextWithContext() instead.
 10327  func (iter *ExpressRouteCircuitConnectionListResultIterator) Next() error {
 10328  	return iter.NextWithContext(context.Background())
 10329  }
 10330  
 10331  // NotDone returns true if the enumeration should be started or is not yet complete.
 10332  func (iter ExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
 10333  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 10334  }
 10335  
 10336  // Response returns the raw server response from the last page request.
 10337  func (iter ExpressRouteCircuitConnectionListResultIterator) Response() ExpressRouteCircuitConnectionListResult {
 10338  	return iter.page.Response()
 10339  }
 10340  
 10341  // Value returns the current value or a zero-initialized value if the
 10342  // iterator has advanced beyond the end of the collection.
 10343  func (iter ExpressRouteCircuitConnectionListResultIterator) Value() ExpressRouteCircuitConnection {
 10344  	if !iter.page.NotDone() {
 10345  		return ExpressRouteCircuitConnection{}
 10346  	}
 10347  	return iter.page.Values()[iter.i]
 10348  }
 10349  
 10350  // Creates a new instance of the ExpressRouteCircuitConnectionListResultIterator type.
 10351  func NewExpressRouteCircuitConnectionListResultIterator(page ExpressRouteCircuitConnectionListResultPage) ExpressRouteCircuitConnectionListResultIterator {
 10352  	return ExpressRouteCircuitConnectionListResultIterator{page: page}
 10353  }
 10354  
 10355  // IsEmpty returns true if the ListResult contains no values.
 10356  func (ercclr ExpressRouteCircuitConnectionListResult) IsEmpty() bool {
 10357  	return ercclr.Value == nil || len(*ercclr.Value) == 0
 10358  }
 10359  
 10360  // hasNextLink returns true if the NextLink is not empty.
 10361  func (ercclr ExpressRouteCircuitConnectionListResult) hasNextLink() bool {
 10362  	return ercclr.NextLink != nil && len(*ercclr.NextLink) != 0
 10363  }
 10364  
 10365  // expressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
 10366  // It returns nil if no more results exist.
 10367  func (ercclr ExpressRouteCircuitConnectionListResult) expressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
 10368  	if !ercclr.hasNextLink() {
 10369  		return nil, nil
 10370  	}
 10371  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 10372  		autorest.AsJSON(),
 10373  		autorest.AsGet(),
 10374  		autorest.WithBaseURL(to.String(ercclr.NextLink)))
 10375  }
 10376  
 10377  // ExpressRouteCircuitConnectionListResultPage contains a page of ExpressRouteCircuitConnection values.
 10378  type ExpressRouteCircuitConnectionListResultPage struct {
 10379  	fn     func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)
 10380  	ercclr ExpressRouteCircuitConnectionListResult
 10381  }
 10382  
 10383  // NextWithContext advances to the next page of values.  If there was an error making
 10384  // the request the page does not advance and the error is returned.
 10385  func (page *ExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
 10386  	if tracing.IsEnabled() {
 10387  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitConnectionListResultPage.NextWithContext")
 10388  		defer func() {
 10389  			sc := -1
 10390  			if page.Response().Response.Response != nil {
 10391  				sc = page.Response().Response.Response.StatusCode
 10392  			}
 10393  			tracing.EndSpan(ctx, sc, err)
 10394  		}()
 10395  	}
 10396  	for {
 10397  		next, err := page.fn(ctx, page.ercclr)
 10398  		if err != nil {
 10399  			return err
 10400  		}
 10401  		page.ercclr = next
 10402  		if !next.hasNextLink() || !next.IsEmpty() {
 10403  			break
 10404  		}
 10405  	}
 10406  	return nil
 10407  }
 10408  
 10409  // Next advances to the next page of values.  If there was an error making
 10410  // the request the page does not advance and the error is returned.
 10411  // Deprecated: Use NextWithContext() instead.
 10412  func (page *ExpressRouteCircuitConnectionListResultPage) Next() error {
 10413  	return page.NextWithContext(context.Background())
 10414  }
 10415  
 10416  // NotDone returns true if the page enumeration should be started or is not yet complete.
 10417  func (page ExpressRouteCircuitConnectionListResultPage) NotDone() bool {
 10418  	return !page.ercclr.IsEmpty()
 10419  }
 10420  
 10421  // Response returns the raw server response from the last page request.
 10422  func (page ExpressRouteCircuitConnectionListResultPage) Response() ExpressRouteCircuitConnectionListResult {
 10423  	return page.ercclr
 10424  }
 10425  
 10426  // Values returns the slice of values for the current page or nil if there are no values.
 10427  func (page ExpressRouteCircuitConnectionListResultPage) Values() []ExpressRouteCircuitConnection {
 10428  	if page.ercclr.IsEmpty() {
 10429  		return nil
 10430  	}
 10431  	return *page.ercclr.Value
 10432  }
 10433  
 10434  // Creates a new instance of the ExpressRouteCircuitConnectionListResultPage type.
 10435  func NewExpressRouteCircuitConnectionListResultPage(cur ExpressRouteCircuitConnectionListResult, getNextPage func(context.Context, ExpressRouteCircuitConnectionListResult) (ExpressRouteCircuitConnectionListResult, error)) ExpressRouteCircuitConnectionListResultPage {
 10436  	return ExpressRouteCircuitConnectionListResultPage{
 10437  		fn:     getNextPage,
 10438  		ercclr: cur,
 10439  	}
 10440  }
 10441  
 10442  // ExpressRouteCircuitConnectionPropertiesFormat properties of the express route circuit connection.
 10443  type ExpressRouteCircuitConnectionPropertiesFormat struct {
 10444  	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit initiating connection.
 10445  	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
 10446  	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
 10447  	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
 10448  	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
 10449  	AddressPrefix *string `json:"addressPrefix,omitempty"`
 10450  	// AuthorizationKey - The authorization key.
 10451  	AuthorizationKey *string `json:"authorizationKey,omitempty"`
 10452  	// Ipv6CircuitConnectionConfig - IPv6 Address PrefixProperties of the express route circuit connection.
 10453  	Ipv6CircuitConnectionConfig *Ipv6CircuitConnectionConfig `json:"ipv6CircuitConnectionConfig,omitempty"`
 10454  	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
 10455  	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
 10456  	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 10457  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 10458  }
 10459  
 10460  // MarshalJSON is the custom marshaler for ExpressRouteCircuitConnectionPropertiesFormat.
 10461  func (erccpf ExpressRouteCircuitConnectionPropertiesFormat) MarshalJSON() ([]byte, error) {
 10462  	objectMap := make(map[string]interface{})
 10463  	if erccpf.ExpressRouteCircuitPeering != nil {
 10464  		objectMap["expressRouteCircuitPeering"] = erccpf.ExpressRouteCircuitPeering
 10465  	}
 10466  	if erccpf.PeerExpressRouteCircuitPeering != nil {
 10467  		objectMap["peerExpressRouteCircuitPeering"] = erccpf.PeerExpressRouteCircuitPeering
 10468  	}
 10469  	if erccpf.AddressPrefix != nil {
 10470  		objectMap["addressPrefix"] = erccpf.AddressPrefix
 10471  	}
 10472  	if erccpf.AuthorizationKey != nil {
 10473  		objectMap["authorizationKey"] = erccpf.AuthorizationKey
 10474  	}
 10475  	if erccpf.Ipv6CircuitConnectionConfig != nil {
 10476  		objectMap["ipv6CircuitConnectionConfig"] = erccpf.Ipv6CircuitConnectionConfig
 10477  	}
 10478  	if erccpf.CircuitConnectionStatus != "" {
 10479  		objectMap["circuitConnectionStatus"] = erccpf.CircuitConnectionStatus
 10480  	}
 10481  	return json.Marshal(objectMap)
 10482  }
 10483  
 10484  // ExpressRouteCircuitConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
 10485  // results of a long-running operation.
 10486  type ExpressRouteCircuitConnectionsCreateOrUpdateFuture struct {
 10487  	azure.FutureAPI
 10488  	// Result returns the result of the asynchronous operation.
 10489  	// If the operation has not completed it will return an error.
 10490  	Result func(ExpressRouteCircuitConnectionsClient) (ExpressRouteCircuitConnection, error)
 10491  }
 10492  
 10493  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 10494  func (future *ExpressRouteCircuitConnectionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 10495  	var azFuture azure.Future
 10496  	if err := json.Unmarshal(body, &azFuture); err != nil {
 10497  		return err
 10498  	}
 10499  	future.FutureAPI = &azFuture
 10500  	future.Result = future.result
 10501  	return nil
 10502  }
 10503  
 10504  // result is the default implementation for ExpressRouteCircuitConnectionsCreateOrUpdateFuture.Result.
 10505  func (future *ExpressRouteCircuitConnectionsCreateOrUpdateFuture) result(client ExpressRouteCircuitConnectionsClient) (ercc ExpressRouteCircuitConnection, err error) {
 10506  	var done bool
 10507  	done, err = future.DoneWithContext(context.Background(), client)
 10508  	if err != nil {
 10509  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 10510  		return
 10511  	}
 10512  	if !done {
 10513  		ercc.Response.Response = future.Response()
 10514  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture")
 10515  		return
 10516  	}
 10517  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 10518  	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
 10519  		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
 10520  		if err != nil {
 10521  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
 10522  		}
 10523  	}
 10524  	return
 10525  }
 10526  
 10527  // ExpressRouteCircuitConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
 10528  // long-running operation.
 10529  type ExpressRouteCircuitConnectionsDeleteFuture struct {
 10530  	azure.FutureAPI
 10531  	// Result returns the result of the asynchronous operation.
 10532  	// If the operation has not completed it will return an error.
 10533  	Result func(ExpressRouteCircuitConnectionsClient) (autorest.Response, error)
 10534  }
 10535  
 10536  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 10537  func (future *ExpressRouteCircuitConnectionsDeleteFuture) UnmarshalJSON(body []byte) error {
 10538  	var azFuture azure.Future
 10539  	if err := json.Unmarshal(body, &azFuture); err != nil {
 10540  		return err
 10541  	}
 10542  	future.FutureAPI = &azFuture
 10543  	future.Result = future.result
 10544  	return nil
 10545  }
 10546  
 10547  // result is the default implementation for ExpressRouteCircuitConnectionsDeleteFuture.Result.
 10548  func (future *ExpressRouteCircuitConnectionsDeleteFuture) result(client ExpressRouteCircuitConnectionsClient) (ar autorest.Response, err error) {
 10549  	var done bool
 10550  	done, err = future.DoneWithContext(context.Background(), client)
 10551  	if err != nil {
 10552  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
 10553  		return
 10554  	}
 10555  	if !done {
 10556  		ar.Response = future.Response()
 10557  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitConnectionsDeleteFuture")
 10558  		return
 10559  	}
 10560  	ar.Response = future.Response()
 10561  	return
 10562  }
 10563  
 10564  // ExpressRouteCircuitListResult response for ListExpressRouteCircuit API service call.
 10565  type ExpressRouteCircuitListResult struct {
 10566  	autorest.Response `json:"-"`
 10567  	// Value - A list of ExpressRouteCircuits in a resource group.
 10568  	Value *[]ExpressRouteCircuit `json:"value,omitempty"`
 10569  	// NextLink - The URL to get the next set of results.
 10570  	NextLink *string `json:"nextLink,omitempty"`
 10571  }
 10572  
 10573  // ExpressRouteCircuitListResultIterator provides access to a complete listing of ExpressRouteCircuit
 10574  // values.
 10575  type ExpressRouteCircuitListResultIterator struct {
 10576  	i    int
 10577  	page ExpressRouteCircuitListResultPage
 10578  }
 10579  
 10580  // NextWithContext advances to the next value.  If there was an error making
 10581  // the request the iterator does not advance and the error is returned.
 10582  func (iter *ExpressRouteCircuitListResultIterator) NextWithContext(ctx context.Context) (err error) {
 10583  	if tracing.IsEnabled() {
 10584  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultIterator.NextWithContext")
 10585  		defer func() {
 10586  			sc := -1
 10587  			if iter.Response().Response.Response != nil {
 10588  				sc = iter.Response().Response.Response.StatusCode
 10589  			}
 10590  			tracing.EndSpan(ctx, sc, err)
 10591  		}()
 10592  	}
 10593  	iter.i++
 10594  	if iter.i < len(iter.page.Values()) {
 10595  		return nil
 10596  	}
 10597  	err = iter.page.NextWithContext(ctx)
 10598  	if err != nil {
 10599  		iter.i--
 10600  		return err
 10601  	}
 10602  	iter.i = 0
 10603  	return nil
 10604  }
 10605  
 10606  // Next advances to the next value.  If there was an error making
 10607  // the request the iterator does not advance and the error is returned.
 10608  // Deprecated: Use NextWithContext() instead.
 10609  func (iter *ExpressRouteCircuitListResultIterator) Next() error {
 10610  	return iter.NextWithContext(context.Background())
 10611  }
 10612  
 10613  // NotDone returns true if the enumeration should be started or is not yet complete.
 10614  func (iter ExpressRouteCircuitListResultIterator) NotDone() bool {
 10615  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 10616  }
 10617  
 10618  // Response returns the raw server response from the last page request.
 10619  func (iter ExpressRouteCircuitListResultIterator) Response() ExpressRouteCircuitListResult {
 10620  	return iter.page.Response()
 10621  }
 10622  
 10623  // Value returns the current value or a zero-initialized value if the
 10624  // iterator has advanced beyond the end of the collection.
 10625  func (iter ExpressRouteCircuitListResultIterator) Value() ExpressRouteCircuit {
 10626  	if !iter.page.NotDone() {
 10627  		return ExpressRouteCircuit{}
 10628  	}
 10629  	return iter.page.Values()[iter.i]
 10630  }
 10631  
 10632  // Creates a new instance of the ExpressRouteCircuitListResultIterator type.
 10633  func NewExpressRouteCircuitListResultIterator(page ExpressRouteCircuitListResultPage) ExpressRouteCircuitListResultIterator {
 10634  	return ExpressRouteCircuitListResultIterator{page: page}
 10635  }
 10636  
 10637  // IsEmpty returns true if the ListResult contains no values.
 10638  func (erclr ExpressRouteCircuitListResult) IsEmpty() bool {
 10639  	return erclr.Value == nil || len(*erclr.Value) == 0
 10640  }
 10641  
 10642  // hasNextLink returns true if the NextLink is not empty.
 10643  func (erclr ExpressRouteCircuitListResult) hasNextLink() bool {
 10644  	return erclr.NextLink != nil && len(*erclr.NextLink) != 0
 10645  }
 10646  
 10647  // expressRouteCircuitListResultPreparer prepares a request to retrieve the next set of results.
 10648  // It returns nil if no more results exist.
 10649  func (erclr ExpressRouteCircuitListResult) expressRouteCircuitListResultPreparer(ctx context.Context) (*http.Request, error) {
 10650  	if !erclr.hasNextLink() {
 10651  		return nil, nil
 10652  	}
 10653  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 10654  		autorest.AsJSON(),
 10655  		autorest.AsGet(),
 10656  		autorest.WithBaseURL(to.String(erclr.NextLink)))
 10657  }
 10658  
 10659  // ExpressRouteCircuitListResultPage contains a page of ExpressRouteCircuit values.
 10660  type ExpressRouteCircuitListResultPage struct {
 10661  	fn    func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)
 10662  	erclr ExpressRouteCircuitListResult
 10663  }
 10664  
 10665  // NextWithContext advances to the next page of values.  If there was an error making
 10666  // the request the page does not advance and the error is returned.
 10667  func (page *ExpressRouteCircuitListResultPage) NextWithContext(ctx context.Context) (err error) {
 10668  	if tracing.IsEnabled() {
 10669  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitListResultPage.NextWithContext")
 10670  		defer func() {
 10671  			sc := -1
 10672  			if page.Response().Response.Response != nil {
 10673  				sc = page.Response().Response.Response.StatusCode
 10674  			}
 10675  			tracing.EndSpan(ctx, sc, err)
 10676  		}()
 10677  	}
 10678  	for {
 10679  		next, err := page.fn(ctx, page.erclr)
 10680  		if err != nil {
 10681  			return err
 10682  		}
 10683  		page.erclr = next
 10684  		if !next.hasNextLink() || !next.IsEmpty() {
 10685  			break
 10686  		}
 10687  	}
 10688  	return nil
 10689  }
 10690  
 10691  // Next advances to the next page of values.  If there was an error making
 10692  // the request the page does not advance and the error is returned.
 10693  // Deprecated: Use NextWithContext() instead.
 10694  func (page *ExpressRouteCircuitListResultPage) Next() error {
 10695  	return page.NextWithContext(context.Background())
 10696  }
 10697  
 10698  // NotDone returns true if the page enumeration should be started or is not yet complete.
 10699  func (page ExpressRouteCircuitListResultPage) NotDone() bool {
 10700  	return !page.erclr.IsEmpty()
 10701  }
 10702  
 10703  // Response returns the raw server response from the last page request.
 10704  func (page ExpressRouteCircuitListResultPage) Response() ExpressRouteCircuitListResult {
 10705  	return page.erclr
 10706  }
 10707  
 10708  // Values returns the slice of values for the current page or nil if there are no values.
 10709  func (page ExpressRouteCircuitListResultPage) Values() []ExpressRouteCircuit {
 10710  	if page.erclr.IsEmpty() {
 10711  		return nil
 10712  	}
 10713  	return *page.erclr.Value
 10714  }
 10715  
 10716  // Creates a new instance of the ExpressRouteCircuitListResultPage type.
 10717  func NewExpressRouteCircuitListResultPage(cur ExpressRouteCircuitListResult, getNextPage func(context.Context, ExpressRouteCircuitListResult) (ExpressRouteCircuitListResult, error)) ExpressRouteCircuitListResultPage {
 10718  	return ExpressRouteCircuitListResultPage{
 10719  		fn:    getNextPage,
 10720  		erclr: cur,
 10721  	}
 10722  }
 10723  
 10724  // ExpressRouteCircuitPeering peering in an ExpressRouteCircuit resource.
 10725  type ExpressRouteCircuitPeering struct {
 10726  	autorest.Response `json:"-"`
 10727  	// ExpressRouteCircuitPeeringPropertiesFormat - Properties of the express route circuit peering.
 10728  	*ExpressRouteCircuitPeeringPropertiesFormat `json:"properties,omitempty"`
 10729  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 10730  	Name *string `json:"name,omitempty"`
 10731  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 10732  	Etag *string `json:"etag,omitempty"`
 10733  	// Type - READ-ONLY; Type of the resource.
 10734  	Type *string `json:"type,omitempty"`
 10735  	// ID - Resource ID.
 10736  	ID *string `json:"id,omitempty"`
 10737  }
 10738  
 10739  // MarshalJSON is the custom marshaler for ExpressRouteCircuitPeering.
 10740  func (ercp ExpressRouteCircuitPeering) MarshalJSON() ([]byte, error) {
 10741  	objectMap := make(map[string]interface{})
 10742  	if ercp.ExpressRouteCircuitPeeringPropertiesFormat != nil {
 10743  		objectMap["properties"] = ercp.ExpressRouteCircuitPeeringPropertiesFormat
 10744  	}
 10745  	if ercp.Name != nil {
 10746  		objectMap["name"] = ercp.Name
 10747  	}
 10748  	if ercp.ID != nil {
 10749  		objectMap["id"] = ercp.ID
 10750  	}
 10751  	return json.Marshal(objectMap)
 10752  }
 10753  
 10754  // UnmarshalJSON is the custom unmarshaler for ExpressRouteCircuitPeering struct.
 10755  func (ercp *ExpressRouteCircuitPeering) UnmarshalJSON(body []byte) error {
 10756  	var m map[string]*json.RawMessage
 10757  	err := json.Unmarshal(body, &m)
 10758  	if err != nil {
 10759  		return err
 10760  	}
 10761  	for k, v := range m {
 10762  		switch k {
 10763  		case "properties":
 10764  			if v != nil {
 10765  				var expressRouteCircuitPeeringPropertiesFormat ExpressRouteCircuitPeeringPropertiesFormat
 10766  				err = json.Unmarshal(*v, &expressRouteCircuitPeeringPropertiesFormat)
 10767  				if err != nil {
 10768  					return err
 10769  				}
 10770  				ercp.ExpressRouteCircuitPeeringPropertiesFormat = &expressRouteCircuitPeeringPropertiesFormat
 10771  			}
 10772  		case "name":
 10773  			if v != nil {
 10774  				var name string
 10775  				err = json.Unmarshal(*v, &name)
 10776  				if err != nil {
 10777  					return err
 10778  				}
 10779  				ercp.Name = &name
 10780  			}
 10781  		case "etag":
 10782  			if v != nil {
 10783  				var etag string
 10784  				err = json.Unmarshal(*v, &etag)
 10785  				if err != nil {
 10786  					return err
 10787  				}
 10788  				ercp.Etag = &etag
 10789  			}
 10790  		case "type":
 10791  			if v != nil {
 10792  				var typeVar string
 10793  				err = json.Unmarshal(*v, &typeVar)
 10794  				if err != nil {
 10795  					return err
 10796  				}
 10797  				ercp.Type = &typeVar
 10798  			}
 10799  		case "id":
 10800  			if v != nil {
 10801  				var ID string
 10802  				err = json.Unmarshal(*v, &ID)
 10803  				if err != nil {
 10804  					return err
 10805  				}
 10806  				ercp.ID = &ID
 10807  			}
 10808  		}
 10809  	}
 10810  
 10811  	return nil
 10812  }
 10813  
 10814  // ExpressRouteCircuitPeeringConfig specifies the peering configuration.
 10815  type ExpressRouteCircuitPeeringConfig struct {
 10816  	// AdvertisedPublicPrefixes - The reference to AdvertisedPublicPrefixes.
 10817  	AdvertisedPublicPrefixes *[]string `json:"advertisedPublicPrefixes,omitempty"`
 10818  	// AdvertisedCommunities - The communities of bgp peering. Specified for microsoft peering.
 10819  	AdvertisedCommunities *[]string `json:"advertisedCommunities,omitempty"`
 10820  	// AdvertisedPublicPrefixesState - READ-ONLY; The advertised public prefix state of the Peering resource. Possible values include: 'NotConfigured', 'Configuring', 'Configured', 'ValidationNeeded'
 10821  	AdvertisedPublicPrefixesState ExpressRouteCircuitPeeringAdvertisedPublicPrefixState `json:"advertisedPublicPrefixesState,omitempty"`
 10822  	// LegacyMode - The legacy mode of the peering.
 10823  	LegacyMode *int32 `json:"legacyMode,omitempty"`
 10824  	// CustomerASN - The CustomerASN of the peering.
 10825  	CustomerASN *int32 `json:"customerASN,omitempty"`
 10826  	// RoutingRegistryName - The RoutingRegistryName of the configuration.
 10827  	RoutingRegistryName *string `json:"routingRegistryName,omitempty"`
 10828  }
 10829  
 10830  // MarshalJSON is the custom marshaler for ExpressRouteCircuitPeeringConfig.
 10831  func (ercpc ExpressRouteCircuitPeeringConfig) MarshalJSON() ([]byte, error) {
 10832  	objectMap := make(map[string]interface{})
 10833  	if ercpc.AdvertisedPublicPrefixes != nil {
 10834  		objectMap["advertisedPublicPrefixes"] = ercpc.AdvertisedPublicPrefixes
 10835  	}
 10836  	if ercpc.AdvertisedCommunities != nil {
 10837  		objectMap["advertisedCommunities"] = ercpc.AdvertisedCommunities
 10838  	}
 10839  	if ercpc.LegacyMode != nil {
 10840  		objectMap["legacyMode"] = ercpc.LegacyMode
 10841  	}
 10842  	if ercpc.CustomerASN != nil {
 10843  		objectMap["customerASN"] = ercpc.CustomerASN
 10844  	}
 10845  	if ercpc.RoutingRegistryName != nil {
 10846  		objectMap["routingRegistryName"] = ercpc.RoutingRegistryName
 10847  	}
 10848  	return json.Marshal(objectMap)
 10849  }
 10850  
 10851  // ExpressRouteCircuitPeeringID expressRoute circuit peering identifier.
 10852  type ExpressRouteCircuitPeeringID struct {
 10853  	// ID - The ID of the ExpressRoute circuit peering.
 10854  	ID *string `json:"id,omitempty"`
 10855  }
 10856  
 10857  // ExpressRouteCircuitPeeringListResult response for ListPeering API service call retrieves all peerings
 10858  // that belong to an ExpressRouteCircuit.
 10859  type ExpressRouteCircuitPeeringListResult struct {
 10860  	autorest.Response `json:"-"`
 10861  	// Value - The peerings in an express route circuit.
 10862  	Value *[]ExpressRouteCircuitPeering `json:"value,omitempty"`
 10863  	// NextLink - The URL to get the next set of results.
 10864  	NextLink *string `json:"nextLink,omitempty"`
 10865  }
 10866  
 10867  // ExpressRouteCircuitPeeringListResultIterator provides access to a complete listing of
 10868  // ExpressRouteCircuitPeering values.
 10869  type ExpressRouteCircuitPeeringListResultIterator struct {
 10870  	i    int
 10871  	page ExpressRouteCircuitPeeringListResultPage
 10872  }
 10873  
 10874  // NextWithContext advances to the next value.  If there was an error making
 10875  // the request the iterator does not advance and the error is returned.
 10876  func (iter *ExpressRouteCircuitPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
 10877  	if tracing.IsEnabled() {
 10878  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultIterator.NextWithContext")
 10879  		defer func() {
 10880  			sc := -1
 10881  			if iter.Response().Response.Response != nil {
 10882  				sc = iter.Response().Response.Response.StatusCode
 10883  			}
 10884  			tracing.EndSpan(ctx, sc, err)
 10885  		}()
 10886  	}
 10887  	iter.i++
 10888  	if iter.i < len(iter.page.Values()) {
 10889  		return nil
 10890  	}
 10891  	err = iter.page.NextWithContext(ctx)
 10892  	if err != nil {
 10893  		iter.i--
 10894  		return err
 10895  	}
 10896  	iter.i = 0
 10897  	return nil
 10898  }
 10899  
 10900  // Next advances to the next value.  If there was an error making
 10901  // the request the iterator does not advance and the error is returned.
 10902  // Deprecated: Use NextWithContext() instead.
 10903  func (iter *ExpressRouteCircuitPeeringListResultIterator) Next() error {
 10904  	return iter.NextWithContext(context.Background())
 10905  }
 10906  
 10907  // NotDone returns true if the enumeration should be started or is not yet complete.
 10908  func (iter ExpressRouteCircuitPeeringListResultIterator) NotDone() bool {
 10909  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 10910  }
 10911  
 10912  // Response returns the raw server response from the last page request.
 10913  func (iter ExpressRouteCircuitPeeringListResultIterator) Response() ExpressRouteCircuitPeeringListResult {
 10914  	return iter.page.Response()
 10915  }
 10916  
 10917  // Value returns the current value or a zero-initialized value if the
 10918  // iterator has advanced beyond the end of the collection.
 10919  func (iter ExpressRouteCircuitPeeringListResultIterator) Value() ExpressRouteCircuitPeering {
 10920  	if !iter.page.NotDone() {
 10921  		return ExpressRouteCircuitPeering{}
 10922  	}
 10923  	return iter.page.Values()[iter.i]
 10924  }
 10925  
 10926  // Creates a new instance of the ExpressRouteCircuitPeeringListResultIterator type.
 10927  func NewExpressRouteCircuitPeeringListResultIterator(page ExpressRouteCircuitPeeringListResultPage) ExpressRouteCircuitPeeringListResultIterator {
 10928  	return ExpressRouteCircuitPeeringListResultIterator{page: page}
 10929  }
 10930  
 10931  // IsEmpty returns true if the ListResult contains no values.
 10932  func (ercplr ExpressRouteCircuitPeeringListResult) IsEmpty() bool {
 10933  	return ercplr.Value == nil || len(*ercplr.Value) == 0
 10934  }
 10935  
 10936  // hasNextLink returns true if the NextLink is not empty.
 10937  func (ercplr ExpressRouteCircuitPeeringListResult) hasNextLink() bool {
 10938  	return ercplr.NextLink != nil && len(*ercplr.NextLink) != 0
 10939  }
 10940  
 10941  // expressRouteCircuitPeeringListResultPreparer prepares a request to retrieve the next set of results.
 10942  // It returns nil if no more results exist.
 10943  func (ercplr ExpressRouteCircuitPeeringListResult) expressRouteCircuitPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
 10944  	if !ercplr.hasNextLink() {
 10945  		return nil, nil
 10946  	}
 10947  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 10948  		autorest.AsJSON(),
 10949  		autorest.AsGet(),
 10950  		autorest.WithBaseURL(to.String(ercplr.NextLink)))
 10951  }
 10952  
 10953  // ExpressRouteCircuitPeeringListResultPage contains a page of ExpressRouteCircuitPeering values.
 10954  type ExpressRouteCircuitPeeringListResultPage struct {
 10955  	fn     func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)
 10956  	ercplr ExpressRouteCircuitPeeringListResult
 10957  }
 10958  
 10959  // NextWithContext advances to the next page of values.  If there was an error making
 10960  // the request the page does not advance and the error is returned.
 10961  func (page *ExpressRouteCircuitPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
 10962  	if tracing.IsEnabled() {
 10963  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCircuitPeeringListResultPage.NextWithContext")
 10964  		defer func() {
 10965  			sc := -1
 10966  			if page.Response().Response.Response != nil {
 10967  				sc = page.Response().Response.Response.StatusCode
 10968  			}
 10969  			tracing.EndSpan(ctx, sc, err)
 10970  		}()
 10971  	}
 10972  	for {
 10973  		next, err := page.fn(ctx, page.ercplr)
 10974  		if err != nil {
 10975  			return err
 10976  		}
 10977  		page.ercplr = next
 10978  		if !next.hasNextLink() || !next.IsEmpty() {
 10979  			break
 10980  		}
 10981  	}
 10982  	return nil
 10983  }
 10984  
 10985  // Next advances to the next page of values.  If there was an error making
 10986  // the request the page does not advance and the error is returned.
 10987  // Deprecated: Use NextWithContext() instead.
 10988  func (page *ExpressRouteCircuitPeeringListResultPage) Next() error {
 10989  	return page.NextWithContext(context.Background())
 10990  }
 10991  
 10992  // NotDone returns true if the page enumeration should be started or is not yet complete.
 10993  func (page ExpressRouteCircuitPeeringListResultPage) NotDone() bool {
 10994  	return !page.ercplr.IsEmpty()
 10995  }
 10996  
 10997  // Response returns the raw server response from the last page request.
 10998  func (page ExpressRouteCircuitPeeringListResultPage) Response() ExpressRouteCircuitPeeringListResult {
 10999  	return page.ercplr
 11000  }
 11001  
 11002  // Values returns the slice of values for the current page or nil if there are no values.
 11003  func (page ExpressRouteCircuitPeeringListResultPage) Values() []ExpressRouteCircuitPeering {
 11004  	if page.ercplr.IsEmpty() {
 11005  		return nil
 11006  	}
 11007  	return *page.ercplr.Value
 11008  }
 11009  
 11010  // Creates a new instance of the ExpressRouteCircuitPeeringListResultPage type.
 11011  func NewExpressRouteCircuitPeeringListResultPage(cur ExpressRouteCircuitPeeringListResult, getNextPage func(context.Context, ExpressRouteCircuitPeeringListResult) (ExpressRouteCircuitPeeringListResult, error)) ExpressRouteCircuitPeeringListResultPage {
 11012  	return ExpressRouteCircuitPeeringListResultPage{
 11013  		fn:     getNextPage,
 11014  		ercplr: cur,
 11015  	}
 11016  }
 11017  
 11018  // ExpressRouteCircuitPeeringPropertiesFormat properties of the express route circuit peering.
 11019  type ExpressRouteCircuitPeeringPropertiesFormat struct {
 11020  	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
 11021  	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
 11022  	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
 11023  	State ExpressRoutePeeringState `json:"state,omitempty"`
 11024  	// AzureASN - The Azure ASN.
 11025  	AzureASN *int32 `json:"azureASN,omitempty"`
 11026  	// PeerASN - The peer ASN.
 11027  	PeerASN *int64 `json:"peerASN,omitempty"`
 11028  	// PrimaryPeerAddressPrefix - The primary address prefix.
 11029  	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
 11030  	// SecondaryPeerAddressPrefix - The secondary address prefix.
 11031  	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
 11032  	// PrimaryAzurePort - The primary port.
 11033  	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
 11034  	// SecondaryAzurePort - The secondary port.
 11035  	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
 11036  	// SharedKey - The shared key.
 11037  	SharedKey *string `json:"sharedKey,omitempty"`
 11038  	// VlanID - The VLAN ID.
 11039  	VlanID *int32 `json:"vlanId,omitempty"`
 11040  	// MicrosoftPeeringConfig - The Microsoft peering configuration.
 11041  	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
 11042  	// Stats - The peering stats of express route circuit.
 11043  	Stats *ExpressRouteCircuitStats `json:"stats,omitempty"`
 11044  	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 11045  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 11046  	// GatewayManagerEtag - The GatewayManager Etag.
 11047  	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
 11048  	// LastModifiedBy - READ-ONLY; Who was the last to modify the peering.
 11049  	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
 11050  	// RouteFilter - The reference to the RouteFilter resource.
 11051  	RouteFilter *SubResource `json:"routeFilter,omitempty"`
 11052  	// Ipv6PeeringConfig - The IPv6 peering configuration.
 11053  	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
 11054  	// ExpressRouteConnection - The ExpressRoute connection.
 11055  	ExpressRouteConnection *ExpressRouteConnectionID `json:"expressRouteConnection,omitempty"`
 11056  	// Connections - The list of circuit connections associated with Azure Private Peering for this circuit.
 11057  	Connections *[]ExpressRouteCircuitConnection `json:"connections,omitempty"`
 11058  	// PeeredConnections - READ-ONLY; The list of peered circuit connections associated with Azure Private Peering for this circuit.
 11059  	PeeredConnections *[]PeerExpressRouteCircuitConnection `json:"peeredConnections,omitempty"`
 11060  }
 11061  
 11062  // MarshalJSON is the custom marshaler for ExpressRouteCircuitPeeringPropertiesFormat.
 11063  func (ercppf ExpressRouteCircuitPeeringPropertiesFormat) MarshalJSON() ([]byte, error) {
 11064  	objectMap := make(map[string]interface{})
 11065  	if ercppf.PeeringType != "" {
 11066  		objectMap["peeringType"] = ercppf.PeeringType
 11067  	}
 11068  	if ercppf.State != "" {
 11069  		objectMap["state"] = ercppf.State
 11070  	}
 11071  	if ercppf.AzureASN != nil {
 11072  		objectMap["azureASN"] = ercppf.AzureASN
 11073  	}
 11074  	if ercppf.PeerASN != nil {
 11075  		objectMap["peerASN"] = ercppf.PeerASN
 11076  	}
 11077  	if ercppf.PrimaryPeerAddressPrefix != nil {
 11078  		objectMap["primaryPeerAddressPrefix"] = ercppf.PrimaryPeerAddressPrefix
 11079  	}
 11080  	if ercppf.SecondaryPeerAddressPrefix != nil {
 11081  		objectMap["secondaryPeerAddressPrefix"] = ercppf.SecondaryPeerAddressPrefix
 11082  	}
 11083  	if ercppf.PrimaryAzurePort != nil {
 11084  		objectMap["primaryAzurePort"] = ercppf.PrimaryAzurePort
 11085  	}
 11086  	if ercppf.SecondaryAzurePort != nil {
 11087  		objectMap["secondaryAzurePort"] = ercppf.SecondaryAzurePort
 11088  	}
 11089  	if ercppf.SharedKey != nil {
 11090  		objectMap["sharedKey"] = ercppf.SharedKey
 11091  	}
 11092  	if ercppf.VlanID != nil {
 11093  		objectMap["vlanId"] = ercppf.VlanID
 11094  	}
 11095  	if ercppf.MicrosoftPeeringConfig != nil {
 11096  		objectMap["microsoftPeeringConfig"] = ercppf.MicrosoftPeeringConfig
 11097  	}
 11098  	if ercppf.Stats != nil {
 11099  		objectMap["stats"] = ercppf.Stats
 11100  	}
 11101  	if ercppf.GatewayManagerEtag != nil {
 11102  		objectMap["gatewayManagerEtag"] = ercppf.GatewayManagerEtag
 11103  	}
 11104  	if ercppf.RouteFilter != nil {
 11105  		objectMap["routeFilter"] = ercppf.RouteFilter
 11106  	}
 11107  	if ercppf.Ipv6PeeringConfig != nil {
 11108  		objectMap["ipv6PeeringConfig"] = ercppf.Ipv6PeeringConfig
 11109  	}
 11110  	if ercppf.ExpressRouteConnection != nil {
 11111  		objectMap["expressRouteConnection"] = ercppf.ExpressRouteConnection
 11112  	}
 11113  	if ercppf.Connections != nil {
 11114  		objectMap["connections"] = ercppf.Connections
 11115  	}
 11116  	return json.Marshal(objectMap)
 11117  }
 11118  
 11119  // ExpressRouteCircuitPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
 11120  // of a long-running operation.
 11121  type ExpressRouteCircuitPeeringsCreateOrUpdateFuture struct {
 11122  	azure.FutureAPI
 11123  	// Result returns the result of the asynchronous operation.
 11124  	// If the operation has not completed it will return an error.
 11125  	Result func(ExpressRouteCircuitPeeringsClient) (ExpressRouteCircuitPeering, error)
 11126  }
 11127  
 11128  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 11129  func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 11130  	var azFuture azure.Future
 11131  	if err := json.Unmarshal(body, &azFuture); err != nil {
 11132  		return err
 11133  	}
 11134  	future.FutureAPI = &azFuture
 11135  	future.Result = future.result
 11136  	return nil
 11137  }
 11138  
 11139  // result is the default implementation for ExpressRouteCircuitPeeringsCreateOrUpdateFuture.Result.
 11140  func (future *ExpressRouteCircuitPeeringsCreateOrUpdateFuture) result(client ExpressRouteCircuitPeeringsClient) (ercp ExpressRouteCircuitPeering, err error) {
 11141  	var done bool
 11142  	done, err = future.DoneWithContext(context.Background(), client)
 11143  	if err != nil {
 11144  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 11145  		return
 11146  	}
 11147  	if !done {
 11148  		ercp.Response.Response = future.Response()
 11149  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture")
 11150  		return
 11151  	}
 11152  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 11153  	if ercp.Response.Response, err = future.GetResult(sender); err == nil && ercp.Response.Response.StatusCode != http.StatusNoContent {
 11154  		ercp, err = client.CreateOrUpdateResponder(ercp.Response.Response)
 11155  		if err != nil {
 11156  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsCreateOrUpdateFuture", "Result", ercp.Response.Response, "Failure responding to request")
 11157  		}
 11158  	}
 11159  	return
 11160  }
 11161  
 11162  // ExpressRouteCircuitPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
 11163  // long-running operation.
 11164  type ExpressRouteCircuitPeeringsDeleteFuture struct {
 11165  	azure.FutureAPI
 11166  	// Result returns the result of the asynchronous operation.
 11167  	// If the operation has not completed it will return an error.
 11168  	Result func(ExpressRouteCircuitPeeringsClient) (autorest.Response, error)
 11169  }
 11170  
 11171  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 11172  func (future *ExpressRouteCircuitPeeringsDeleteFuture) UnmarshalJSON(body []byte) error {
 11173  	var azFuture azure.Future
 11174  	if err := json.Unmarshal(body, &azFuture); err != nil {
 11175  		return err
 11176  	}
 11177  	future.FutureAPI = &azFuture
 11178  	future.Result = future.result
 11179  	return nil
 11180  }
 11181  
 11182  // result is the default implementation for ExpressRouteCircuitPeeringsDeleteFuture.Result.
 11183  func (future *ExpressRouteCircuitPeeringsDeleteFuture) result(client ExpressRouteCircuitPeeringsClient) (ar autorest.Response, err error) {
 11184  	var done bool
 11185  	done, err = future.DoneWithContext(context.Background(), client)
 11186  	if err != nil {
 11187  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
 11188  		return
 11189  	}
 11190  	if !done {
 11191  		ar.Response = future.Response()
 11192  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitPeeringsDeleteFuture")
 11193  		return
 11194  	}
 11195  	ar.Response = future.Response()
 11196  	return
 11197  }
 11198  
 11199  // ExpressRouteCircuitPropertiesFormat properties of ExpressRouteCircuit.
 11200  type ExpressRouteCircuitPropertiesFormat struct {
 11201  	// AllowClassicOperations - Allow classic operations.
 11202  	AllowClassicOperations *bool `json:"allowClassicOperations,omitempty"`
 11203  	// CircuitProvisioningState - The CircuitProvisioningState state of the resource.
 11204  	CircuitProvisioningState *string `json:"circuitProvisioningState,omitempty"`
 11205  	// ServiceProviderProvisioningState - The ServiceProviderProvisioningState state of the resource. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
 11206  	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
 11207  	// Authorizations - The list of authorizations.
 11208  	Authorizations *[]ExpressRouteCircuitAuthorization `json:"authorizations,omitempty"`
 11209  	// Peerings - The list of peerings.
 11210  	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
 11211  	// ServiceKey - The ServiceKey.
 11212  	ServiceKey *string `json:"serviceKey,omitempty"`
 11213  	// ServiceProviderNotes - The ServiceProviderNotes.
 11214  	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
 11215  	// ServiceProviderProperties - The ServiceProviderProperties.
 11216  	ServiceProviderProperties *ExpressRouteCircuitServiceProviderProperties `json:"serviceProviderProperties,omitempty"`
 11217  	// ExpressRoutePort - The reference to the ExpressRoutePort resource when the circuit is provisioned on an ExpressRoutePort resource.
 11218  	ExpressRoutePort *SubResource `json:"expressRoutePort,omitempty"`
 11219  	// BandwidthInGbps - The bandwidth of the circuit when the circuit is provisioned on an ExpressRoutePort resource.
 11220  	BandwidthInGbps *float64 `json:"bandwidthInGbps,omitempty"`
 11221  	// Stag - READ-ONLY; The identifier of the circuit traffic. Outer tag for QinQ encapsulation.
 11222  	Stag *int32 `json:"stag,omitempty"`
 11223  	// ProvisioningState - READ-ONLY; The provisioning state of the express route circuit resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 11224  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 11225  	// GatewayManagerEtag - The GatewayManager Etag.
 11226  	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
 11227  	// GlobalReachEnabled - Flag denoting global reach status.
 11228  	GlobalReachEnabled *bool `json:"globalReachEnabled,omitempty"`
 11229  }
 11230  
 11231  // MarshalJSON is the custom marshaler for ExpressRouteCircuitPropertiesFormat.
 11232  func (ercpf ExpressRouteCircuitPropertiesFormat) MarshalJSON() ([]byte, error) {
 11233  	objectMap := make(map[string]interface{})
 11234  	if ercpf.AllowClassicOperations != nil {
 11235  		objectMap["allowClassicOperations"] = ercpf.AllowClassicOperations
 11236  	}
 11237  	if ercpf.CircuitProvisioningState != nil {
 11238  		objectMap["circuitProvisioningState"] = ercpf.CircuitProvisioningState
 11239  	}
 11240  	if ercpf.ServiceProviderProvisioningState != "" {
 11241  		objectMap["serviceProviderProvisioningState"] = ercpf.ServiceProviderProvisioningState
 11242  	}
 11243  	if ercpf.Authorizations != nil {
 11244  		objectMap["authorizations"] = ercpf.Authorizations
 11245  	}
 11246  	if ercpf.Peerings != nil {
 11247  		objectMap["peerings"] = ercpf.Peerings
 11248  	}
 11249  	if ercpf.ServiceKey != nil {
 11250  		objectMap["serviceKey"] = ercpf.ServiceKey
 11251  	}
 11252  	if ercpf.ServiceProviderNotes != nil {
 11253  		objectMap["serviceProviderNotes"] = ercpf.ServiceProviderNotes
 11254  	}
 11255  	if ercpf.ServiceProviderProperties != nil {
 11256  		objectMap["serviceProviderProperties"] = ercpf.ServiceProviderProperties
 11257  	}
 11258  	if ercpf.ExpressRoutePort != nil {
 11259  		objectMap["expressRoutePort"] = ercpf.ExpressRoutePort
 11260  	}
 11261  	if ercpf.BandwidthInGbps != nil {
 11262  		objectMap["bandwidthInGbps"] = ercpf.BandwidthInGbps
 11263  	}
 11264  	if ercpf.GatewayManagerEtag != nil {
 11265  		objectMap["gatewayManagerEtag"] = ercpf.GatewayManagerEtag
 11266  	}
 11267  	if ercpf.GlobalReachEnabled != nil {
 11268  		objectMap["globalReachEnabled"] = ercpf.GlobalReachEnabled
 11269  	}
 11270  	return json.Marshal(objectMap)
 11271  }
 11272  
 11273  // ExpressRouteCircuitReference reference to an express route circuit.
 11274  type ExpressRouteCircuitReference struct {
 11275  	// ID - Corresponding Express Route Circuit Id.
 11276  	ID *string `json:"id,omitempty"`
 11277  }
 11278  
 11279  // ExpressRouteCircuitRoutesTable the routes table associated with the ExpressRouteCircuit.
 11280  type ExpressRouteCircuitRoutesTable struct {
 11281  	// NetworkProperty - IP address of a network entity.
 11282  	NetworkProperty *string `json:"network,omitempty"`
 11283  	// NextHop - NextHop address.
 11284  	NextHop *string `json:"nextHop,omitempty"`
 11285  	// LocPrf - Local preference value as set with the set local-preference route-map configuration command.
 11286  	LocPrf *string `json:"locPrf,omitempty"`
 11287  	// Weight - Route Weight.
 11288  	Weight *int32 `json:"weight,omitempty"`
 11289  	// Path - Autonomous system paths to the destination network.
 11290  	Path *string `json:"path,omitempty"`
 11291  }
 11292  
 11293  // ExpressRouteCircuitRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
 11294  type ExpressRouteCircuitRoutesTableSummary struct {
 11295  	// Neighbor - IP address of the neighbor.
 11296  	Neighbor *string `json:"neighbor,omitempty"`
 11297  	// V - BGP version number spoken to the neighbor.
 11298  	V *int32 `json:"v,omitempty"`
 11299  	// As - Autonomous system number.
 11300  	As *int32 `json:"as,omitempty"`
 11301  	// 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.
 11302  	UpDown *string `json:"upDown,omitempty"`
 11303  	// StatePfxRcd - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
 11304  	StatePfxRcd *string `json:"statePfxRcd,omitempty"`
 11305  }
 11306  
 11307  // ExpressRouteCircuitsArpTableListResult response for ListArpTable associated with the Express Route
 11308  // Circuits API.
 11309  type ExpressRouteCircuitsArpTableListResult struct {
 11310  	autorest.Response `json:"-"`
 11311  	// Value - A list of the ARP tables.
 11312  	Value *[]ExpressRouteCircuitArpTable `json:"value,omitempty"`
 11313  	// NextLink - The URL to get the next set of results.
 11314  	NextLink *string `json:"nextLink,omitempty"`
 11315  }
 11316  
 11317  // ExpressRouteCircuitsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 11318  // long-running operation.
 11319  type ExpressRouteCircuitsCreateOrUpdateFuture struct {
 11320  	azure.FutureAPI
 11321  	// Result returns the result of the asynchronous operation.
 11322  	// If the operation has not completed it will return an error.
 11323  	Result func(ExpressRouteCircuitsClient) (ExpressRouteCircuit, error)
 11324  }
 11325  
 11326  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 11327  func (future *ExpressRouteCircuitsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 11328  	var azFuture azure.Future
 11329  	if err := json.Unmarshal(body, &azFuture); err != nil {
 11330  		return err
 11331  	}
 11332  	future.FutureAPI = &azFuture
 11333  	future.Result = future.result
 11334  	return nil
 11335  }
 11336  
 11337  // result is the default implementation for ExpressRouteCircuitsCreateOrUpdateFuture.Result.
 11338  func (future *ExpressRouteCircuitsCreateOrUpdateFuture) result(client ExpressRouteCircuitsClient) (erc ExpressRouteCircuit, err error) {
 11339  	var done bool
 11340  	done, err = future.DoneWithContext(context.Background(), client)
 11341  	if err != nil {
 11342  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 11343  		return
 11344  	}
 11345  	if !done {
 11346  		erc.Response.Response = future.Response()
 11347  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsCreateOrUpdateFuture")
 11348  		return
 11349  	}
 11350  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 11351  	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
 11352  		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
 11353  		if err != nil {
 11354  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
 11355  		}
 11356  	}
 11357  	return
 11358  }
 11359  
 11360  // ExpressRouteCircuitsDeleteFuture an abstraction for monitoring and retrieving the results of a
 11361  // long-running operation.
 11362  type ExpressRouteCircuitsDeleteFuture struct {
 11363  	azure.FutureAPI
 11364  	// Result returns the result of the asynchronous operation.
 11365  	// If the operation has not completed it will return an error.
 11366  	Result func(ExpressRouteCircuitsClient) (autorest.Response, error)
 11367  }
 11368  
 11369  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 11370  func (future *ExpressRouteCircuitsDeleteFuture) UnmarshalJSON(body []byte) error {
 11371  	var azFuture azure.Future
 11372  	if err := json.Unmarshal(body, &azFuture); err != nil {
 11373  		return err
 11374  	}
 11375  	future.FutureAPI = &azFuture
 11376  	future.Result = future.result
 11377  	return nil
 11378  }
 11379  
 11380  // result is the default implementation for ExpressRouteCircuitsDeleteFuture.Result.
 11381  func (future *ExpressRouteCircuitsDeleteFuture) result(client ExpressRouteCircuitsClient) (ar autorest.Response, err error) {
 11382  	var done bool
 11383  	done, err = future.DoneWithContext(context.Background(), client)
 11384  	if err != nil {
 11385  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsDeleteFuture", "Result", future.Response(), "Polling failure")
 11386  		return
 11387  	}
 11388  	if !done {
 11389  		ar.Response = future.Response()
 11390  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsDeleteFuture")
 11391  		return
 11392  	}
 11393  	ar.Response = future.Response()
 11394  	return
 11395  }
 11396  
 11397  // ExpressRouteCircuitServiceProviderProperties contains ServiceProviderProperties in an
 11398  // ExpressRouteCircuit.
 11399  type ExpressRouteCircuitServiceProviderProperties struct {
 11400  	// ServiceProviderName - The serviceProviderName.
 11401  	ServiceProviderName *string `json:"serviceProviderName,omitempty"`
 11402  	// PeeringLocation - The peering location.
 11403  	PeeringLocation *string `json:"peeringLocation,omitempty"`
 11404  	// BandwidthInMbps - The BandwidthInMbps.
 11405  	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
 11406  }
 11407  
 11408  // ExpressRouteCircuitSku contains SKU in an ExpressRouteCircuit.
 11409  type ExpressRouteCircuitSku struct {
 11410  	// Name - The name of the SKU.
 11411  	Name *string `json:"name,omitempty"`
 11412  	// Tier - The tier of the SKU. Possible values include: 'ExpressRouteCircuitSkuTierStandard', 'ExpressRouteCircuitSkuTierPremium', 'ExpressRouteCircuitSkuTierBasic', 'ExpressRouteCircuitSkuTierLocal'
 11413  	Tier ExpressRouteCircuitSkuTier `json:"tier,omitempty"`
 11414  	// Family - The family of the SKU. Possible values include: 'UnlimitedData', 'MeteredData'
 11415  	Family ExpressRouteCircuitSkuFamily `json:"family,omitempty"`
 11416  }
 11417  
 11418  // ExpressRouteCircuitsListArpTableFuture an abstraction for monitoring and retrieving the results of a
 11419  // long-running operation.
 11420  type ExpressRouteCircuitsListArpTableFuture struct {
 11421  	azure.FutureAPI
 11422  	// Result returns the result of the asynchronous operation.
 11423  	// If the operation has not completed it will return an error.
 11424  	Result func(ExpressRouteCircuitsClient) (ExpressRouteCircuitsArpTableListResult, error)
 11425  }
 11426  
 11427  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 11428  func (future *ExpressRouteCircuitsListArpTableFuture) UnmarshalJSON(body []byte) error {
 11429  	var azFuture azure.Future
 11430  	if err := json.Unmarshal(body, &azFuture); err != nil {
 11431  		return err
 11432  	}
 11433  	future.FutureAPI = &azFuture
 11434  	future.Result = future.result
 11435  	return nil
 11436  }
 11437  
 11438  // result is the default implementation for ExpressRouteCircuitsListArpTableFuture.Result.
 11439  func (future *ExpressRouteCircuitsListArpTableFuture) result(client ExpressRouteCircuitsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
 11440  	var done bool
 11441  	done, err = future.DoneWithContext(context.Background(), client)
 11442  	if err != nil {
 11443  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", future.Response(), "Polling failure")
 11444  		return
 11445  	}
 11446  	if !done {
 11447  		ercatlr.Response.Response = future.Response()
 11448  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListArpTableFuture")
 11449  		return
 11450  	}
 11451  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 11452  	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
 11453  		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
 11454  		if err != nil {
 11455  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
 11456  		}
 11457  	}
 11458  	return
 11459  }
 11460  
 11461  // ExpressRouteCircuitsListRoutesTableFuture an abstraction for monitoring and retrieving the results of a
 11462  // long-running operation.
 11463  type ExpressRouteCircuitsListRoutesTableFuture struct {
 11464  	azure.FutureAPI
 11465  	// Result returns the result of the asynchronous operation.
 11466  	// If the operation has not completed it will return an error.
 11467  	Result func(ExpressRouteCircuitsClient) (ExpressRouteCircuitsRoutesTableListResult, error)
 11468  }
 11469  
 11470  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 11471  func (future *ExpressRouteCircuitsListRoutesTableFuture) UnmarshalJSON(body []byte) error {
 11472  	var azFuture azure.Future
 11473  	if err := json.Unmarshal(body, &azFuture); err != nil {
 11474  		return err
 11475  	}
 11476  	future.FutureAPI = &azFuture
 11477  	future.Result = future.result
 11478  	return nil
 11479  }
 11480  
 11481  // result is the default implementation for ExpressRouteCircuitsListRoutesTableFuture.Result.
 11482  func (future *ExpressRouteCircuitsListRoutesTableFuture) result(client ExpressRouteCircuitsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
 11483  	var done bool
 11484  	done, err = future.DoneWithContext(context.Background(), client)
 11485  	if err != nil {
 11486  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
 11487  		return
 11488  	}
 11489  	if !done {
 11490  		ercrtlr.Response.Response = future.Response()
 11491  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableFuture")
 11492  		return
 11493  	}
 11494  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 11495  	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
 11496  		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
 11497  		if err != nil {
 11498  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
 11499  		}
 11500  	}
 11501  	return
 11502  }
 11503  
 11504  // ExpressRouteCircuitsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving the
 11505  // results of a long-running operation.
 11506  type ExpressRouteCircuitsListRoutesTableSummaryFuture struct {
 11507  	azure.FutureAPI
 11508  	// Result returns the result of the asynchronous operation.
 11509  	// If the operation has not completed it will return an error.
 11510  	Result func(ExpressRouteCircuitsClient) (ExpressRouteCircuitsRoutesTableSummaryListResult, error)
 11511  }
 11512  
 11513  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 11514  func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) UnmarshalJSON(body []byte) error {
 11515  	var azFuture azure.Future
 11516  	if err := json.Unmarshal(body, &azFuture); err != nil {
 11517  		return err
 11518  	}
 11519  	future.FutureAPI = &azFuture
 11520  	future.Result = future.result
 11521  	return nil
 11522  }
 11523  
 11524  // result is the default implementation for ExpressRouteCircuitsListRoutesTableSummaryFuture.Result.
 11525  func (future *ExpressRouteCircuitsListRoutesTableSummaryFuture) result(client ExpressRouteCircuitsClient) (ercrtslr ExpressRouteCircuitsRoutesTableSummaryListResult, err error) {
 11526  	var done bool
 11527  	done, err = future.DoneWithContext(context.Background(), client)
 11528  	if err != nil {
 11529  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
 11530  		return
 11531  	}
 11532  	if !done {
 11533  		ercrtslr.Response.Response = future.Response()
 11534  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCircuitsListRoutesTableSummaryFuture")
 11535  		return
 11536  	}
 11537  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 11538  	if ercrtslr.Response.Response, err = future.GetResult(sender); err == nil && ercrtslr.Response.Response.StatusCode != http.StatusNoContent {
 11539  		ercrtslr, err = client.ListRoutesTableSummaryResponder(ercrtslr.Response.Response)
 11540  		if err != nil {
 11541  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCircuitsListRoutesTableSummaryFuture", "Result", ercrtslr.Response.Response, "Failure responding to request")
 11542  		}
 11543  	}
 11544  	return
 11545  }
 11546  
 11547  // ExpressRouteCircuitsRoutesTableListResult response for ListRoutesTable associated with the Express Route
 11548  // Circuits API.
 11549  type ExpressRouteCircuitsRoutesTableListResult struct {
 11550  	autorest.Response `json:"-"`
 11551  	// Value - The list of routes table.
 11552  	Value *[]ExpressRouteCircuitRoutesTable `json:"value,omitempty"`
 11553  	// NextLink - The URL to get the next set of results.
 11554  	NextLink *string `json:"nextLink,omitempty"`
 11555  }
 11556  
 11557  // ExpressRouteCircuitsRoutesTableSummaryListResult response for ListRoutesTable associated with the
 11558  // Express Route Circuits API.
 11559  type ExpressRouteCircuitsRoutesTableSummaryListResult struct {
 11560  	autorest.Response `json:"-"`
 11561  	// Value - A list of the routes table.
 11562  	Value *[]ExpressRouteCircuitRoutesTableSummary `json:"value,omitempty"`
 11563  	// NextLink - The URL to get the next set of results.
 11564  	NextLink *string `json:"nextLink,omitempty"`
 11565  }
 11566  
 11567  // ExpressRouteCircuitStats contains stats associated with the peering.
 11568  type ExpressRouteCircuitStats struct {
 11569  	autorest.Response `json:"-"`
 11570  	// PrimarybytesIn - The Primary BytesIn of the peering.
 11571  	PrimarybytesIn *int64 `json:"primarybytesIn,omitempty"`
 11572  	// PrimarybytesOut - The primary BytesOut of the peering.
 11573  	PrimarybytesOut *int64 `json:"primarybytesOut,omitempty"`
 11574  	// SecondarybytesIn - The secondary BytesIn of the peering.
 11575  	SecondarybytesIn *int64 `json:"secondarybytesIn,omitempty"`
 11576  	// SecondarybytesOut - The secondary BytesOut of the peering.
 11577  	SecondarybytesOut *int64 `json:"secondarybytesOut,omitempty"`
 11578  }
 11579  
 11580  // ExpressRouteConnection expressRouteConnection resource.
 11581  type ExpressRouteConnection struct {
 11582  	autorest.Response `json:"-"`
 11583  	// ExpressRouteConnectionProperties - Properties of the express route connection.
 11584  	*ExpressRouteConnectionProperties `json:"properties,omitempty"`
 11585  	// Name - The name of the resource.
 11586  	Name *string `json:"name,omitempty"`
 11587  	// ID - Resource ID.
 11588  	ID *string `json:"id,omitempty"`
 11589  }
 11590  
 11591  // MarshalJSON is the custom marshaler for ExpressRouteConnection.
 11592  func (erc ExpressRouteConnection) MarshalJSON() ([]byte, error) {
 11593  	objectMap := make(map[string]interface{})
 11594  	if erc.ExpressRouteConnectionProperties != nil {
 11595  		objectMap["properties"] = erc.ExpressRouteConnectionProperties
 11596  	}
 11597  	if erc.Name != nil {
 11598  		objectMap["name"] = erc.Name
 11599  	}
 11600  	if erc.ID != nil {
 11601  		objectMap["id"] = erc.ID
 11602  	}
 11603  	return json.Marshal(objectMap)
 11604  }
 11605  
 11606  // UnmarshalJSON is the custom unmarshaler for ExpressRouteConnection struct.
 11607  func (erc *ExpressRouteConnection) UnmarshalJSON(body []byte) error {
 11608  	var m map[string]*json.RawMessage
 11609  	err := json.Unmarshal(body, &m)
 11610  	if err != nil {
 11611  		return err
 11612  	}
 11613  	for k, v := range m {
 11614  		switch k {
 11615  		case "properties":
 11616  			if v != nil {
 11617  				var expressRouteConnectionProperties ExpressRouteConnectionProperties
 11618  				err = json.Unmarshal(*v, &expressRouteConnectionProperties)
 11619  				if err != nil {
 11620  					return err
 11621  				}
 11622  				erc.ExpressRouteConnectionProperties = &expressRouteConnectionProperties
 11623  			}
 11624  		case "name":
 11625  			if v != nil {
 11626  				var name string
 11627  				err = json.Unmarshal(*v, &name)
 11628  				if err != nil {
 11629  					return err
 11630  				}
 11631  				erc.Name = &name
 11632  			}
 11633  		case "id":
 11634  			if v != nil {
 11635  				var ID string
 11636  				err = json.Unmarshal(*v, &ID)
 11637  				if err != nil {
 11638  					return err
 11639  				}
 11640  				erc.ID = &ID
 11641  			}
 11642  		}
 11643  	}
 11644  
 11645  	return nil
 11646  }
 11647  
 11648  // ExpressRouteConnectionID the ID of the ExpressRouteConnection.
 11649  type ExpressRouteConnectionID struct {
 11650  	// ID - READ-ONLY; The ID of the ExpressRouteConnection.
 11651  	ID *string `json:"id,omitempty"`
 11652  }
 11653  
 11654  // MarshalJSON is the custom marshaler for ExpressRouteConnectionID.
 11655  func (erci ExpressRouteConnectionID) MarshalJSON() ([]byte, error) {
 11656  	objectMap := make(map[string]interface{})
 11657  	return json.Marshal(objectMap)
 11658  }
 11659  
 11660  // ExpressRouteConnectionList expressRouteConnection list.
 11661  type ExpressRouteConnectionList struct {
 11662  	autorest.Response `json:"-"`
 11663  	// Value - The list of ExpressRoute connections.
 11664  	Value *[]ExpressRouteConnection `json:"value,omitempty"`
 11665  }
 11666  
 11667  // ExpressRouteConnectionProperties properties of the ExpressRouteConnection subresource.
 11668  type ExpressRouteConnectionProperties struct {
 11669  	// ProvisioningState - READ-ONLY; The provisioning state of the express route connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 11670  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 11671  	// ExpressRouteCircuitPeering - The ExpressRoute circuit peering.
 11672  	ExpressRouteCircuitPeering *ExpressRouteCircuitPeeringID `json:"expressRouteCircuitPeering,omitempty"`
 11673  	// AuthorizationKey - Authorization key to establish the connection.
 11674  	AuthorizationKey *string `json:"authorizationKey,omitempty"`
 11675  	// RoutingWeight - The routing weight associated to the connection.
 11676  	RoutingWeight *int32 `json:"routingWeight,omitempty"`
 11677  	// EnableInternetSecurity - Enable internet security.
 11678  	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
 11679  	// RoutingConfiguration - The Routing Configuration indicating the associated and propagated route tables on this connection.
 11680  	RoutingConfiguration *RoutingConfiguration `json:"routingConfiguration,omitempty"`
 11681  }
 11682  
 11683  // MarshalJSON is the custom marshaler for ExpressRouteConnectionProperties.
 11684  func (ercp ExpressRouteConnectionProperties) MarshalJSON() ([]byte, error) {
 11685  	objectMap := make(map[string]interface{})
 11686  	if ercp.ExpressRouteCircuitPeering != nil {
 11687  		objectMap["expressRouteCircuitPeering"] = ercp.ExpressRouteCircuitPeering
 11688  	}
 11689  	if ercp.AuthorizationKey != nil {
 11690  		objectMap["authorizationKey"] = ercp.AuthorizationKey
 11691  	}
 11692  	if ercp.RoutingWeight != nil {
 11693  		objectMap["routingWeight"] = ercp.RoutingWeight
 11694  	}
 11695  	if ercp.EnableInternetSecurity != nil {
 11696  		objectMap["enableInternetSecurity"] = ercp.EnableInternetSecurity
 11697  	}
 11698  	if ercp.RoutingConfiguration != nil {
 11699  		objectMap["routingConfiguration"] = ercp.RoutingConfiguration
 11700  	}
 11701  	return json.Marshal(objectMap)
 11702  }
 11703  
 11704  // ExpressRouteConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
 11705  // a long-running operation.
 11706  type ExpressRouteConnectionsCreateOrUpdateFuture struct {
 11707  	azure.FutureAPI
 11708  	// Result returns the result of the asynchronous operation.
 11709  	// If the operation has not completed it will return an error.
 11710  	Result func(ExpressRouteConnectionsClient) (ExpressRouteConnection, error)
 11711  }
 11712  
 11713  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 11714  func (future *ExpressRouteConnectionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 11715  	var azFuture azure.Future
 11716  	if err := json.Unmarshal(body, &azFuture); err != nil {
 11717  		return err
 11718  	}
 11719  	future.FutureAPI = &azFuture
 11720  	future.Result = future.result
 11721  	return nil
 11722  }
 11723  
 11724  // result is the default implementation for ExpressRouteConnectionsCreateOrUpdateFuture.Result.
 11725  func (future *ExpressRouteConnectionsCreateOrUpdateFuture) result(client ExpressRouteConnectionsClient) (erc ExpressRouteConnection, err error) {
 11726  	var done bool
 11727  	done, err = future.DoneWithContext(context.Background(), client)
 11728  	if err != nil {
 11729  		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 11730  		return
 11731  	}
 11732  	if !done {
 11733  		erc.Response.Response = future.Response()
 11734  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsCreateOrUpdateFuture")
 11735  		return
 11736  	}
 11737  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 11738  	if erc.Response.Response, err = future.GetResult(sender); err == nil && erc.Response.Response.StatusCode != http.StatusNoContent {
 11739  		erc, err = client.CreateOrUpdateResponder(erc.Response.Response)
 11740  		if err != nil {
 11741  			err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsCreateOrUpdateFuture", "Result", erc.Response.Response, "Failure responding to request")
 11742  		}
 11743  	}
 11744  	return
 11745  }
 11746  
 11747  // ExpressRouteConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a
 11748  // long-running operation.
 11749  type ExpressRouteConnectionsDeleteFuture struct {
 11750  	azure.FutureAPI
 11751  	// Result returns the result of the asynchronous operation.
 11752  	// If the operation has not completed it will return an error.
 11753  	Result func(ExpressRouteConnectionsClient) (autorest.Response, error)
 11754  }
 11755  
 11756  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 11757  func (future *ExpressRouteConnectionsDeleteFuture) UnmarshalJSON(body []byte) error {
 11758  	var azFuture azure.Future
 11759  	if err := json.Unmarshal(body, &azFuture); err != nil {
 11760  		return err
 11761  	}
 11762  	future.FutureAPI = &azFuture
 11763  	future.Result = future.result
 11764  	return nil
 11765  }
 11766  
 11767  // result is the default implementation for ExpressRouteConnectionsDeleteFuture.Result.
 11768  func (future *ExpressRouteConnectionsDeleteFuture) result(client ExpressRouteConnectionsClient) (ar autorest.Response, err error) {
 11769  	var done bool
 11770  	done, err = future.DoneWithContext(context.Background(), client)
 11771  	if err != nil {
 11772  		err = autorest.NewErrorWithError(err, "network.ExpressRouteConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
 11773  		return
 11774  	}
 11775  	if !done {
 11776  		ar.Response = future.Response()
 11777  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteConnectionsDeleteFuture")
 11778  		return
 11779  	}
 11780  	ar.Response = future.Response()
 11781  	return
 11782  }
 11783  
 11784  // ExpressRouteCrossConnection expressRouteCrossConnection resource.
 11785  type ExpressRouteCrossConnection struct {
 11786  	autorest.Response `json:"-"`
 11787  	// ExpressRouteCrossConnectionProperties - Properties of the express route cross connection.
 11788  	*ExpressRouteCrossConnectionProperties `json:"properties,omitempty"`
 11789  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 11790  	Etag *string `json:"etag,omitempty"`
 11791  	// ID - Resource ID.
 11792  	ID *string `json:"id,omitempty"`
 11793  	// Name - READ-ONLY; Resource name.
 11794  	Name *string `json:"name,omitempty"`
 11795  	// Type - READ-ONLY; Resource type.
 11796  	Type *string `json:"type,omitempty"`
 11797  	// Location - Resource location.
 11798  	Location *string `json:"location,omitempty"`
 11799  	// Tags - Resource tags.
 11800  	Tags map[string]*string `json:"tags"`
 11801  }
 11802  
 11803  // MarshalJSON is the custom marshaler for ExpressRouteCrossConnection.
 11804  func (ercc ExpressRouteCrossConnection) MarshalJSON() ([]byte, error) {
 11805  	objectMap := make(map[string]interface{})
 11806  	if ercc.ExpressRouteCrossConnectionProperties != nil {
 11807  		objectMap["properties"] = ercc.ExpressRouteCrossConnectionProperties
 11808  	}
 11809  	if ercc.ID != nil {
 11810  		objectMap["id"] = ercc.ID
 11811  	}
 11812  	if ercc.Location != nil {
 11813  		objectMap["location"] = ercc.Location
 11814  	}
 11815  	if ercc.Tags != nil {
 11816  		objectMap["tags"] = ercc.Tags
 11817  	}
 11818  	return json.Marshal(objectMap)
 11819  }
 11820  
 11821  // UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnection struct.
 11822  func (ercc *ExpressRouteCrossConnection) UnmarshalJSON(body []byte) error {
 11823  	var m map[string]*json.RawMessage
 11824  	err := json.Unmarshal(body, &m)
 11825  	if err != nil {
 11826  		return err
 11827  	}
 11828  	for k, v := range m {
 11829  		switch k {
 11830  		case "properties":
 11831  			if v != nil {
 11832  				var expressRouteCrossConnectionProperties ExpressRouteCrossConnectionProperties
 11833  				err = json.Unmarshal(*v, &expressRouteCrossConnectionProperties)
 11834  				if err != nil {
 11835  					return err
 11836  				}
 11837  				ercc.ExpressRouteCrossConnectionProperties = &expressRouteCrossConnectionProperties
 11838  			}
 11839  		case "etag":
 11840  			if v != nil {
 11841  				var etag string
 11842  				err = json.Unmarshal(*v, &etag)
 11843  				if err != nil {
 11844  					return err
 11845  				}
 11846  				ercc.Etag = &etag
 11847  			}
 11848  		case "id":
 11849  			if v != nil {
 11850  				var ID string
 11851  				err = json.Unmarshal(*v, &ID)
 11852  				if err != nil {
 11853  					return err
 11854  				}
 11855  				ercc.ID = &ID
 11856  			}
 11857  		case "name":
 11858  			if v != nil {
 11859  				var name string
 11860  				err = json.Unmarshal(*v, &name)
 11861  				if err != nil {
 11862  					return err
 11863  				}
 11864  				ercc.Name = &name
 11865  			}
 11866  		case "type":
 11867  			if v != nil {
 11868  				var typeVar string
 11869  				err = json.Unmarshal(*v, &typeVar)
 11870  				if err != nil {
 11871  					return err
 11872  				}
 11873  				ercc.Type = &typeVar
 11874  			}
 11875  		case "location":
 11876  			if v != nil {
 11877  				var location string
 11878  				err = json.Unmarshal(*v, &location)
 11879  				if err != nil {
 11880  					return err
 11881  				}
 11882  				ercc.Location = &location
 11883  			}
 11884  		case "tags":
 11885  			if v != nil {
 11886  				var tags map[string]*string
 11887  				err = json.Unmarshal(*v, &tags)
 11888  				if err != nil {
 11889  					return err
 11890  				}
 11891  				ercc.Tags = tags
 11892  			}
 11893  		}
 11894  	}
 11895  
 11896  	return nil
 11897  }
 11898  
 11899  // ExpressRouteCrossConnectionListResult response for ListExpressRouteCrossConnection API service call.
 11900  type ExpressRouteCrossConnectionListResult struct {
 11901  	autorest.Response `json:"-"`
 11902  	// Value - A list of ExpressRouteCrossConnection resources.
 11903  	Value *[]ExpressRouteCrossConnection `json:"value,omitempty"`
 11904  	// NextLink - READ-ONLY; The URL to get the next set of results.
 11905  	NextLink *string `json:"nextLink,omitempty"`
 11906  }
 11907  
 11908  // MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionListResult.
 11909  func (ercclr ExpressRouteCrossConnectionListResult) MarshalJSON() ([]byte, error) {
 11910  	objectMap := make(map[string]interface{})
 11911  	if ercclr.Value != nil {
 11912  		objectMap["value"] = ercclr.Value
 11913  	}
 11914  	return json.Marshal(objectMap)
 11915  }
 11916  
 11917  // ExpressRouteCrossConnectionListResultIterator provides access to a complete listing of
 11918  // ExpressRouteCrossConnection values.
 11919  type ExpressRouteCrossConnectionListResultIterator struct {
 11920  	i    int
 11921  	page ExpressRouteCrossConnectionListResultPage
 11922  }
 11923  
 11924  // NextWithContext advances to the next value.  If there was an error making
 11925  // the request the iterator does not advance and the error is returned.
 11926  func (iter *ExpressRouteCrossConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
 11927  	if tracing.IsEnabled() {
 11928  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultIterator.NextWithContext")
 11929  		defer func() {
 11930  			sc := -1
 11931  			if iter.Response().Response.Response != nil {
 11932  				sc = iter.Response().Response.Response.StatusCode
 11933  			}
 11934  			tracing.EndSpan(ctx, sc, err)
 11935  		}()
 11936  	}
 11937  	iter.i++
 11938  	if iter.i < len(iter.page.Values()) {
 11939  		return nil
 11940  	}
 11941  	err = iter.page.NextWithContext(ctx)
 11942  	if err != nil {
 11943  		iter.i--
 11944  		return err
 11945  	}
 11946  	iter.i = 0
 11947  	return nil
 11948  }
 11949  
 11950  // Next advances to the next value.  If there was an error making
 11951  // the request the iterator does not advance and the error is returned.
 11952  // Deprecated: Use NextWithContext() instead.
 11953  func (iter *ExpressRouteCrossConnectionListResultIterator) Next() error {
 11954  	return iter.NextWithContext(context.Background())
 11955  }
 11956  
 11957  // NotDone returns true if the enumeration should be started or is not yet complete.
 11958  func (iter ExpressRouteCrossConnectionListResultIterator) NotDone() bool {
 11959  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 11960  }
 11961  
 11962  // Response returns the raw server response from the last page request.
 11963  func (iter ExpressRouteCrossConnectionListResultIterator) Response() ExpressRouteCrossConnectionListResult {
 11964  	return iter.page.Response()
 11965  }
 11966  
 11967  // Value returns the current value or a zero-initialized value if the
 11968  // iterator has advanced beyond the end of the collection.
 11969  func (iter ExpressRouteCrossConnectionListResultIterator) Value() ExpressRouteCrossConnection {
 11970  	if !iter.page.NotDone() {
 11971  		return ExpressRouteCrossConnection{}
 11972  	}
 11973  	return iter.page.Values()[iter.i]
 11974  }
 11975  
 11976  // Creates a new instance of the ExpressRouteCrossConnectionListResultIterator type.
 11977  func NewExpressRouteCrossConnectionListResultIterator(page ExpressRouteCrossConnectionListResultPage) ExpressRouteCrossConnectionListResultIterator {
 11978  	return ExpressRouteCrossConnectionListResultIterator{page: page}
 11979  }
 11980  
 11981  // IsEmpty returns true if the ListResult contains no values.
 11982  func (ercclr ExpressRouteCrossConnectionListResult) IsEmpty() bool {
 11983  	return ercclr.Value == nil || len(*ercclr.Value) == 0
 11984  }
 11985  
 11986  // hasNextLink returns true if the NextLink is not empty.
 11987  func (ercclr ExpressRouteCrossConnectionListResult) hasNextLink() bool {
 11988  	return ercclr.NextLink != nil && len(*ercclr.NextLink) != 0
 11989  }
 11990  
 11991  // expressRouteCrossConnectionListResultPreparer prepares a request to retrieve the next set of results.
 11992  // It returns nil if no more results exist.
 11993  func (ercclr ExpressRouteCrossConnectionListResult) expressRouteCrossConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
 11994  	if !ercclr.hasNextLink() {
 11995  		return nil, nil
 11996  	}
 11997  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 11998  		autorest.AsJSON(),
 11999  		autorest.AsGet(),
 12000  		autorest.WithBaseURL(to.String(ercclr.NextLink)))
 12001  }
 12002  
 12003  // ExpressRouteCrossConnectionListResultPage contains a page of ExpressRouteCrossConnection values.
 12004  type ExpressRouteCrossConnectionListResultPage struct {
 12005  	fn     func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)
 12006  	ercclr ExpressRouteCrossConnectionListResult
 12007  }
 12008  
 12009  // NextWithContext advances to the next page of values.  If there was an error making
 12010  // the request the page does not advance and the error is returned.
 12011  func (page *ExpressRouteCrossConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
 12012  	if tracing.IsEnabled() {
 12013  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionListResultPage.NextWithContext")
 12014  		defer func() {
 12015  			sc := -1
 12016  			if page.Response().Response.Response != nil {
 12017  				sc = page.Response().Response.Response.StatusCode
 12018  			}
 12019  			tracing.EndSpan(ctx, sc, err)
 12020  		}()
 12021  	}
 12022  	for {
 12023  		next, err := page.fn(ctx, page.ercclr)
 12024  		if err != nil {
 12025  			return err
 12026  		}
 12027  		page.ercclr = next
 12028  		if !next.hasNextLink() || !next.IsEmpty() {
 12029  			break
 12030  		}
 12031  	}
 12032  	return nil
 12033  }
 12034  
 12035  // Next advances to the next page of values.  If there was an error making
 12036  // the request the page does not advance and the error is returned.
 12037  // Deprecated: Use NextWithContext() instead.
 12038  func (page *ExpressRouteCrossConnectionListResultPage) Next() error {
 12039  	return page.NextWithContext(context.Background())
 12040  }
 12041  
 12042  // NotDone returns true if the page enumeration should be started or is not yet complete.
 12043  func (page ExpressRouteCrossConnectionListResultPage) NotDone() bool {
 12044  	return !page.ercclr.IsEmpty()
 12045  }
 12046  
 12047  // Response returns the raw server response from the last page request.
 12048  func (page ExpressRouteCrossConnectionListResultPage) Response() ExpressRouteCrossConnectionListResult {
 12049  	return page.ercclr
 12050  }
 12051  
 12052  // Values returns the slice of values for the current page or nil if there are no values.
 12053  func (page ExpressRouteCrossConnectionListResultPage) Values() []ExpressRouteCrossConnection {
 12054  	if page.ercclr.IsEmpty() {
 12055  		return nil
 12056  	}
 12057  	return *page.ercclr.Value
 12058  }
 12059  
 12060  // Creates a new instance of the ExpressRouteCrossConnectionListResultPage type.
 12061  func NewExpressRouteCrossConnectionListResultPage(cur ExpressRouteCrossConnectionListResult, getNextPage func(context.Context, ExpressRouteCrossConnectionListResult) (ExpressRouteCrossConnectionListResult, error)) ExpressRouteCrossConnectionListResultPage {
 12062  	return ExpressRouteCrossConnectionListResultPage{
 12063  		fn:     getNextPage,
 12064  		ercclr: cur,
 12065  	}
 12066  }
 12067  
 12068  // ExpressRouteCrossConnectionPeering peering in an ExpressRoute Cross Connection resource.
 12069  type ExpressRouteCrossConnectionPeering struct {
 12070  	autorest.Response `json:"-"`
 12071  	// ExpressRouteCrossConnectionPeeringProperties - Properties of the express route cross connection peering.
 12072  	*ExpressRouteCrossConnectionPeeringProperties `json:"properties,omitempty"`
 12073  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 12074  	Name *string `json:"name,omitempty"`
 12075  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 12076  	Etag *string `json:"etag,omitempty"`
 12077  	// ID - Resource ID.
 12078  	ID *string `json:"id,omitempty"`
 12079  }
 12080  
 12081  // MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeering.
 12082  func (erccp ExpressRouteCrossConnectionPeering) MarshalJSON() ([]byte, error) {
 12083  	objectMap := make(map[string]interface{})
 12084  	if erccp.ExpressRouteCrossConnectionPeeringProperties != nil {
 12085  		objectMap["properties"] = erccp.ExpressRouteCrossConnectionPeeringProperties
 12086  	}
 12087  	if erccp.Name != nil {
 12088  		objectMap["name"] = erccp.Name
 12089  	}
 12090  	if erccp.ID != nil {
 12091  		objectMap["id"] = erccp.ID
 12092  	}
 12093  	return json.Marshal(objectMap)
 12094  }
 12095  
 12096  // UnmarshalJSON is the custom unmarshaler for ExpressRouteCrossConnectionPeering struct.
 12097  func (erccp *ExpressRouteCrossConnectionPeering) UnmarshalJSON(body []byte) error {
 12098  	var m map[string]*json.RawMessage
 12099  	err := json.Unmarshal(body, &m)
 12100  	if err != nil {
 12101  		return err
 12102  	}
 12103  	for k, v := range m {
 12104  		switch k {
 12105  		case "properties":
 12106  			if v != nil {
 12107  				var expressRouteCrossConnectionPeeringProperties ExpressRouteCrossConnectionPeeringProperties
 12108  				err = json.Unmarshal(*v, &expressRouteCrossConnectionPeeringProperties)
 12109  				if err != nil {
 12110  					return err
 12111  				}
 12112  				erccp.ExpressRouteCrossConnectionPeeringProperties = &expressRouteCrossConnectionPeeringProperties
 12113  			}
 12114  		case "name":
 12115  			if v != nil {
 12116  				var name string
 12117  				err = json.Unmarshal(*v, &name)
 12118  				if err != nil {
 12119  					return err
 12120  				}
 12121  				erccp.Name = &name
 12122  			}
 12123  		case "etag":
 12124  			if v != nil {
 12125  				var etag string
 12126  				err = json.Unmarshal(*v, &etag)
 12127  				if err != nil {
 12128  					return err
 12129  				}
 12130  				erccp.Etag = &etag
 12131  			}
 12132  		case "id":
 12133  			if v != nil {
 12134  				var ID string
 12135  				err = json.Unmarshal(*v, &ID)
 12136  				if err != nil {
 12137  					return err
 12138  				}
 12139  				erccp.ID = &ID
 12140  			}
 12141  		}
 12142  	}
 12143  
 12144  	return nil
 12145  }
 12146  
 12147  // ExpressRouteCrossConnectionPeeringList response for ListPeering API service call retrieves all peerings
 12148  // that belong to an ExpressRouteCrossConnection.
 12149  type ExpressRouteCrossConnectionPeeringList struct {
 12150  	autorest.Response `json:"-"`
 12151  	// Value - The peerings in an express route cross connection.
 12152  	Value *[]ExpressRouteCrossConnectionPeering `json:"value,omitempty"`
 12153  	// NextLink - READ-ONLY; The URL to get the next set of results.
 12154  	NextLink *string `json:"nextLink,omitempty"`
 12155  }
 12156  
 12157  // MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeeringList.
 12158  func (erccpl ExpressRouteCrossConnectionPeeringList) MarshalJSON() ([]byte, error) {
 12159  	objectMap := make(map[string]interface{})
 12160  	if erccpl.Value != nil {
 12161  		objectMap["value"] = erccpl.Value
 12162  	}
 12163  	return json.Marshal(objectMap)
 12164  }
 12165  
 12166  // ExpressRouteCrossConnectionPeeringListIterator provides access to a complete listing of
 12167  // ExpressRouteCrossConnectionPeering values.
 12168  type ExpressRouteCrossConnectionPeeringListIterator struct {
 12169  	i    int
 12170  	page ExpressRouteCrossConnectionPeeringListPage
 12171  }
 12172  
 12173  // NextWithContext advances to the next value.  If there was an error making
 12174  // the request the iterator does not advance and the error is returned.
 12175  func (iter *ExpressRouteCrossConnectionPeeringListIterator) NextWithContext(ctx context.Context) (err error) {
 12176  	if tracing.IsEnabled() {
 12177  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListIterator.NextWithContext")
 12178  		defer func() {
 12179  			sc := -1
 12180  			if iter.Response().Response.Response != nil {
 12181  				sc = iter.Response().Response.Response.StatusCode
 12182  			}
 12183  			tracing.EndSpan(ctx, sc, err)
 12184  		}()
 12185  	}
 12186  	iter.i++
 12187  	if iter.i < len(iter.page.Values()) {
 12188  		return nil
 12189  	}
 12190  	err = iter.page.NextWithContext(ctx)
 12191  	if err != nil {
 12192  		iter.i--
 12193  		return err
 12194  	}
 12195  	iter.i = 0
 12196  	return nil
 12197  }
 12198  
 12199  // Next advances to the next value.  If there was an error making
 12200  // the request the iterator does not advance and the error is returned.
 12201  // Deprecated: Use NextWithContext() instead.
 12202  func (iter *ExpressRouteCrossConnectionPeeringListIterator) Next() error {
 12203  	return iter.NextWithContext(context.Background())
 12204  }
 12205  
 12206  // NotDone returns true if the enumeration should be started or is not yet complete.
 12207  func (iter ExpressRouteCrossConnectionPeeringListIterator) NotDone() bool {
 12208  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 12209  }
 12210  
 12211  // Response returns the raw server response from the last page request.
 12212  func (iter ExpressRouteCrossConnectionPeeringListIterator) Response() ExpressRouteCrossConnectionPeeringList {
 12213  	return iter.page.Response()
 12214  }
 12215  
 12216  // Value returns the current value or a zero-initialized value if the
 12217  // iterator has advanced beyond the end of the collection.
 12218  func (iter ExpressRouteCrossConnectionPeeringListIterator) Value() ExpressRouteCrossConnectionPeering {
 12219  	if !iter.page.NotDone() {
 12220  		return ExpressRouteCrossConnectionPeering{}
 12221  	}
 12222  	return iter.page.Values()[iter.i]
 12223  }
 12224  
 12225  // Creates a new instance of the ExpressRouteCrossConnectionPeeringListIterator type.
 12226  func NewExpressRouteCrossConnectionPeeringListIterator(page ExpressRouteCrossConnectionPeeringListPage) ExpressRouteCrossConnectionPeeringListIterator {
 12227  	return ExpressRouteCrossConnectionPeeringListIterator{page: page}
 12228  }
 12229  
 12230  // IsEmpty returns true if the ListResult contains no values.
 12231  func (erccpl ExpressRouteCrossConnectionPeeringList) IsEmpty() bool {
 12232  	return erccpl.Value == nil || len(*erccpl.Value) == 0
 12233  }
 12234  
 12235  // hasNextLink returns true if the NextLink is not empty.
 12236  func (erccpl ExpressRouteCrossConnectionPeeringList) hasNextLink() bool {
 12237  	return erccpl.NextLink != nil && len(*erccpl.NextLink) != 0
 12238  }
 12239  
 12240  // expressRouteCrossConnectionPeeringListPreparer prepares a request to retrieve the next set of results.
 12241  // It returns nil if no more results exist.
 12242  func (erccpl ExpressRouteCrossConnectionPeeringList) expressRouteCrossConnectionPeeringListPreparer(ctx context.Context) (*http.Request, error) {
 12243  	if !erccpl.hasNextLink() {
 12244  		return nil, nil
 12245  	}
 12246  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 12247  		autorest.AsJSON(),
 12248  		autorest.AsGet(),
 12249  		autorest.WithBaseURL(to.String(erccpl.NextLink)))
 12250  }
 12251  
 12252  // ExpressRouteCrossConnectionPeeringListPage contains a page of ExpressRouteCrossConnectionPeering values.
 12253  type ExpressRouteCrossConnectionPeeringListPage struct {
 12254  	fn     func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)
 12255  	erccpl ExpressRouteCrossConnectionPeeringList
 12256  }
 12257  
 12258  // NextWithContext advances to the next page of values.  If there was an error making
 12259  // the request the page does not advance and the error is returned.
 12260  func (page *ExpressRouteCrossConnectionPeeringListPage) NextWithContext(ctx context.Context) (err error) {
 12261  	if tracing.IsEnabled() {
 12262  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteCrossConnectionPeeringListPage.NextWithContext")
 12263  		defer func() {
 12264  			sc := -1
 12265  			if page.Response().Response.Response != nil {
 12266  				sc = page.Response().Response.Response.StatusCode
 12267  			}
 12268  			tracing.EndSpan(ctx, sc, err)
 12269  		}()
 12270  	}
 12271  	for {
 12272  		next, err := page.fn(ctx, page.erccpl)
 12273  		if err != nil {
 12274  			return err
 12275  		}
 12276  		page.erccpl = next
 12277  		if !next.hasNextLink() || !next.IsEmpty() {
 12278  			break
 12279  		}
 12280  	}
 12281  	return nil
 12282  }
 12283  
 12284  // Next advances to the next page of values.  If there was an error making
 12285  // the request the page does not advance and the error is returned.
 12286  // Deprecated: Use NextWithContext() instead.
 12287  func (page *ExpressRouteCrossConnectionPeeringListPage) Next() error {
 12288  	return page.NextWithContext(context.Background())
 12289  }
 12290  
 12291  // NotDone returns true if the page enumeration should be started or is not yet complete.
 12292  func (page ExpressRouteCrossConnectionPeeringListPage) NotDone() bool {
 12293  	return !page.erccpl.IsEmpty()
 12294  }
 12295  
 12296  // Response returns the raw server response from the last page request.
 12297  func (page ExpressRouteCrossConnectionPeeringListPage) Response() ExpressRouteCrossConnectionPeeringList {
 12298  	return page.erccpl
 12299  }
 12300  
 12301  // Values returns the slice of values for the current page or nil if there are no values.
 12302  func (page ExpressRouteCrossConnectionPeeringListPage) Values() []ExpressRouteCrossConnectionPeering {
 12303  	if page.erccpl.IsEmpty() {
 12304  		return nil
 12305  	}
 12306  	return *page.erccpl.Value
 12307  }
 12308  
 12309  // Creates a new instance of the ExpressRouteCrossConnectionPeeringListPage type.
 12310  func NewExpressRouteCrossConnectionPeeringListPage(cur ExpressRouteCrossConnectionPeeringList, getNextPage func(context.Context, ExpressRouteCrossConnectionPeeringList) (ExpressRouteCrossConnectionPeeringList, error)) ExpressRouteCrossConnectionPeeringListPage {
 12311  	return ExpressRouteCrossConnectionPeeringListPage{
 12312  		fn:     getNextPage,
 12313  		erccpl: cur,
 12314  	}
 12315  }
 12316  
 12317  // ExpressRouteCrossConnectionPeeringProperties properties of express route cross connection peering.
 12318  type ExpressRouteCrossConnectionPeeringProperties struct {
 12319  	// PeeringType - The peering type. Possible values include: 'AzurePublicPeering', 'AzurePrivatePeering', 'MicrosoftPeering'
 12320  	PeeringType ExpressRoutePeeringType `json:"peeringType,omitempty"`
 12321  	// State - The peering state. Possible values include: 'ExpressRoutePeeringStateDisabled', 'ExpressRoutePeeringStateEnabled'
 12322  	State ExpressRoutePeeringState `json:"state,omitempty"`
 12323  	// AzureASN - READ-ONLY; The Azure ASN.
 12324  	AzureASN *int32 `json:"azureASN,omitempty"`
 12325  	// PeerASN - The peer ASN.
 12326  	PeerASN *int64 `json:"peerASN,omitempty"`
 12327  	// PrimaryPeerAddressPrefix - The primary address prefix.
 12328  	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
 12329  	// SecondaryPeerAddressPrefix - The secondary address prefix.
 12330  	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
 12331  	// PrimaryAzurePort - READ-ONLY; The primary port.
 12332  	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
 12333  	// SecondaryAzurePort - READ-ONLY; The secondary port.
 12334  	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
 12335  	// SharedKey - The shared key.
 12336  	SharedKey *string `json:"sharedKey,omitempty"`
 12337  	// VlanID - The VLAN ID.
 12338  	VlanID *int32 `json:"vlanId,omitempty"`
 12339  	// MicrosoftPeeringConfig - The Microsoft peering configuration.
 12340  	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
 12341  	// ProvisioningState - READ-ONLY; The provisioning state of the express route cross connection peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 12342  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 12343  	// GatewayManagerEtag - The GatewayManager Etag.
 12344  	GatewayManagerEtag *string `json:"gatewayManagerEtag,omitempty"`
 12345  	// LastModifiedBy - READ-ONLY; Who was the last to modify the peering.
 12346  	LastModifiedBy *string `json:"lastModifiedBy,omitempty"`
 12347  	// Ipv6PeeringConfig - The IPv6 peering configuration.
 12348  	Ipv6PeeringConfig *Ipv6ExpressRouteCircuitPeeringConfig `json:"ipv6PeeringConfig,omitempty"`
 12349  }
 12350  
 12351  // MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionPeeringProperties.
 12352  func (erccpp ExpressRouteCrossConnectionPeeringProperties) MarshalJSON() ([]byte, error) {
 12353  	objectMap := make(map[string]interface{})
 12354  	if erccpp.PeeringType != "" {
 12355  		objectMap["peeringType"] = erccpp.PeeringType
 12356  	}
 12357  	if erccpp.State != "" {
 12358  		objectMap["state"] = erccpp.State
 12359  	}
 12360  	if erccpp.PeerASN != nil {
 12361  		objectMap["peerASN"] = erccpp.PeerASN
 12362  	}
 12363  	if erccpp.PrimaryPeerAddressPrefix != nil {
 12364  		objectMap["primaryPeerAddressPrefix"] = erccpp.PrimaryPeerAddressPrefix
 12365  	}
 12366  	if erccpp.SecondaryPeerAddressPrefix != nil {
 12367  		objectMap["secondaryPeerAddressPrefix"] = erccpp.SecondaryPeerAddressPrefix
 12368  	}
 12369  	if erccpp.SharedKey != nil {
 12370  		objectMap["sharedKey"] = erccpp.SharedKey
 12371  	}
 12372  	if erccpp.VlanID != nil {
 12373  		objectMap["vlanId"] = erccpp.VlanID
 12374  	}
 12375  	if erccpp.MicrosoftPeeringConfig != nil {
 12376  		objectMap["microsoftPeeringConfig"] = erccpp.MicrosoftPeeringConfig
 12377  	}
 12378  	if erccpp.GatewayManagerEtag != nil {
 12379  		objectMap["gatewayManagerEtag"] = erccpp.GatewayManagerEtag
 12380  	}
 12381  	if erccpp.Ipv6PeeringConfig != nil {
 12382  		objectMap["ipv6PeeringConfig"] = erccpp.Ipv6PeeringConfig
 12383  	}
 12384  	return json.Marshal(objectMap)
 12385  }
 12386  
 12387  // ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
 12388  // results of a long-running operation.
 12389  type ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture struct {
 12390  	azure.FutureAPI
 12391  	// Result returns the result of the asynchronous operation.
 12392  	// If the operation has not completed it will return an error.
 12393  	Result func(ExpressRouteCrossConnectionPeeringsClient) (ExpressRouteCrossConnectionPeering, error)
 12394  }
 12395  
 12396  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 12397  func (future *ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 12398  	var azFuture azure.Future
 12399  	if err := json.Unmarshal(body, &azFuture); err != nil {
 12400  		return err
 12401  	}
 12402  	future.FutureAPI = &azFuture
 12403  	future.Result = future.result
 12404  	return nil
 12405  }
 12406  
 12407  // result is the default implementation for ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture.Result.
 12408  func (future *ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture) result(client ExpressRouteCrossConnectionPeeringsClient) (erccp ExpressRouteCrossConnectionPeering, err error) {
 12409  	var done bool
 12410  	done, err = future.DoneWithContext(context.Background(), client)
 12411  	if err != nil {
 12412  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 12413  		return
 12414  	}
 12415  	if !done {
 12416  		erccp.Response.Response = future.Response()
 12417  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture")
 12418  		return
 12419  	}
 12420  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 12421  	if erccp.Response.Response, err = future.GetResult(sender); err == nil && erccp.Response.Response.StatusCode != http.StatusNoContent {
 12422  		erccp, err = client.CreateOrUpdateResponder(erccp.Response.Response)
 12423  		if err != nil {
 12424  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsCreateOrUpdateFuture", "Result", erccp.Response.Response, "Failure responding to request")
 12425  		}
 12426  	}
 12427  	return
 12428  }
 12429  
 12430  // ExpressRouteCrossConnectionPeeringsDeleteFuture an abstraction for monitoring and retrieving the results
 12431  // of a long-running operation.
 12432  type ExpressRouteCrossConnectionPeeringsDeleteFuture struct {
 12433  	azure.FutureAPI
 12434  	// Result returns the result of the asynchronous operation.
 12435  	// If the operation has not completed it will return an error.
 12436  	Result func(ExpressRouteCrossConnectionPeeringsClient) (autorest.Response, error)
 12437  }
 12438  
 12439  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 12440  func (future *ExpressRouteCrossConnectionPeeringsDeleteFuture) UnmarshalJSON(body []byte) error {
 12441  	var azFuture azure.Future
 12442  	if err := json.Unmarshal(body, &azFuture); err != nil {
 12443  		return err
 12444  	}
 12445  	future.FutureAPI = &azFuture
 12446  	future.Result = future.result
 12447  	return nil
 12448  }
 12449  
 12450  // result is the default implementation for ExpressRouteCrossConnectionPeeringsDeleteFuture.Result.
 12451  func (future *ExpressRouteCrossConnectionPeeringsDeleteFuture) result(client ExpressRouteCrossConnectionPeeringsClient) (ar autorest.Response, err error) {
 12452  	var done bool
 12453  	done, err = future.DoneWithContext(context.Background(), client)
 12454  	if err != nil {
 12455  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
 12456  		return
 12457  	}
 12458  	if !done {
 12459  		ar.Response = future.Response()
 12460  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionPeeringsDeleteFuture")
 12461  		return
 12462  	}
 12463  	ar.Response = future.Response()
 12464  	return
 12465  }
 12466  
 12467  // ExpressRouteCrossConnectionProperties properties of ExpressRouteCrossConnection.
 12468  type ExpressRouteCrossConnectionProperties struct {
 12469  	// PrimaryAzurePort - READ-ONLY; The name of the primary port.
 12470  	PrimaryAzurePort *string `json:"primaryAzurePort,omitempty"`
 12471  	// SecondaryAzurePort - READ-ONLY; The name of the secondary port.
 12472  	SecondaryAzurePort *string `json:"secondaryAzurePort,omitempty"`
 12473  	// STag - READ-ONLY; The identifier of the circuit traffic.
 12474  	STag *int32 `json:"sTag,omitempty"`
 12475  	// PeeringLocation - The peering location of the ExpressRoute circuit.
 12476  	PeeringLocation *string `json:"peeringLocation,omitempty"`
 12477  	// BandwidthInMbps - The circuit bandwidth In Mbps.
 12478  	BandwidthInMbps *int32 `json:"bandwidthInMbps,omitempty"`
 12479  	// ExpressRouteCircuit - The ExpressRouteCircuit.
 12480  	ExpressRouteCircuit *ExpressRouteCircuitReference `json:"expressRouteCircuit,omitempty"`
 12481  	// ServiceProviderProvisioningState - The provisioning state of the circuit in the connectivity provider system. Possible values include: 'NotProvisioned', 'Provisioning', 'Provisioned', 'Deprovisioning'
 12482  	ServiceProviderProvisioningState ServiceProviderProvisioningState `json:"serviceProviderProvisioningState,omitempty"`
 12483  	// ServiceProviderNotes - Additional read only notes set by the connectivity provider.
 12484  	ServiceProviderNotes *string `json:"serviceProviderNotes,omitempty"`
 12485  	// ProvisioningState - READ-ONLY; The provisioning state of the express route cross connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 12486  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 12487  	// Peerings - The list of peerings.
 12488  	Peerings *[]ExpressRouteCrossConnectionPeering `json:"peerings,omitempty"`
 12489  }
 12490  
 12491  // MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionProperties.
 12492  func (erccp ExpressRouteCrossConnectionProperties) MarshalJSON() ([]byte, error) {
 12493  	objectMap := make(map[string]interface{})
 12494  	if erccp.PeeringLocation != nil {
 12495  		objectMap["peeringLocation"] = erccp.PeeringLocation
 12496  	}
 12497  	if erccp.BandwidthInMbps != nil {
 12498  		objectMap["bandwidthInMbps"] = erccp.BandwidthInMbps
 12499  	}
 12500  	if erccp.ExpressRouteCircuit != nil {
 12501  		objectMap["expressRouteCircuit"] = erccp.ExpressRouteCircuit
 12502  	}
 12503  	if erccp.ServiceProviderProvisioningState != "" {
 12504  		objectMap["serviceProviderProvisioningState"] = erccp.ServiceProviderProvisioningState
 12505  	}
 12506  	if erccp.ServiceProviderNotes != nil {
 12507  		objectMap["serviceProviderNotes"] = erccp.ServiceProviderNotes
 12508  	}
 12509  	if erccp.Peerings != nil {
 12510  		objectMap["peerings"] = erccp.Peerings
 12511  	}
 12512  	return json.Marshal(objectMap)
 12513  }
 12514  
 12515  // ExpressRouteCrossConnectionRoutesTableSummary the routes table associated with the ExpressRouteCircuit.
 12516  type ExpressRouteCrossConnectionRoutesTableSummary struct {
 12517  	// Neighbor - IP address of Neighbor router.
 12518  	Neighbor *string `json:"neighbor,omitempty"`
 12519  	// Asn - Autonomous system number.
 12520  	Asn *int32 `json:"asn,omitempty"`
 12521  	// 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.
 12522  	UpDown *string `json:"upDown,omitempty"`
 12523  	// StateOrPrefixesReceived - Current state of the BGP session, and the number of prefixes that have been received from a neighbor or peer group.
 12524  	StateOrPrefixesReceived *string `json:"stateOrPrefixesReceived,omitempty"`
 12525  }
 12526  
 12527  // ExpressRouteCrossConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
 12528  // results of a long-running operation.
 12529  type ExpressRouteCrossConnectionsCreateOrUpdateFuture struct {
 12530  	azure.FutureAPI
 12531  	// Result returns the result of the asynchronous operation.
 12532  	// If the operation has not completed it will return an error.
 12533  	Result func(ExpressRouteCrossConnectionsClient) (ExpressRouteCrossConnection, error)
 12534  }
 12535  
 12536  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 12537  func (future *ExpressRouteCrossConnectionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 12538  	var azFuture azure.Future
 12539  	if err := json.Unmarshal(body, &azFuture); err != nil {
 12540  		return err
 12541  	}
 12542  	future.FutureAPI = &azFuture
 12543  	future.Result = future.result
 12544  	return nil
 12545  }
 12546  
 12547  // result is the default implementation for ExpressRouteCrossConnectionsCreateOrUpdateFuture.Result.
 12548  func (future *ExpressRouteCrossConnectionsCreateOrUpdateFuture) result(client ExpressRouteCrossConnectionsClient) (ercc ExpressRouteCrossConnection, err error) {
 12549  	var done bool
 12550  	done, err = future.DoneWithContext(context.Background(), client)
 12551  	if err != nil {
 12552  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 12553  		return
 12554  	}
 12555  	if !done {
 12556  		ercc.Response.Response = future.Response()
 12557  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsCreateOrUpdateFuture")
 12558  		return
 12559  	}
 12560  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 12561  	if ercc.Response.Response, err = future.GetResult(sender); err == nil && ercc.Response.Response.StatusCode != http.StatusNoContent {
 12562  		ercc, err = client.CreateOrUpdateResponder(ercc.Response.Response)
 12563  		if err != nil {
 12564  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsCreateOrUpdateFuture", "Result", ercc.Response.Response, "Failure responding to request")
 12565  		}
 12566  	}
 12567  	return
 12568  }
 12569  
 12570  // ExpressRouteCrossConnectionsListArpTableFuture an abstraction for monitoring and retrieving the results
 12571  // of a long-running operation.
 12572  type ExpressRouteCrossConnectionsListArpTableFuture struct {
 12573  	azure.FutureAPI
 12574  	// Result returns the result of the asynchronous operation.
 12575  	// If the operation has not completed it will return an error.
 12576  	Result func(ExpressRouteCrossConnectionsClient) (ExpressRouteCircuitsArpTableListResult, error)
 12577  }
 12578  
 12579  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 12580  func (future *ExpressRouteCrossConnectionsListArpTableFuture) UnmarshalJSON(body []byte) error {
 12581  	var azFuture azure.Future
 12582  	if err := json.Unmarshal(body, &azFuture); err != nil {
 12583  		return err
 12584  	}
 12585  	future.FutureAPI = &azFuture
 12586  	future.Result = future.result
 12587  	return nil
 12588  }
 12589  
 12590  // result is the default implementation for ExpressRouteCrossConnectionsListArpTableFuture.Result.
 12591  func (future *ExpressRouteCrossConnectionsListArpTableFuture) result(client ExpressRouteCrossConnectionsClient) (ercatlr ExpressRouteCircuitsArpTableListResult, err error) {
 12592  	var done bool
 12593  	done, err = future.DoneWithContext(context.Background(), client)
 12594  	if err != nil {
 12595  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", future.Response(), "Polling failure")
 12596  		return
 12597  	}
 12598  	if !done {
 12599  		ercatlr.Response.Response = future.Response()
 12600  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListArpTableFuture")
 12601  		return
 12602  	}
 12603  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 12604  	if ercatlr.Response.Response, err = future.GetResult(sender); err == nil && ercatlr.Response.Response.StatusCode != http.StatusNoContent {
 12605  		ercatlr, err = client.ListArpTableResponder(ercatlr.Response.Response)
 12606  		if err != nil {
 12607  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListArpTableFuture", "Result", ercatlr.Response.Response, "Failure responding to request")
 12608  		}
 12609  	}
 12610  	return
 12611  }
 12612  
 12613  // ExpressRouteCrossConnectionsListRoutesTableFuture an abstraction for monitoring and retrieving the
 12614  // results of a long-running operation.
 12615  type ExpressRouteCrossConnectionsListRoutesTableFuture struct {
 12616  	azure.FutureAPI
 12617  	// Result returns the result of the asynchronous operation.
 12618  	// If the operation has not completed it will return an error.
 12619  	Result func(ExpressRouteCrossConnectionsClient) (ExpressRouteCircuitsRoutesTableListResult, error)
 12620  }
 12621  
 12622  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 12623  func (future *ExpressRouteCrossConnectionsListRoutesTableFuture) UnmarshalJSON(body []byte) error {
 12624  	var azFuture azure.Future
 12625  	if err := json.Unmarshal(body, &azFuture); err != nil {
 12626  		return err
 12627  	}
 12628  	future.FutureAPI = &azFuture
 12629  	future.Result = future.result
 12630  	return nil
 12631  }
 12632  
 12633  // result is the default implementation for ExpressRouteCrossConnectionsListRoutesTableFuture.Result.
 12634  func (future *ExpressRouteCrossConnectionsListRoutesTableFuture) result(client ExpressRouteCrossConnectionsClient) (ercrtlr ExpressRouteCircuitsRoutesTableListResult, err error) {
 12635  	var done bool
 12636  	done, err = future.DoneWithContext(context.Background(), client)
 12637  	if err != nil {
 12638  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", future.Response(), "Polling failure")
 12639  		return
 12640  	}
 12641  	if !done {
 12642  		ercrtlr.Response.Response = future.Response()
 12643  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableFuture")
 12644  		return
 12645  	}
 12646  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 12647  	if ercrtlr.Response.Response, err = future.GetResult(sender); err == nil && ercrtlr.Response.Response.StatusCode != http.StatusNoContent {
 12648  		ercrtlr, err = client.ListRoutesTableResponder(ercrtlr.Response.Response)
 12649  		if err != nil {
 12650  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableFuture", "Result", ercrtlr.Response.Response, "Failure responding to request")
 12651  		}
 12652  	}
 12653  	return
 12654  }
 12655  
 12656  // ExpressRouteCrossConnectionsListRoutesTableSummaryFuture an abstraction for monitoring and retrieving
 12657  // the results of a long-running operation.
 12658  type ExpressRouteCrossConnectionsListRoutesTableSummaryFuture struct {
 12659  	azure.FutureAPI
 12660  	// Result returns the result of the asynchronous operation.
 12661  	// If the operation has not completed it will return an error.
 12662  	Result func(ExpressRouteCrossConnectionsClient) (ExpressRouteCrossConnectionsRoutesTableSummaryListResult, error)
 12663  }
 12664  
 12665  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 12666  func (future *ExpressRouteCrossConnectionsListRoutesTableSummaryFuture) UnmarshalJSON(body []byte) error {
 12667  	var azFuture azure.Future
 12668  	if err := json.Unmarshal(body, &azFuture); err != nil {
 12669  		return err
 12670  	}
 12671  	future.FutureAPI = &azFuture
 12672  	future.Result = future.result
 12673  	return nil
 12674  }
 12675  
 12676  // result is the default implementation for ExpressRouteCrossConnectionsListRoutesTableSummaryFuture.Result.
 12677  func (future *ExpressRouteCrossConnectionsListRoutesTableSummaryFuture) result(client ExpressRouteCrossConnectionsClient) (erccrtslr ExpressRouteCrossConnectionsRoutesTableSummaryListResult, err error) {
 12678  	var done bool
 12679  	done, err = future.DoneWithContext(context.Background(), client)
 12680  	if err != nil {
 12681  		err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", future.Response(), "Polling failure")
 12682  		return
 12683  	}
 12684  	if !done {
 12685  		erccrtslr.Response.Response = future.Response()
 12686  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture")
 12687  		return
 12688  	}
 12689  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 12690  	if erccrtslr.Response.Response, err = future.GetResult(sender); err == nil && erccrtslr.Response.Response.StatusCode != http.StatusNoContent {
 12691  		erccrtslr, err = client.ListRoutesTableSummaryResponder(erccrtslr.Response.Response)
 12692  		if err != nil {
 12693  			err = autorest.NewErrorWithError(err, "network.ExpressRouteCrossConnectionsListRoutesTableSummaryFuture", "Result", erccrtslr.Response.Response, "Failure responding to request")
 12694  		}
 12695  	}
 12696  	return
 12697  }
 12698  
 12699  // ExpressRouteCrossConnectionsRoutesTableSummaryListResult response for ListRoutesTable associated with
 12700  // the Express Route Cross Connections.
 12701  type ExpressRouteCrossConnectionsRoutesTableSummaryListResult struct {
 12702  	autorest.Response `json:"-"`
 12703  	// Value - A list of the routes table.
 12704  	Value *[]ExpressRouteCrossConnectionRoutesTableSummary `json:"value,omitempty"`
 12705  	// NextLink - READ-ONLY; The URL to get the next set of results.
 12706  	NextLink *string `json:"nextLink,omitempty"`
 12707  }
 12708  
 12709  // MarshalJSON is the custom marshaler for ExpressRouteCrossConnectionsRoutesTableSummaryListResult.
 12710  func (erccrtslr ExpressRouteCrossConnectionsRoutesTableSummaryListResult) MarshalJSON() ([]byte, error) {
 12711  	objectMap := make(map[string]interface{})
 12712  	if erccrtslr.Value != nil {
 12713  		objectMap["value"] = erccrtslr.Value
 12714  	}
 12715  	return json.Marshal(objectMap)
 12716  }
 12717  
 12718  // ExpressRouteGateway expressRoute gateway resource.
 12719  type ExpressRouteGateway struct {
 12720  	autorest.Response `json:"-"`
 12721  	// ExpressRouteGatewayProperties - Properties of the express route gateway.
 12722  	*ExpressRouteGatewayProperties `json:"properties,omitempty"`
 12723  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 12724  	Etag *string `json:"etag,omitempty"`
 12725  	// ID - Resource ID.
 12726  	ID *string `json:"id,omitempty"`
 12727  	// Name - READ-ONLY; Resource name.
 12728  	Name *string `json:"name,omitempty"`
 12729  	// Type - READ-ONLY; Resource type.
 12730  	Type *string `json:"type,omitempty"`
 12731  	// Location - Resource location.
 12732  	Location *string `json:"location,omitempty"`
 12733  	// Tags - Resource tags.
 12734  	Tags map[string]*string `json:"tags"`
 12735  }
 12736  
 12737  // MarshalJSON is the custom marshaler for ExpressRouteGateway.
 12738  func (erg ExpressRouteGateway) MarshalJSON() ([]byte, error) {
 12739  	objectMap := make(map[string]interface{})
 12740  	if erg.ExpressRouteGatewayProperties != nil {
 12741  		objectMap["properties"] = erg.ExpressRouteGatewayProperties
 12742  	}
 12743  	if erg.ID != nil {
 12744  		objectMap["id"] = erg.ID
 12745  	}
 12746  	if erg.Location != nil {
 12747  		objectMap["location"] = erg.Location
 12748  	}
 12749  	if erg.Tags != nil {
 12750  		objectMap["tags"] = erg.Tags
 12751  	}
 12752  	return json.Marshal(objectMap)
 12753  }
 12754  
 12755  // UnmarshalJSON is the custom unmarshaler for ExpressRouteGateway struct.
 12756  func (erg *ExpressRouteGateway) UnmarshalJSON(body []byte) error {
 12757  	var m map[string]*json.RawMessage
 12758  	err := json.Unmarshal(body, &m)
 12759  	if err != nil {
 12760  		return err
 12761  	}
 12762  	for k, v := range m {
 12763  		switch k {
 12764  		case "properties":
 12765  			if v != nil {
 12766  				var expressRouteGatewayProperties ExpressRouteGatewayProperties
 12767  				err = json.Unmarshal(*v, &expressRouteGatewayProperties)
 12768  				if err != nil {
 12769  					return err
 12770  				}
 12771  				erg.ExpressRouteGatewayProperties = &expressRouteGatewayProperties
 12772  			}
 12773  		case "etag":
 12774  			if v != nil {
 12775  				var etag string
 12776  				err = json.Unmarshal(*v, &etag)
 12777  				if err != nil {
 12778  					return err
 12779  				}
 12780  				erg.Etag = &etag
 12781  			}
 12782  		case "id":
 12783  			if v != nil {
 12784  				var ID string
 12785  				err = json.Unmarshal(*v, &ID)
 12786  				if err != nil {
 12787  					return err
 12788  				}
 12789  				erg.ID = &ID
 12790  			}
 12791  		case "name":
 12792  			if v != nil {
 12793  				var name string
 12794  				err = json.Unmarshal(*v, &name)
 12795  				if err != nil {
 12796  					return err
 12797  				}
 12798  				erg.Name = &name
 12799  			}
 12800  		case "type":
 12801  			if v != nil {
 12802  				var typeVar string
 12803  				err = json.Unmarshal(*v, &typeVar)
 12804  				if err != nil {
 12805  					return err
 12806  				}
 12807  				erg.Type = &typeVar
 12808  			}
 12809  		case "location":
 12810  			if v != nil {
 12811  				var location string
 12812  				err = json.Unmarshal(*v, &location)
 12813  				if err != nil {
 12814  					return err
 12815  				}
 12816  				erg.Location = &location
 12817  			}
 12818  		case "tags":
 12819  			if v != nil {
 12820  				var tags map[string]*string
 12821  				err = json.Unmarshal(*v, &tags)
 12822  				if err != nil {
 12823  					return err
 12824  				}
 12825  				erg.Tags = tags
 12826  			}
 12827  		}
 12828  	}
 12829  
 12830  	return nil
 12831  }
 12832  
 12833  // ExpressRouteGatewayList list of ExpressRoute gateways.
 12834  type ExpressRouteGatewayList struct {
 12835  	autorest.Response `json:"-"`
 12836  	// Value - List of ExpressRoute gateways.
 12837  	Value *[]ExpressRouteGateway `json:"value,omitempty"`
 12838  }
 12839  
 12840  // ExpressRouteGatewayProperties expressRoute gateway resource properties.
 12841  type ExpressRouteGatewayProperties struct {
 12842  	// AutoScaleConfiguration - Configuration for auto scaling.
 12843  	AutoScaleConfiguration *ExpressRouteGatewayPropertiesAutoScaleConfiguration `json:"autoScaleConfiguration,omitempty"`
 12844  	// ExpressRouteConnections - READ-ONLY; List of ExpressRoute connections to the ExpressRoute gateway.
 12845  	ExpressRouteConnections *[]ExpressRouteConnection `json:"expressRouteConnections,omitempty"`
 12846  	// ProvisioningState - READ-ONLY; The provisioning state of the express route gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 12847  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 12848  	// VirtualHub - The Virtual Hub where the ExpressRoute gateway is or will be deployed.
 12849  	VirtualHub *VirtualHubID `json:"virtualHub,omitempty"`
 12850  }
 12851  
 12852  // MarshalJSON is the custom marshaler for ExpressRouteGatewayProperties.
 12853  func (ergp ExpressRouteGatewayProperties) MarshalJSON() ([]byte, error) {
 12854  	objectMap := make(map[string]interface{})
 12855  	if ergp.AutoScaleConfiguration != nil {
 12856  		objectMap["autoScaleConfiguration"] = ergp.AutoScaleConfiguration
 12857  	}
 12858  	if ergp.VirtualHub != nil {
 12859  		objectMap["virtualHub"] = ergp.VirtualHub
 12860  	}
 12861  	return json.Marshal(objectMap)
 12862  }
 12863  
 12864  // ExpressRouteGatewayPropertiesAutoScaleConfiguration configuration for auto scaling.
 12865  type ExpressRouteGatewayPropertiesAutoScaleConfiguration struct {
 12866  	// Bounds - Minimum and maximum number of scale units to deploy.
 12867  	Bounds *ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds `json:"bounds,omitempty"`
 12868  }
 12869  
 12870  // ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds minimum and maximum number of scale units to
 12871  // deploy.
 12872  type ExpressRouteGatewayPropertiesAutoScaleConfigurationBounds struct {
 12873  	// Min - Minimum number of scale units deployed for ExpressRoute gateway.
 12874  	Min *int32 `json:"min,omitempty"`
 12875  	// Max - Maximum number of scale units deployed for ExpressRoute gateway.
 12876  	Max *int32 `json:"max,omitempty"`
 12877  }
 12878  
 12879  // ExpressRouteGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 12880  // long-running operation.
 12881  type ExpressRouteGatewaysCreateOrUpdateFuture struct {
 12882  	azure.FutureAPI
 12883  	// Result returns the result of the asynchronous operation.
 12884  	// If the operation has not completed it will return an error.
 12885  	Result func(ExpressRouteGatewaysClient) (ExpressRouteGateway, error)
 12886  }
 12887  
 12888  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 12889  func (future *ExpressRouteGatewaysCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 12890  	var azFuture azure.Future
 12891  	if err := json.Unmarshal(body, &azFuture); err != nil {
 12892  		return err
 12893  	}
 12894  	future.FutureAPI = &azFuture
 12895  	future.Result = future.result
 12896  	return nil
 12897  }
 12898  
 12899  // result is the default implementation for ExpressRouteGatewaysCreateOrUpdateFuture.Result.
 12900  func (future *ExpressRouteGatewaysCreateOrUpdateFuture) result(client ExpressRouteGatewaysClient) (erg ExpressRouteGateway, err error) {
 12901  	var done bool
 12902  	done, err = future.DoneWithContext(context.Background(), client)
 12903  	if err != nil {
 12904  		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 12905  		return
 12906  	}
 12907  	if !done {
 12908  		erg.Response.Response = future.Response()
 12909  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysCreateOrUpdateFuture")
 12910  		return
 12911  	}
 12912  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 12913  	if erg.Response.Response, err = future.GetResult(sender); err == nil && erg.Response.Response.StatusCode != http.StatusNoContent {
 12914  		erg, err = client.CreateOrUpdateResponder(erg.Response.Response)
 12915  		if err != nil {
 12916  			err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysCreateOrUpdateFuture", "Result", erg.Response.Response, "Failure responding to request")
 12917  		}
 12918  	}
 12919  	return
 12920  }
 12921  
 12922  // ExpressRouteGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
 12923  // long-running operation.
 12924  type ExpressRouteGatewaysDeleteFuture struct {
 12925  	azure.FutureAPI
 12926  	// Result returns the result of the asynchronous operation.
 12927  	// If the operation has not completed it will return an error.
 12928  	Result func(ExpressRouteGatewaysClient) (autorest.Response, error)
 12929  }
 12930  
 12931  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 12932  func (future *ExpressRouteGatewaysDeleteFuture) UnmarshalJSON(body []byte) error {
 12933  	var azFuture azure.Future
 12934  	if err := json.Unmarshal(body, &azFuture); err != nil {
 12935  		return err
 12936  	}
 12937  	future.FutureAPI = &azFuture
 12938  	future.Result = future.result
 12939  	return nil
 12940  }
 12941  
 12942  // result is the default implementation for ExpressRouteGatewaysDeleteFuture.Result.
 12943  func (future *ExpressRouteGatewaysDeleteFuture) result(client ExpressRouteGatewaysClient) (ar autorest.Response, err error) {
 12944  	var done bool
 12945  	done, err = future.DoneWithContext(context.Background(), client)
 12946  	if err != nil {
 12947  		err = autorest.NewErrorWithError(err, "network.ExpressRouteGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
 12948  		return
 12949  	}
 12950  	if !done {
 12951  		ar.Response = future.Response()
 12952  		err = azure.NewAsyncOpIncompleteError("network.ExpressRouteGatewaysDeleteFuture")
 12953  		return
 12954  	}
 12955  	ar.Response = future.Response()
 12956  	return
 12957  }
 12958  
 12959  // ExpressRouteLink expressRouteLink child resource definition.
 12960  type ExpressRouteLink struct {
 12961  	autorest.Response `json:"-"`
 12962  	// ExpressRouteLinkPropertiesFormat - ExpressRouteLink properties.
 12963  	*ExpressRouteLinkPropertiesFormat `json:"properties,omitempty"`
 12964  	// Name - Name of child port resource that is unique among child port resources of the parent.
 12965  	Name *string `json:"name,omitempty"`
 12966  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 12967  	Etag *string `json:"etag,omitempty"`
 12968  	// ID - Resource ID.
 12969  	ID *string `json:"id,omitempty"`
 12970  }
 12971  
 12972  // MarshalJSON is the custom marshaler for ExpressRouteLink.
 12973  func (erl ExpressRouteLink) MarshalJSON() ([]byte, error) {
 12974  	objectMap := make(map[string]interface{})
 12975  	if erl.ExpressRouteLinkPropertiesFormat != nil {
 12976  		objectMap["properties"] = erl.ExpressRouteLinkPropertiesFormat
 12977  	}
 12978  	if erl.Name != nil {
 12979  		objectMap["name"] = erl.Name
 12980  	}
 12981  	if erl.ID != nil {
 12982  		objectMap["id"] = erl.ID
 12983  	}
 12984  	return json.Marshal(objectMap)
 12985  }
 12986  
 12987  // UnmarshalJSON is the custom unmarshaler for ExpressRouteLink struct.
 12988  func (erl *ExpressRouteLink) UnmarshalJSON(body []byte) error {
 12989  	var m map[string]*json.RawMessage
 12990  	err := json.Unmarshal(body, &m)
 12991  	if err != nil {
 12992  		return err
 12993  	}
 12994  	for k, v := range m {
 12995  		switch k {
 12996  		case "properties":
 12997  			if v != nil {
 12998  				var expressRouteLinkPropertiesFormat ExpressRouteLinkPropertiesFormat
 12999  				err = json.Unmarshal(*v, &expressRouteLinkPropertiesFormat)
 13000  				if err != nil {
 13001  					return err
 13002  				}
 13003  				erl.ExpressRouteLinkPropertiesFormat = &expressRouteLinkPropertiesFormat
 13004  			}
 13005  		case "name":
 13006  			if v != nil {
 13007  				var name string
 13008  				err = json.Unmarshal(*v, &name)
 13009  				if err != nil {
 13010  					return err
 13011  				}
 13012  				erl.Name = &name
 13013  			}
 13014  		case "etag":
 13015  			if v != nil {
 13016  				var etag string
 13017  				err = json.Unmarshal(*v, &etag)
 13018  				if err != nil {
 13019  					return err
 13020  				}
 13021  				erl.Etag = &etag
 13022  			}
 13023  		case "id":
 13024  			if v != nil {
 13025  				var ID string
 13026  				err = json.Unmarshal(*v, &ID)
 13027  				if err != nil {
 13028  					return err
 13029  				}
 13030  				erl.ID = &ID
 13031  			}
 13032  		}
 13033  	}
 13034  
 13035  	return nil
 13036  }
 13037  
 13038  // ExpressRouteLinkListResult response for ListExpressRouteLinks API service call.
 13039  type ExpressRouteLinkListResult struct {
 13040  	autorest.Response `json:"-"`
 13041  	// Value - The list of ExpressRouteLink sub-resources.
 13042  	Value *[]ExpressRouteLink `json:"value,omitempty"`
 13043  	// NextLink - The URL to get the next set of results.
 13044  	NextLink *string `json:"nextLink,omitempty"`
 13045  }
 13046  
 13047  // ExpressRouteLinkListResultIterator provides access to a complete listing of ExpressRouteLink values.
 13048  type ExpressRouteLinkListResultIterator struct {
 13049  	i    int
 13050  	page ExpressRouteLinkListResultPage
 13051  }
 13052  
 13053  // NextWithContext advances to the next value.  If there was an error making
 13054  // the request the iterator does not advance and the error is returned.
 13055  func (iter *ExpressRouteLinkListResultIterator) NextWithContext(ctx context.Context) (err error) {
 13056  	if tracing.IsEnabled() {
 13057  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultIterator.NextWithContext")
 13058  		defer func() {
 13059  			sc := -1
 13060  			if iter.Response().Response.Response != nil {
 13061  				sc = iter.Response().Response.Response.StatusCode
 13062  			}
 13063  			tracing.EndSpan(ctx, sc, err)
 13064  		}()
 13065  	}
 13066  	iter.i++
 13067  	if iter.i < len(iter.page.Values()) {
 13068  		return nil
 13069  	}
 13070  	err = iter.page.NextWithContext(ctx)
 13071  	if err != nil {
 13072  		iter.i--
 13073  		return err
 13074  	}
 13075  	iter.i = 0
 13076  	return nil
 13077  }
 13078  
 13079  // Next advances to the next value.  If there was an error making
 13080  // the request the iterator does not advance and the error is returned.
 13081  // Deprecated: Use NextWithContext() instead.
 13082  func (iter *ExpressRouteLinkListResultIterator) Next() error {
 13083  	return iter.NextWithContext(context.Background())
 13084  }
 13085  
 13086  // NotDone returns true if the enumeration should be started or is not yet complete.
 13087  func (iter ExpressRouteLinkListResultIterator) NotDone() bool {
 13088  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 13089  }
 13090  
 13091  // Response returns the raw server response from the last page request.
 13092  func (iter ExpressRouteLinkListResultIterator) Response() ExpressRouteLinkListResult {
 13093  	return iter.page.Response()
 13094  }
 13095  
 13096  // Value returns the current value or a zero-initialized value if the
 13097  // iterator has advanced beyond the end of the collection.
 13098  func (iter ExpressRouteLinkListResultIterator) Value() ExpressRouteLink {
 13099  	if !iter.page.NotDone() {
 13100  		return ExpressRouteLink{}
 13101  	}
 13102  	return iter.page.Values()[iter.i]
 13103  }
 13104  
 13105  // Creates a new instance of the ExpressRouteLinkListResultIterator type.
 13106  func NewExpressRouteLinkListResultIterator(page ExpressRouteLinkListResultPage) ExpressRouteLinkListResultIterator {
 13107  	return ExpressRouteLinkListResultIterator{page: page}
 13108  }
 13109  
 13110  // IsEmpty returns true if the ListResult contains no values.
 13111  func (erllr ExpressRouteLinkListResult) IsEmpty() bool {
 13112  	return erllr.Value == nil || len(*erllr.Value) == 0
 13113  }
 13114  
 13115  // hasNextLink returns true if the NextLink is not empty.
 13116  func (erllr ExpressRouteLinkListResult) hasNextLink() bool {
 13117  	return erllr.NextLink != nil && len(*erllr.NextLink) != 0
 13118  }
 13119  
 13120  // expressRouteLinkListResultPreparer prepares a request to retrieve the next set of results.
 13121  // It returns nil if no more results exist.
 13122  func (erllr ExpressRouteLinkListResult) expressRouteLinkListResultPreparer(ctx context.Context) (*http.Request, error) {
 13123  	if !erllr.hasNextLink() {
 13124  		return nil, nil
 13125  	}
 13126  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 13127  		autorest.AsJSON(),
 13128  		autorest.AsGet(),
 13129  		autorest.WithBaseURL(to.String(erllr.NextLink)))
 13130  }
 13131  
 13132  // ExpressRouteLinkListResultPage contains a page of ExpressRouteLink values.
 13133  type ExpressRouteLinkListResultPage struct {
 13134  	fn    func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)
 13135  	erllr ExpressRouteLinkListResult
 13136  }
 13137  
 13138  // NextWithContext advances to the next page of values.  If there was an error making
 13139  // the request the page does not advance and the error is returned.
 13140  func (page *ExpressRouteLinkListResultPage) NextWithContext(ctx context.Context) (err error) {
 13141  	if tracing.IsEnabled() {
 13142  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteLinkListResultPage.NextWithContext")
 13143  		defer func() {
 13144  			sc := -1
 13145  			if page.Response().Response.Response != nil {
 13146  				sc = page.Response().Response.Response.StatusCode
 13147  			}
 13148  			tracing.EndSpan(ctx, sc, err)
 13149  		}()
 13150  	}
 13151  	for {
 13152  		next, err := page.fn(ctx, page.erllr)
 13153  		if err != nil {
 13154  			return err
 13155  		}
 13156  		page.erllr = next
 13157  		if !next.hasNextLink() || !next.IsEmpty() {
 13158  			break
 13159  		}
 13160  	}
 13161  	return nil
 13162  }
 13163  
 13164  // Next advances to the next page of values.  If there was an error making
 13165  // the request the page does not advance and the error is returned.
 13166  // Deprecated: Use NextWithContext() instead.
 13167  func (page *ExpressRouteLinkListResultPage) Next() error {
 13168  	return page.NextWithContext(context.Background())
 13169  }
 13170  
 13171  // NotDone returns true if the page enumeration should be started or is not yet complete.
 13172  func (page ExpressRouteLinkListResultPage) NotDone() bool {
 13173  	return !page.erllr.IsEmpty()
 13174  }
 13175  
 13176  // Response returns the raw server response from the last page request.
 13177  func (page ExpressRouteLinkListResultPage) Response() ExpressRouteLinkListResult {
 13178  	return page.erllr
 13179  }
 13180  
 13181  // Values returns the slice of values for the current page or nil if there are no values.
 13182  func (page ExpressRouteLinkListResultPage) Values() []ExpressRouteLink {
 13183  	if page.erllr.IsEmpty() {
 13184  		return nil
 13185  	}
 13186  	return *page.erllr.Value
 13187  }
 13188  
 13189  // Creates a new instance of the ExpressRouteLinkListResultPage type.
 13190  func NewExpressRouteLinkListResultPage(cur ExpressRouteLinkListResult, getNextPage func(context.Context, ExpressRouteLinkListResult) (ExpressRouteLinkListResult, error)) ExpressRouteLinkListResultPage {
 13191  	return ExpressRouteLinkListResultPage{
 13192  		fn:    getNextPage,
 13193  		erllr: cur,
 13194  	}
 13195  }
 13196  
 13197  // ExpressRouteLinkMacSecConfig expressRouteLink Mac Security Configuration.
 13198  type ExpressRouteLinkMacSecConfig struct {
 13199  	// CknSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CKN key.
 13200  	CknSecretIdentifier *string `json:"cknSecretIdentifier,omitempty"`
 13201  	// CakSecretIdentifier - Keyvault Secret Identifier URL containing Mac security CAK key.
 13202  	CakSecretIdentifier *string `json:"cakSecretIdentifier,omitempty"`
 13203  	// Cipher - Mac security cipher. Possible values include: 'GcmAes128', 'GcmAes256'
 13204  	Cipher ExpressRouteLinkMacSecCipher `json:"cipher,omitempty"`
 13205  }
 13206  
 13207  // ExpressRouteLinkPropertiesFormat properties specific to ExpressRouteLink resources.
 13208  type ExpressRouteLinkPropertiesFormat struct {
 13209  	// RouterName - READ-ONLY; Name of Azure router associated with physical port.
 13210  	RouterName *string `json:"routerName,omitempty"`
 13211  	// InterfaceName - READ-ONLY; Name of Azure router interface.
 13212  	InterfaceName *string `json:"interfaceName,omitempty"`
 13213  	// PatchPanelID - READ-ONLY; Mapping between physical port to patch panel port.
 13214  	PatchPanelID *string `json:"patchPanelId,omitempty"`
 13215  	// RackID - READ-ONLY; Mapping of physical patch panel to rack.
 13216  	RackID *string `json:"rackId,omitempty"`
 13217  	// ConnectorType - READ-ONLY; Physical fiber port type. Possible values include: 'LC', 'SC'
 13218  	ConnectorType ExpressRouteLinkConnectorType `json:"connectorType,omitempty"`
 13219  	// AdminState - Administrative state of the physical port. Possible values include: 'ExpressRouteLinkAdminStateEnabled', 'ExpressRouteLinkAdminStateDisabled'
 13220  	AdminState ExpressRouteLinkAdminState `json:"adminState,omitempty"`
 13221  	// ProvisioningState - READ-ONLY; The provisioning state of the express route link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 13222  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 13223  	// MacSecConfig - MacSec configuration.
 13224  	MacSecConfig *ExpressRouteLinkMacSecConfig `json:"macSecConfig,omitempty"`
 13225  }
 13226  
 13227  // MarshalJSON is the custom marshaler for ExpressRouteLinkPropertiesFormat.
 13228  func (erlpf ExpressRouteLinkPropertiesFormat) MarshalJSON() ([]byte, error) {
 13229  	objectMap := make(map[string]interface{})
 13230  	if erlpf.AdminState != "" {
 13231  		objectMap["adminState"] = erlpf.AdminState
 13232  	}
 13233  	if erlpf.MacSecConfig != nil {
 13234  		objectMap["macSecConfig"] = erlpf.MacSecConfig
 13235  	}
 13236  	return json.Marshal(objectMap)
 13237  }
 13238  
 13239  // ExpressRoutePort expressRoutePort resource definition.
 13240  type ExpressRoutePort struct {
 13241  	autorest.Response `json:"-"`
 13242  	// ExpressRoutePortPropertiesFormat - ExpressRoutePort properties.
 13243  	*ExpressRoutePortPropertiesFormat `json:"properties,omitempty"`
 13244  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 13245  	Etag *string `json:"etag,omitempty"`
 13246  	// Identity - The identity of ExpressRoutePort, if configured.
 13247  	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
 13248  	// ID - Resource ID.
 13249  	ID *string `json:"id,omitempty"`
 13250  	// Name - READ-ONLY; Resource name.
 13251  	Name *string `json:"name,omitempty"`
 13252  	// Type - READ-ONLY; Resource type.
 13253  	Type *string `json:"type,omitempty"`
 13254  	// Location - Resource location.
 13255  	Location *string `json:"location,omitempty"`
 13256  	// Tags - Resource tags.
 13257  	Tags map[string]*string `json:"tags"`
 13258  }
 13259  
 13260  // MarshalJSON is the custom marshaler for ExpressRoutePort.
 13261  func (erp ExpressRoutePort) MarshalJSON() ([]byte, error) {
 13262  	objectMap := make(map[string]interface{})
 13263  	if erp.ExpressRoutePortPropertiesFormat != nil {
 13264  		objectMap["properties"] = erp.ExpressRoutePortPropertiesFormat
 13265  	}
 13266  	if erp.Identity != nil {
 13267  		objectMap["identity"] = erp.Identity
 13268  	}
 13269  	if erp.ID != nil {
 13270  		objectMap["id"] = erp.ID
 13271  	}
 13272  	if erp.Location != nil {
 13273  		objectMap["location"] = erp.Location
 13274  	}
 13275  	if erp.Tags != nil {
 13276  		objectMap["tags"] = erp.Tags
 13277  	}
 13278  	return json.Marshal(objectMap)
 13279  }
 13280  
 13281  // UnmarshalJSON is the custom unmarshaler for ExpressRoutePort struct.
 13282  func (erp *ExpressRoutePort) UnmarshalJSON(body []byte) error {
 13283  	var m map[string]*json.RawMessage
 13284  	err := json.Unmarshal(body, &m)
 13285  	if err != nil {
 13286  		return err
 13287  	}
 13288  	for k, v := range m {
 13289  		switch k {
 13290  		case "properties":
 13291  			if v != nil {
 13292  				var expressRoutePortPropertiesFormat ExpressRoutePortPropertiesFormat
 13293  				err = json.Unmarshal(*v, &expressRoutePortPropertiesFormat)
 13294  				if err != nil {
 13295  					return err
 13296  				}
 13297  				erp.ExpressRoutePortPropertiesFormat = &expressRoutePortPropertiesFormat
 13298  			}
 13299  		case "etag":
 13300  			if v != nil {
 13301  				var etag string
 13302  				err = json.Unmarshal(*v, &etag)
 13303  				if err != nil {
 13304  					return err
 13305  				}
 13306  				erp.Etag = &etag
 13307  			}
 13308  		case "identity":
 13309  			if v != nil {
 13310  				var identity ManagedServiceIdentity
 13311  				err = json.Unmarshal(*v, &identity)
 13312  				if err != nil {
 13313  					return err
 13314  				}
 13315  				erp.Identity = &identity
 13316  			}
 13317  		case "id":
 13318  			if v != nil {
 13319  				var ID string
 13320  				err = json.Unmarshal(*v, &ID)
 13321  				if err != nil {
 13322  					return err
 13323  				}
 13324  				erp.ID = &ID
 13325  			}
 13326  		case "name":
 13327  			if v != nil {
 13328  				var name string
 13329  				err = json.Unmarshal(*v, &name)
 13330  				if err != nil {
 13331  					return err
 13332  				}
 13333  				erp.Name = &name
 13334  			}
 13335  		case "type":
 13336  			if v != nil {
 13337  				var typeVar string
 13338  				err = json.Unmarshal(*v, &typeVar)
 13339  				if err != nil {
 13340  					return err
 13341  				}
 13342  				erp.Type = &typeVar
 13343  			}
 13344  		case "location":
 13345  			if v != nil {
 13346  				var location string
 13347  				err = json.Unmarshal(*v, &location)
 13348  				if err != nil {
 13349  					return err
 13350  				}
 13351  				erp.Location = &location
 13352  			}
 13353  		case "tags":
 13354  			if v != nil {
 13355  				var tags map[string]*string
 13356  				err = json.Unmarshal(*v, &tags)
 13357  				if err != nil {
 13358  					return err
 13359  				}
 13360  				erp.Tags = tags
 13361  			}
 13362  		}
 13363  	}
 13364  
 13365  	return nil
 13366  }
 13367  
 13368  // ExpressRoutePortListResult response for ListExpressRoutePorts API service call.
 13369  type ExpressRoutePortListResult struct {
 13370  	autorest.Response `json:"-"`
 13371  	// Value - A list of ExpressRoutePort resources.
 13372  	Value *[]ExpressRoutePort `json:"value,omitempty"`
 13373  	// NextLink - The URL to get the next set of results.
 13374  	NextLink *string `json:"nextLink,omitempty"`
 13375  }
 13376  
 13377  // ExpressRoutePortListResultIterator provides access to a complete listing of ExpressRoutePort values.
 13378  type ExpressRoutePortListResultIterator struct {
 13379  	i    int
 13380  	page ExpressRoutePortListResultPage
 13381  }
 13382  
 13383  // NextWithContext advances to the next value.  If there was an error making
 13384  // the request the iterator does not advance and the error is returned.
 13385  func (iter *ExpressRoutePortListResultIterator) NextWithContext(ctx context.Context) (err error) {
 13386  	if tracing.IsEnabled() {
 13387  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultIterator.NextWithContext")
 13388  		defer func() {
 13389  			sc := -1
 13390  			if iter.Response().Response.Response != nil {
 13391  				sc = iter.Response().Response.Response.StatusCode
 13392  			}
 13393  			tracing.EndSpan(ctx, sc, err)
 13394  		}()
 13395  	}
 13396  	iter.i++
 13397  	if iter.i < len(iter.page.Values()) {
 13398  		return nil
 13399  	}
 13400  	err = iter.page.NextWithContext(ctx)
 13401  	if err != nil {
 13402  		iter.i--
 13403  		return err
 13404  	}
 13405  	iter.i = 0
 13406  	return nil
 13407  }
 13408  
 13409  // Next advances to the next value.  If there was an error making
 13410  // the request the iterator does not advance and the error is returned.
 13411  // Deprecated: Use NextWithContext() instead.
 13412  func (iter *ExpressRoutePortListResultIterator) Next() error {
 13413  	return iter.NextWithContext(context.Background())
 13414  }
 13415  
 13416  // NotDone returns true if the enumeration should be started or is not yet complete.
 13417  func (iter ExpressRoutePortListResultIterator) NotDone() bool {
 13418  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 13419  }
 13420  
 13421  // Response returns the raw server response from the last page request.
 13422  func (iter ExpressRoutePortListResultIterator) Response() ExpressRoutePortListResult {
 13423  	return iter.page.Response()
 13424  }
 13425  
 13426  // Value returns the current value or a zero-initialized value if the
 13427  // iterator has advanced beyond the end of the collection.
 13428  func (iter ExpressRoutePortListResultIterator) Value() ExpressRoutePort {
 13429  	if !iter.page.NotDone() {
 13430  		return ExpressRoutePort{}
 13431  	}
 13432  	return iter.page.Values()[iter.i]
 13433  }
 13434  
 13435  // Creates a new instance of the ExpressRoutePortListResultIterator type.
 13436  func NewExpressRoutePortListResultIterator(page ExpressRoutePortListResultPage) ExpressRoutePortListResultIterator {
 13437  	return ExpressRoutePortListResultIterator{page: page}
 13438  }
 13439  
 13440  // IsEmpty returns true if the ListResult contains no values.
 13441  func (erplr ExpressRoutePortListResult) IsEmpty() bool {
 13442  	return erplr.Value == nil || len(*erplr.Value) == 0
 13443  }
 13444  
 13445  // hasNextLink returns true if the NextLink is not empty.
 13446  func (erplr ExpressRoutePortListResult) hasNextLink() bool {
 13447  	return erplr.NextLink != nil && len(*erplr.NextLink) != 0
 13448  }
 13449  
 13450  // expressRoutePortListResultPreparer prepares a request to retrieve the next set of results.
 13451  // It returns nil if no more results exist.
 13452  func (erplr ExpressRoutePortListResult) expressRoutePortListResultPreparer(ctx context.Context) (*http.Request, error) {
 13453  	if !erplr.hasNextLink() {
 13454  		return nil, nil
 13455  	}
 13456  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 13457  		autorest.AsJSON(),
 13458  		autorest.AsGet(),
 13459  		autorest.WithBaseURL(to.String(erplr.NextLink)))
 13460  }
 13461  
 13462  // ExpressRoutePortListResultPage contains a page of ExpressRoutePort values.
 13463  type ExpressRoutePortListResultPage struct {
 13464  	fn    func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)
 13465  	erplr ExpressRoutePortListResult
 13466  }
 13467  
 13468  // NextWithContext advances to the next page of values.  If there was an error making
 13469  // the request the page does not advance and the error is returned.
 13470  func (page *ExpressRoutePortListResultPage) NextWithContext(ctx context.Context) (err error) {
 13471  	if tracing.IsEnabled() {
 13472  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortListResultPage.NextWithContext")
 13473  		defer func() {
 13474  			sc := -1
 13475  			if page.Response().Response.Response != nil {
 13476  				sc = page.Response().Response.Response.StatusCode
 13477  			}
 13478  			tracing.EndSpan(ctx, sc, err)
 13479  		}()
 13480  	}
 13481  	for {
 13482  		next, err := page.fn(ctx, page.erplr)
 13483  		if err != nil {
 13484  			return err
 13485  		}
 13486  		page.erplr = next
 13487  		if !next.hasNextLink() || !next.IsEmpty() {
 13488  			break
 13489  		}
 13490  	}
 13491  	return nil
 13492  }
 13493  
 13494  // Next advances to the next page of values.  If there was an error making
 13495  // the request the page does not advance and the error is returned.
 13496  // Deprecated: Use NextWithContext() instead.
 13497  func (page *ExpressRoutePortListResultPage) Next() error {
 13498  	return page.NextWithContext(context.Background())
 13499  }
 13500  
 13501  // NotDone returns true if the page enumeration should be started or is not yet complete.
 13502  func (page ExpressRoutePortListResultPage) NotDone() bool {
 13503  	return !page.erplr.IsEmpty()
 13504  }
 13505  
 13506  // Response returns the raw server response from the last page request.
 13507  func (page ExpressRoutePortListResultPage) Response() ExpressRoutePortListResult {
 13508  	return page.erplr
 13509  }
 13510  
 13511  // Values returns the slice of values for the current page or nil if there are no values.
 13512  func (page ExpressRoutePortListResultPage) Values() []ExpressRoutePort {
 13513  	if page.erplr.IsEmpty() {
 13514  		return nil
 13515  	}
 13516  	return *page.erplr.Value
 13517  }
 13518  
 13519  // Creates a new instance of the ExpressRoutePortListResultPage type.
 13520  func NewExpressRoutePortListResultPage(cur ExpressRoutePortListResult, getNextPage func(context.Context, ExpressRoutePortListResult) (ExpressRoutePortListResult, error)) ExpressRoutePortListResultPage {
 13521  	return ExpressRoutePortListResultPage{
 13522  		fn:    getNextPage,
 13523  		erplr: cur,
 13524  	}
 13525  }
 13526  
 13527  // ExpressRoutePortPropertiesFormat properties specific to ExpressRoutePort resources.
 13528  type ExpressRoutePortPropertiesFormat struct {
 13529  	// PeeringLocation - The name of the peering location that the ExpressRoutePort is mapped to physically.
 13530  	PeeringLocation *string `json:"peeringLocation,omitempty"`
 13531  	// BandwidthInGbps - Bandwidth of procured ports in Gbps.
 13532  	BandwidthInGbps *int32 `json:"bandwidthInGbps,omitempty"`
 13533  	// ProvisionedBandwidthInGbps - READ-ONLY; Aggregate Gbps of associated circuit bandwidths.
 13534  	ProvisionedBandwidthInGbps *float64 `json:"provisionedBandwidthInGbps,omitempty"`
 13535  	// Mtu - READ-ONLY; Maximum transmission unit of the physical port pair(s).
 13536  	Mtu *string `json:"mtu,omitempty"`
 13537  	// Encapsulation - Encapsulation method on physical ports. Possible values include: 'Dot1Q', 'QinQ'
 13538  	Encapsulation ExpressRoutePortsEncapsulation `json:"encapsulation,omitempty"`
 13539  	// EtherType - READ-ONLY; Ether type of the physical port.
 13540  	EtherType *string `json:"etherType,omitempty"`
 13541  	// AllocationDate - READ-ONLY; Date of the physical port allocation to be used in Letter of Authorization.
 13542  	AllocationDate *string `json:"allocationDate,omitempty"`
 13543  	// Links - The set of physical links of the ExpressRoutePort resource.
 13544  	Links *[]ExpressRouteLink `json:"links,omitempty"`
 13545  	// Circuits - READ-ONLY; Reference the ExpressRoute circuit(s) that are provisioned on this ExpressRoutePort resource.
 13546  	Circuits *[]SubResource `json:"circuits,omitempty"`
 13547  	// ProvisioningState - READ-ONLY; The provisioning state of the express route port resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 13548  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 13549  	// ResourceGUID - READ-ONLY; The resource GUID property of the express route port resource.
 13550  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 13551  }
 13552  
 13553  // MarshalJSON is the custom marshaler for ExpressRoutePortPropertiesFormat.
 13554  func (erppf ExpressRoutePortPropertiesFormat) MarshalJSON() ([]byte, error) {
 13555  	objectMap := make(map[string]interface{})
 13556  	if erppf.PeeringLocation != nil {
 13557  		objectMap["peeringLocation"] = erppf.PeeringLocation
 13558  	}
 13559  	if erppf.BandwidthInGbps != nil {
 13560  		objectMap["bandwidthInGbps"] = erppf.BandwidthInGbps
 13561  	}
 13562  	if erppf.Encapsulation != "" {
 13563  		objectMap["encapsulation"] = erppf.Encapsulation
 13564  	}
 13565  	if erppf.Links != nil {
 13566  		objectMap["links"] = erppf.Links
 13567  	}
 13568  	return json.Marshal(objectMap)
 13569  }
 13570  
 13571  // ExpressRoutePortsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 13572  // long-running operation.
 13573  type ExpressRoutePortsCreateOrUpdateFuture struct {
 13574  	azure.FutureAPI
 13575  	// Result returns the result of the asynchronous operation.
 13576  	// If the operation has not completed it will return an error.
 13577  	Result func(ExpressRoutePortsClient) (ExpressRoutePort, error)
 13578  }
 13579  
 13580  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 13581  func (future *ExpressRoutePortsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 13582  	var azFuture azure.Future
 13583  	if err := json.Unmarshal(body, &azFuture); err != nil {
 13584  		return err
 13585  	}
 13586  	future.FutureAPI = &azFuture
 13587  	future.Result = future.result
 13588  	return nil
 13589  }
 13590  
 13591  // result is the default implementation for ExpressRoutePortsCreateOrUpdateFuture.Result.
 13592  func (future *ExpressRoutePortsCreateOrUpdateFuture) result(client ExpressRoutePortsClient) (erp ExpressRoutePort, err error) {
 13593  	var done bool
 13594  	done, err = future.DoneWithContext(context.Background(), client)
 13595  	if err != nil {
 13596  		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 13597  		return
 13598  	}
 13599  	if !done {
 13600  		erp.Response.Response = future.Response()
 13601  		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsCreateOrUpdateFuture")
 13602  		return
 13603  	}
 13604  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 13605  	if erp.Response.Response, err = future.GetResult(sender); err == nil && erp.Response.Response.StatusCode != http.StatusNoContent {
 13606  		erp, err = client.CreateOrUpdateResponder(erp.Response.Response)
 13607  		if err != nil {
 13608  			err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsCreateOrUpdateFuture", "Result", erp.Response.Response, "Failure responding to request")
 13609  		}
 13610  	}
 13611  	return
 13612  }
 13613  
 13614  // ExpressRoutePortsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 13615  // operation.
 13616  type ExpressRoutePortsDeleteFuture struct {
 13617  	azure.FutureAPI
 13618  	// Result returns the result of the asynchronous operation.
 13619  	// If the operation has not completed it will return an error.
 13620  	Result func(ExpressRoutePortsClient) (autorest.Response, error)
 13621  }
 13622  
 13623  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 13624  func (future *ExpressRoutePortsDeleteFuture) UnmarshalJSON(body []byte) error {
 13625  	var azFuture azure.Future
 13626  	if err := json.Unmarshal(body, &azFuture); err != nil {
 13627  		return err
 13628  	}
 13629  	future.FutureAPI = &azFuture
 13630  	future.Result = future.result
 13631  	return nil
 13632  }
 13633  
 13634  // result is the default implementation for ExpressRoutePortsDeleteFuture.Result.
 13635  func (future *ExpressRoutePortsDeleteFuture) result(client ExpressRoutePortsClient) (ar autorest.Response, err error) {
 13636  	var done bool
 13637  	done, err = future.DoneWithContext(context.Background(), client)
 13638  	if err != nil {
 13639  		err = autorest.NewErrorWithError(err, "network.ExpressRoutePortsDeleteFuture", "Result", future.Response(), "Polling failure")
 13640  		return
 13641  	}
 13642  	if !done {
 13643  		ar.Response = future.Response()
 13644  		err = azure.NewAsyncOpIncompleteError("network.ExpressRoutePortsDeleteFuture")
 13645  		return
 13646  	}
 13647  	ar.Response = future.Response()
 13648  	return
 13649  }
 13650  
 13651  // ExpressRoutePortsLocation definition of the ExpressRoutePorts peering location resource.
 13652  type ExpressRoutePortsLocation struct {
 13653  	autorest.Response `json:"-"`
 13654  	// ExpressRoutePortsLocationPropertiesFormat - ExpressRoutePort peering location properties.
 13655  	*ExpressRoutePortsLocationPropertiesFormat `json:"properties,omitempty"`
 13656  	// ID - Resource ID.
 13657  	ID *string `json:"id,omitempty"`
 13658  	// Name - READ-ONLY; Resource name.
 13659  	Name *string `json:"name,omitempty"`
 13660  	// Type - READ-ONLY; Resource type.
 13661  	Type *string `json:"type,omitempty"`
 13662  	// Location - Resource location.
 13663  	Location *string `json:"location,omitempty"`
 13664  	// Tags - Resource tags.
 13665  	Tags map[string]*string `json:"tags"`
 13666  }
 13667  
 13668  // MarshalJSON is the custom marshaler for ExpressRoutePortsLocation.
 13669  func (erpl ExpressRoutePortsLocation) MarshalJSON() ([]byte, error) {
 13670  	objectMap := make(map[string]interface{})
 13671  	if erpl.ExpressRoutePortsLocationPropertiesFormat != nil {
 13672  		objectMap["properties"] = erpl.ExpressRoutePortsLocationPropertiesFormat
 13673  	}
 13674  	if erpl.ID != nil {
 13675  		objectMap["id"] = erpl.ID
 13676  	}
 13677  	if erpl.Location != nil {
 13678  		objectMap["location"] = erpl.Location
 13679  	}
 13680  	if erpl.Tags != nil {
 13681  		objectMap["tags"] = erpl.Tags
 13682  	}
 13683  	return json.Marshal(objectMap)
 13684  }
 13685  
 13686  // UnmarshalJSON is the custom unmarshaler for ExpressRoutePortsLocation struct.
 13687  func (erpl *ExpressRoutePortsLocation) UnmarshalJSON(body []byte) error {
 13688  	var m map[string]*json.RawMessage
 13689  	err := json.Unmarshal(body, &m)
 13690  	if err != nil {
 13691  		return err
 13692  	}
 13693  	for k, v := range m {
 13694  		switch k {
 13695  		case "properties":
 13696  			if v != nil {
 13697  				var expressRoutePortsLocationPropertiesFormat ExpressRoutePortsLocationPropertiesFormat
 13698  				err = json.Unmarshal(*v, &expressRoutePortsLocationPropertiesFormat)
 13699  				if err != nil {
 13700  					return err
 13701  				}
 13702  				erpl.ExpressRoutePortsLocationPropertiesFormat = &expressRoutePortsLocationPropertiesFormat
 13703  			}
 13704  		case "id":
 13705  			if v != nil {
 13706  				var ID string
 13707  				err = json.Unmarshal(*v, &ID)
 13708  				if err != nil {
 13709  					return err
 13710  				}
 13711  				erpl.ID = &ID
 13712  			}
 13713  		case "name":
 13714  			if v != nil {
 13715  				var name string
 13716  				err = json.Unmarshal(*v, &name)
 13717  				if err != nil {
 13718  					return err
 13719  				}
 13720  				erpl.Name = &name
 13721  			}
 13722  		case "type":
 13723  			if v != nil {
 13724  				var typeVar string
 13725  				err = json.Unmarshal(*v, &typeVar)
 13726  				if err != nil {
 13727  					return err
 13728  				}
 13729  				erpl.Type = &typeVar
 13730  			}
 13731  		case "location":
 13732  			if v != nil {
 13733  				var location string
 13734  				err = json.Unmarshal(*v, &location)
 13735  				if err != nil {
 13736  					return err
 13737  				}
 13738  				erpl.Location = &location
 13739  			}
 13740  		case "tags":
 13741  			if v != nil {
 13742  				var tags map[string]*string
 13743  				err = json.Unmarshal(*v, &tags)
 13744  				if err != nil {
 13745  					return err
 13746  				}
 13747  				erpl.Tags = tags
 13748  			}
 13749  		}
 13750  	}
 13751  
 13752  	return nil
 13753  }
 13754  
 13755  // ExpressRoutePortsLocationBandwidths real-time inventory of available ExpressRoute port bandwidths.
 13756  type ExpressRoutePortsLocationBandwidths struct {
 13757  	// OfferName - READ-ONLY; Bandwidth descriptive name.
 13758  	OfferName *string `json:"offerName,omitempty"`
 13759  	// ValueInGbps - READ-ONLY; Bandwidth value in Gbps.
 13760  	ValueInGbps *int32 `json:"valueInGbps,omitempty"`
 13761  }
 13762  
 13763  // MarshalJSON is the custom marshaler for ExpressRoutePortsLocationBandwidths.
 13764  func (erplb ExpressRoutePortsLocationBandwidths) MarshalJSON() ([]byte, error) {
 13765  	objectMap := make(map[string]interface{})
 13766  	return json.Marshal(objectMap)
 13767  }
 13768  
 13769  // ExpressRoutePortsLocationListResult response for ListExpressRoutePortsLocations API service call.
 13770  type ExpressRoutePortsLocationListResult struct {
 13771  	autorest.Response `json:"-"`
 13772  	// Value - The list of all ExpressRoutePort peering locations.
 13773  	Value *[]ExpressRoutePortsLocation `json:"value,omitempty"`
 13774  	// NextLink - The URL to get the next set of results.
 13775  	NextLink *string `json:"nextLink,omitempty"`
 13776  }
 13777  
 13778  // ExpressRoutePortsLocationListResultIterator provides access to a complete listing of
 13779  // ExpressRoutePortsLocation values.
 13780  type ExpressRoutePortsLocationListResultIterator struct {
 13781  	i    int
 13782  	page ExpressRoutePortsLocationListResultPage
 13783  }
 13784  
 13785  // NextWithContext advances to the next value.  If there was an error making
 13786  // the request the iterator does not advance and the error is returned.
 13787  func (iter *ExpressRoutePortsLocationListResultIterator) NextWithContext(ctx context.Context) (err error) {
 13788  	if tracing.IsEnabled() {
 13789  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultIterator.NextWithContext")
 13790  		defer func() {
 13791  			sc := -1
 13792  			if iter.Response().Response.Response != nil {
 13793  				sc = iter.Response().Response.Response.StatusCode
 13794  			}
 13795  			tracing.EndSpan(ctx, sc, err)
 13796  		}()
 13797  	}
 13798  	iter.i++
 13799  	if iter.i < len(iter.page.Values()) {
 13800  		return nil
 13801  	}
 13802  	err = iter.page.NextWithContext(ctx)
 13803  	if err != nil {
 13804  		iter.i--
 13805  		return err
 13806  	}
 13807  	iter.i = 0
 13808  	return nil
 13809  }
 13810  
 13811  // Next advances to the next value.  If there was an error making
 13812  // the request the iterator does not advance and the error is returned.
 13813  // Deprecated: Use NextWithContext() instead.
 13814  func (iter *ExpressRoutePortsLocationListResultIterator) Next() error {
 13815  	return iter.NextWithContext(context.Background())
 13816  }
 13817  
 13818  // NotDone returns true if the enumeration should be started or is not yet complete.
 13819  func (iter ExpressRoutePortsLocationListResultIterator) NotDone() bool {
 13820  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 13821  }
 13822  
 13823  // Response returns the raw server response from the last page request.
 13824  func (iter ExpressRoutePortsLocationListResultIterator) Response() ExpressRoutePortsLocationListResult {
 13825  	return iter.page.Response()
 13826  }
 13827  
 13828  // Value returns the current value or a zero-initialized value if the
 13829  // iterator has advanced beyond the end of the collection.
 13830  func (iter ExpressRoutePortsLocationListResultIterator) Value() ExpressRoutePortsLocation {
 13831  	if !iter.page.NotDone() {
 13832  		return ExpressRoutePortsLocation{}
 13833  	}
 13834  	return iter.page.Values()[iter.i]
 13835  }
 13836  
 13837  // Creates a new instance of the ExpressRoutePortsLocationListResultIterator type.
 13838  func NewExpressRoutePortsLocationListResultIterator(page ExpressRoutePortsLocationListResultPage) ExpressRoutePortsLocationListResultIterator {
 13839  	return ExpressRoutePortsLocationListResultIterator{page: page}
 13840  }
 13841  
 13842  // IsEmpty returns true if the ListResult contains no values.
 13843  func (erpllr ExpressRoutePortsLocationListResult) IsEmpty() bool {
 13844  	return erpllr.Value == nil || len(*erpllr.Value) == 0
 13845  }
 13846  
 13847  // hasNextLink returns true if the NextLink is not empty.
 13848  func (erpllr ExpressRoutePortsLocationListResult) hasNextLink() bool {
 13849  	return erpllr.NextLink != nil && len(*erpllr.NextLink) != 0
 13850  }
 13851  
 13852  // expressRoutePortsLocationListResultPreparer prepares a request to retrieve the next set of results.
 13853  // It returns nil if no more results exist.
 13854  func (erpllr ExpressRoutePortsLocationListResult) expressRoutePortsLocationListResultPreparer(ctx context.Context) (*http.Request, error) {
 13855  	if !erpllr.hasNextLink() {
 13856  		return nil, nil
 13857  	}
 13858  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 13859  		autorest.AsJSON(),
 13860  		autorest.AsGet(),
 13861  		autorest.WithBaseURL(to.String(erpllr.NextLink)))
 13862  }
 13863  
 13864  // ExpressRoutePortsLocationListResultPage contains a page of ExpressRoutePortsLocation values.
 13865  type ExpressRoutePortsLocationListResultPage struct {
 13866  	fn     func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)
 13867  	erpllr ExpressRoutePortsLocationListResult
 13868  }
 13869  
 13870  // NextWithContext advances to the next page of values.  If there was an error making
 13871  // the request the page does not advance and the error is returned.
 13872  func (page *ExpressRoutePortsLocationListResultPage) NextWithContext(ctx context.Context) (err error) {
 13873  	if tracing.IsEnabled() {
 13874  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRoutePortsLocationListResultPage.NextWithContext")
 13875  		defer func() {
 13876  			sc := -1
 13877  			if page.Response().Response.Response != nil {
 13878  				sc = page.Response().Response.Response.StatusCode
 13879  			}
 13880  			tracing.EndSpan(ctx, sc, err)
 13881  		}()
 13882  	}
 13883  	for {
 13884  		next, err := page.fn(ctx, page.erpllr)
 13885  		if err != nil {
 13886  			return err
 13887  		}
 13888  		page.erpllr = next
 13889  		if !next.hasNextLink() || !next.IsEmpty() {
 13890  			break
 13891  		}
 13892  	}
 13893  	return nil
 13894  }
 13895  
 13896  // Next advances to the next page of values.  If there was an error making
 13897  // the request the page does not advance and the error is returned.
 13898  // Deprecated: Use NextWithContext() instead.
 13899  func (page *ExpressRoutePortsLocationListResultPage) Next() error {
 13900  	return page.NextWithContext(context.Background())
 13901  }
 13902  
 13903  // NotDone returns true if the page enumeration should be started or is not yet complete.
 13904  func (page ExpressRoutePortsLocationListResultPage) NotDone() bool {
 13905  	return !page.erpllr.IsEmpty()
 13906  }
 13907  
 13908  // Response returns the raw server response from the last page request.
 13909  func (page ExpressRoutePortsLocationListResultPage) Response() ExpressRoutePortsLocationListResult {
 13910  	return page.erpllr
 13911  }
 13912  
 13913  // Values returns the slice of values for the current page or nil if there are no values.
 13914  func (page ExpressRoutePortsLocationListResultPage) Values() []ExpressRoutePortsLocation {
 13915  	if page.erpllr.IsEmpty() {
 13916  		return nil
 13917  	}
 13918  	return *page.erpllr.Value
 13919  }
 13920  
 13921  // Creates a new instance of the ExpressRoutePortsLocationListResultPage type.
 13922  func NewExpressRoutePortsLocationListResultPage(cur ExpressRoutePortsLocationListResult, getNextPage func(context.Context, ExpressRoutePortsLocationListResult) (ExpressRoutePortsLocationListResult, error)) ExpressRoutePortsLocationListResultPage {
 13923  	return ExpressRoutePortsLocationListResultPage{
 13924  		fn:     getNextPage,
 13925  		erpllr: cur,
 13926  	}
 13927  }
 13928  
 13929  // ExpressRoutePortsLocationPropertiesFormat properties specific to ExpressRoutePorts peering location
 13930  // resources.
 13931  type ExpressRoutePortsLocationPropertiesFormat struct {
 13932  	// Address - READ-ONLY; Address of peering location.
 13933  	Address *string `json:"address,omitempty"`
 13934  	// Contact - READ-ONLY; Contact details of peering locations.
 13935  	Contact *string `json:"contact,omitempty"`
 13936  	// AvailableBandwidths - The inventory of available ExpressRoutePort bandwidths.
 13937  	AvailableBandwidths *[]ExpressRoutePortsLocationBandwidths `json:"availableBandwidths,omitempty"`
 13938  	// ProvisioningState - READ-ONLY; The provisioning state of the express route port location resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 13939  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 13940  }
 13941  
 13942  // MarshalJSON is the custom marshaler for ExpressRoutePortsLocationPropertiesFormat.
 13943  func (erplpf ExpressRoutePortsLocationPropertiesFormat) MarshalJSON() ([]byte, error) {
 13944  	objectMap := make(map[string]interface{})
 13945  	if erplpf.AvailableBandwidths != nil {
 13946  		objectMap["availableBandwidths"] = erplpf.AvailableBandwidths
 13947  	}
 13948  	return json.Marshal(objectMap)
 13949  }
 13950  
 13951  // ExpressRouteServiceProvider a ExpressRouteResourceProvider object.
 13952  type ExpressRouteServiceProvider struct {
 13953  	// ExpressRouteServiceProviderPropertiesFormat - Properties of the express route service provider.
 13954  	*ExpressRouteServiceProviderPropertiesFormat `json:"properties,omitempty"`
 13955  	// ID - Resource ID.
 13956  	ID *string `json:"id,omitempty"`
 13957  	// Name - READ-ONLY; Resource name.
 13958  	Name *string `json:"name,omitempty"`
 13959  	// Type - READ-ONLY; Resource type.
 13960  	Type *string `json:"type,omitempty"`
 13961  	// Location - Resource location.
 13962  	Location *string `json:"location,omitempty"`
 13963  	// Tags - Resource tags.
 13964  	Tags map[string]*string `json:"tags"`
 13965  }
 13966  
 13967  // MarshalJSON is the custom marshaler for ExpressRouteServiceProvider.
 13968  func (ersp ExpressRouteServiceProvider) MarshalJSON() ([]byte, error) {
 13969  	objectMap := make(map[string]interface{})
 13970  	if ersp.ExpressRouteServiceProviderPropertiesFormat != nil {
 13971  		objectMap["properties"] = ersp.ExpressRouteServiceProviderPropertiesFormat
 13972  	}
 13973  	if ersp.ID != nil {
 13974  		objectMap["id"] = ersp.ID
 13975  	}
 13976  	if ersp.Location != nil {
 13977  		objectMap["location"] = ersp.Location
 13978  	}
 13979  	if ersp.Tags != nil {
 13980  		objectMap["tags"] = ersp.Tags
 13981  	}
 13982  	return json.Marshal(objectMap)
 13983  }
 13984  
 13985  // UnmarshalJSON is the custom unmarshaler for ExpressRouteServiceProvider struct.
 13986  func (ersp *ExpressRouteServiceProvider) UnmarshalJSON(body []byte) error {
 13987  	var m map[string]*json.RawMessage
 13988  	err := json.Unmarshal(body, &m)
 13989  	if err != nil {
 13990  		return err
 13991  	}
 13992  	for k, v := range m {
 13993  		switch k {
 13994  		case "properties":
 13995  			if v != nil {
 13996  				var expressRouteServiceProviderPropertiesFormat ExpressRouteServiceProviderPropertiesFormat
 13997  				err = json.Unmarshal(*v, &expressRouteServiceProviderPropertiesFormat)
 13998  				if err != nil {
 13999  					return err
 14000  				}
 14001  				ersp.ExpressRouteServiceProviderPropertiesFormat = &expressRouteServiceProviderPropertiesFormat
 14002  			}
 14003  		case "id":
 14004  			if v != nil {
 14005  				var ID string
 14006  				err = json.Unmarshal(*v, &ID)
 14007  				if err != nil {
 14008  					return err
 14009  				}
 14010  				ersp.ID = &ID
 14011  			}
 14012  		case "name":
 14013  			if v != nil {
 14014  				var name string
 14015  				err = json.Unmarshal(*v, &name)
 14016  				if err != nil {
 14017  					return err
 14018  				}
 14019  				ersp.Name = &name
 14020  			}
 14021  		case "type":
 14022  			if v != nil {
 14023  				var typeVar string
 14024  				err = json.Unmarshal(*v, &typeVar)
 14025  				if err != nil {
 14026  					return err
 14027  				}
 14028  				ersp.Type = &typeVar
 14029  			}
 14030  		case "location":
 14031  			if v != nil {
 14032  				var location string
 14033  				err = json.Unmarshal(*v, &location)
 14034  				if err != nil {
 14035  					return err
 14036  				}
 14037  				ersp.Location = &location
 14038  			}
 14039  		case "tags":
 14040  			if v != nil {
 14041  				var tags map[string]*string
 14042  				err = json.Unmarshal(*v, &tags)
 14043  				if err != nil {
 14044  					return err
 14045  				}
 14046  				ersp.Tags = tags
 14047  			}
 14048  		}
 14049  	}
 14050  
 14051  	return nil
 14052  }
 14053  
 14054  // ExpressRouteServiceProviderBandwidthsOffered contains bandwidths offered in ExpressRouteServiceProvider
 14055  // resources.
 14056  type ExpressRouteServiceProviderBandwidthsOffered struct {
 14057  	// OfferName - The OfferName.
 14058  	OfferName *string `json:"offerName,omitempty"`
 14059  	// ValueInMbps - The ValueInMbps.
 14060  	ValueInMbps *int32 `json:"valueInMbps,omitempty"`
 14061  }
 14062  
 14063  // ExpressRouteServiceProviderListResult response for the ListExpressRouteServiceProvider API service call.
 14064  type ExpressRouteServiceProviderListResult struct {
 14065  	autorest.Response `json:"-"`
 14066  	// Value - A list of ExpressRouteResourceProvider resources.
 14067  	Value *[]ExpressRouteServiceProvider `json:"value,omitempty"`
 14068  	// NextLink - The URL to get the next set of results.
 14069  	NextLink *string `json:"nextLink,omitempty"`
 14070  }
 14071  
 14072  // ExpressRouteServiceProviderListResultIterator provides access to a complete listing of
 14073  // ExpressRouteServiceProvider values.
 14074  type ExpressRouteServiceProviderListResultIterator struct {
 14075  	i    int
 14076  	page ExpressRouteServiceProviderListResultPage
 14077  }
 14078  
 14079  // NextWithContext advances to the next value.  If there was an error making
 14080  // the request the iterator does not advance and the error is returned.
 14081  func (iter *ExpressRouteServiceProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
 14082  	if tracing.IsEnabled() {
 14083  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultIterator.NextWithContext")
 14084  		defer func() {
 14085  			sc := -1
 14086  			if iter.Response().Response.Response != nil {
 14087  				sc = iter.Response().Response.Response.StatusCode
 14088  			}
 14089  			tracing.EndSpan(ctx, sc, err)
 14090  		}()
 14091  	}
 14092  	iter.i++
 14093  	if iter.i < len(iter.page.Values()) {
 14094  		return nil
 14095  	}
 14096  	err = iter.page.NextWithContext(ctx)
 14097  	if err != nil {
 14098  		iter.i--
 14099  		return err
 14100  	}
 14101  	iter.i = 0
 14102  	return nil
 14103  }
 14104  
 14105  // Next advances to the next value.  If there was an error making
 14106  // the request the iterator does not advance and the error is returned.
 14107  // Deprecated: Use NextWithContext() instead.
 14108  func (iter *ExpressRouteServiceProviderListResultIterator) Next() error {
 14109  	return iter.NextWithContext(context.Background())
 14110  }
 14111  
 14112  // NotDone returns true if the enumeration should be started or is not yet complete.
 14113  func (iter ExpressRouteServiceProviderListResultIterator) NotDone() bool {
 14114  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 14115  }
 14116  
 14117  // Response returns the raw server response from the last page request.
 14118  func (iter ExpressRouteServiceProviderListResultIterator) Response() ExpressRouteServiceProviderListResult {
 14119  	return iter.page.Response()
 14120  }
 14121  
 14122  // Value returns the current value or a zero-initialized value if the
 14123  // iterator has advanced beyond the end of the collection.
 14124  func (iter ExpressRouteServiceProviderListResultIterator) Value() ExpressRouteServiceProvider {
 14125  	if !iter.page.NotDone() {
 14126  		return ExpressRouteServiceProvider{}
 14127  	}
 14128  	return iter.page.Values()[iter.i]
 14129  }
 14130  
 14131  // Creates a new instance of the ExpressRouteServiceProviderListResultIterator type.
 14132  func NewExpressRouteServiceProviderListResultIterator(page ExpressRouteServiceProviderListResultPage) ExpressRouteServiceProviderListResultIterator {
 14133  	return ExpressRouteServiceProviderListResultIterator{page: page}
 14134  }
 14135  
 14136  // IsEmpty returns true if the ListResult contains no values.
 14137  func (ersplr ExpressRouteServiceProviderListResult) IsEmpty() bool {
 14138  	return ersplr.Value == nil || len(*ersplr.Value) == 0
 14139  }
 14140  
 14141  // hasNextLink returns true if the NextLink is not empty.
 14142  func (ersplr ExpressRouteServiceProviderListResult) hasNextLink() bool {
 14143  	return ersplr.NextLink != nil && len(*ersplr.NextLink) != 0
 14144  }
 14145  
 14146  // expressRouteServiceProviderListResultPreparer prepares a request to retrieve the next set of results.
 14147  // It returns nil if no more results exist.
 14148  func (ersplr ExpressRouteServiceProviderListResult) expressRouteServiceProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
 14149  	if !ersplr.hasNextLink() {
 14150  		return nil, nil
 14151  	}
 14152  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 14153  		autorest.AsJSON(),
 14154  		autorest.AsGet(),
 14155  		autorest.WithBaseURL(to.String(ersplr.NextLink)))
 14156  }
 14157  
 14158  // ExpressRouteServiceProviderListResultPage contains a page of ExpressRouteServiceProvider values.
 14159  type ExpressRouteServiceProviderListResultPage struct {
 14160  	fn     func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)
 14161  	ersplr ExpressRouteServiceProviderListResult
 14162  }
 14163  
 14164  // NextWithContext advances to the next page of values.  If there was an error making
 14165  // the request the page does not advance and the error is returned.
 14166  func (page *ExpressRouteServiceProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
 14167  	if tracing.IsEnabled() {
 14168  		ctx = tracing.StartSpan(ctx, fqdn+"/ExpressRouteServiceProviderListResultPage.NextWithContext")
 14169  		defer func() {
 14170  			sc := -1
 14171  			if page.Response().Response.Response != nil {
 14172  				sc = page.Response().Response.Response.StatusCode
 14173  			}
 14174  			tracing.EndSpan(ctx, sc, err)
 14175  		}()
 14176  	}
 14177  	for {
 14178  		next, err := page.fn(ctx, page.ersplr)
 14179  		if err != nil {
 14180  			return err
 14181  		}
 14182  		page.ersplr = next
 14183  		if !next.hasNextLink() || !next.IsEmpty() {
 14184  			break
 14185  		}
 14186  	}
 14187  	return nil
 14188  }
 14189  
 14190  // Next advances to the next page of values.  If there was an error making
 14191  // the request the page does not advance and the error is returned.
 14192  // Deprecated: Use NextWithContext() instead.
 14193  func (page *ExpressRouteServiceProviderListResultPage) Next() error {
 14194  	return page.NextWithContext(context.Background())
 14195  }
 14196  
 14197  // NotDone returns true if the page enumeration should be started or is not yet complete.
 14198  func (page ExpressRouteServiceProviderListResultPage) NotDone() bool {
 14199  	return !page.ersplr.IsEmpty()
 14200  }
 14201  
 14202  // Response returns the raw server response from the last page request.
 14203  func (page ExpressRouteServiceProviderListResultPage) Response() ExpressRouteServiceProviderListResult {
 14204  	return page.ersplr
 14205  }
 14206  
 14207  // Values returns the slice of values for the current page or nil if there are no values.
 14208  func (page ExpressRouteServiceProviderListResultPage) Values() []ExpressRouteServiceProvider {
 14209  	if page.ersplr.IsEmpty() {
 14210  		return nil
 14211  	}
 14212  	return *page.ersplr.Value
 14213  }
 14214  
 14215  // Creates a new instance of the ExpressRouteServiceProviderListResultPage type.
 14216  func NewExpressRouteServiceProviderListResultPage(cur ExpressRouteServiceProviderListResult, getNextPage func(context.Context, ExpressRouteServiceProviderListResult) (ExpressRouteServiceProviderListResult, error)) ExpressRouteServiceProviderListResultPage {
 14217  	return ExpressRouteServiceProviderListResultPage{
 14218  		fn:     getNextPage,
 14219  		ersplr: cur,
 14220  	}
 14221  }
 14222  
 14223  // ExpressRouteServiceProviderPropertiesFormat properties of ExpressRouteServiceProvider.
 14224  type ExpressRouteServiceProviderPropertiesFormat struct {
 14225  	// PeeringLocations - A list of peering locations.
 14226  	PeeringLocations *[]string `json:"peeringLocations,omitempty"`
 14227  	// BandwidthsOffered - A list of bandwidths offered.
 14228  	BandwidthsOffered *[]ExpressRouteServiceProviderBandwidthsOffered `json:"bandwidthsOffered,omitempty"`
 14229  	// ProvisioningState - READ-ONLY; The provisioning state of the express route service provider resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 14230  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 14231  }
 14232  
 14233  // MarshalJSON is the custom marshaler for ExpressRouteServiceProviderPropertiesFormat.
 14234  func (ersppf ExpressRouteServiceProviderPropertiesFormat) MarshalJSON() ([]byte, error) {
 14235  	objectMap := make(map[string]interface{})
 14236  	if ersppf.PeeringLocations != nil {
 14237  		objectMap["peeringLocations"] = ersppf.PeeringLocations
 14238  	}
 14239  	if ersppf.BandwidthsOffered != nil {
 14240  		objectMap["bandwidthsOffered"] = ersppf.BandwidthsOffered
 14241  	}
 14242  	return json.Marshal(objectMap)
 14243  }
 14244  
 14245  // FirewallPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 14246  // long-running operation.
 14247  type FirewallPoliciesCreateOrUpdateFuture struct {
 14248  	azure.FutureAPI
 14249  	// Result returns the result of the asynchronous operation.
 14250  	// If the operation has not completed it will return an error.
 14251  	Result func(FirewallPoliciesClient) (FirewallPolicy, error)
 14252  }
 14253  
 14254  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 14255  func (future *FirewallPoliciesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 14256  	var azFuture azure.Future
 14257  	if err := json.Unmarshal(body, &azFuture); err != nil {
 14258  		return err
 14259  	}
 14260  	future.FutureAPI = &azFuture
 14261  	future.Result = future.result
 14262  	return nil
 14263  }
 14264  
 14265  // result is the default implementation for FirewallPoliciesCreateOrUpdateFuture.Result.
 14266  func (future *FirewallPoliciesCreateOrUpdateFuture) result(client FirewallPoliciesClient) (fp FirewallPolicy, err error) {
 14267  	var done bool
 14268  	done, err = future.DoneWithContext(context.Background(), client)
 14269  	if err != nil {
 14270  		err = autorest.NewErrorWithError(err, "network.FirewallPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 14271  		return
 14272  	}
 14273  	if !done {
 14274  		fp.Response.Response = future.Response()
 14275  		err = azure.NewAsyncOpIncompleteError("network.FirewallPoliciesCreateOrUpdateFuture")
 14276  		return
 14277  	}
 14278  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 14279  	if fp.Response.Response, err = future.GetResult(sender); err == nil && fp.Response.Response.StatusCode != http.StatusNoContent {
 14280  		fp, err = client.CreateOrUpdateResponder(fp.Response.Response)
 14281  		if err != nil {
 14282  			err = autorest.NewErrorWithError(err, "network.FirewallPoliciesCreateOrUpdateFuture", "Result", fp.Response.Response, "Failure responding to request")
 14283  		}
 14284  	}
 14285  	return
 14286  }
 14287  
 14288  // FirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 14289  // operation.
 14290  type FirewallPoliciesDeleteFuture struct {
 14291  	azure.FutureAPI
 14292  	// Result returns the result of the asynchronous operation.
 14293  	// If the operation has not completed it will return an error.
 14294  	Result func(FirewallPoliciesClient) (autorest.Response, error)
 14295  }
 14296  
 14297  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 14298  func (future *FirewallPoliciesDeleteFuture) UnmarshalJSON(body []byte) error {
 14299  	var azFuture azure.Future
 14300  	if err := json.Unmarshal(body, &azFuture); err != nil {
 14301  		return err
 14302  	}
 14303  	future.FutureAPI = &azFuture
 14304  	future.Result = future.result
 14305  	return nil
 14306  }
 14307  
 14308  // result is the default implementation for FirewallPoliciesDeleteFuture.Result.
 14309  func (future *FirewallPoliciesDeleteFuture) result(client FirewallPoliciesClient) (ar autorest.Response, err error) {
 14310  	var done bool
 14311  	done, err = future.DoneWithContext(context.Background(), client)
 14312  	if err != nil {
 14313  		err = autorest.NewErrorWithError(err, "network.FirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
 14314  		return
 14315  	}
 14316  	if !done {
 14317  		ar.Response = future.Response()
 14318  		err = azure.NewAsyncOpIncompleteError("network.FirewallPoliciesDeleteFuture")
 14319  		return
 14320  	}
 14321  	ar.Response = future.Response()
 14322  	return
 14323  }
 14324  
 14325  // FirewallPolicy firewallPolicy Resource.
 14326  type FirewallPolicy struct {
 14327  	autorest.Response `json:"-"`
 14328  	// FirewallPolicyPropertiesFormat - Properties of the firewall policy.
 14329  	*FirewallPolicyPropertiesFormat `json:"properties,omitempty"`
 14330  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 14331  	Etag *string `json:"etag,omitempty"`
 14332  	// ID - Resource ID.
 14333  	ID *string `json:"id,omitempty"`
 14334  	// Name - READ-ONLY; Resource name.
 14335  	Name *string `json:"name,omitempty"`
 14336  	// Type - READ-ONLY; Resource type.
 14337  	Type *string `json:"type,omitempty"`
 14338  	// Location - Resource location.
 14339  	Location *string `json:"location,omitempty"`
 14340  	// Tags - Resource tags.
 14341  	Tags map[string]*string `json:"tags"`
 14342  }
 14343  
 14344  // MarshalJSON is the custom marshaler for FirewallPolicy.
 14345  func (fp FirewallPolicy) MarshalJSON() ([]byte, error) {
 14346  	objectMap := make(map[string]interface{})
 14347  	if fp.FirewallPolicyPropertiesFormat != nil {
 14348  		objectMap["properties"] = fp.FirewallPolicyPropertiesFormat
 14349  	}
 14350  	if fp.ID != nil {
 14351  		objectMap["id"] = fp.ID
 14352  	}
 14353  	if fp.Location != nil {
 14354  		objectMap["location"] = fp.Location
 14355  	}
 14356  	if fp.Tags != nil {
 14357  		objectMap["tags"] = fp.Tags
 14358  	}
 14359  	return json.Marshal(objectMap)
 14360  }
 14361  
 14362  // UnmarshalJSON is the custom unmarshaler for FirewallPolicy struct.
 14363  func (fp *FirewallPolicy) UnmarshalJSON(body []byte) error {
 14364  	var m map[string]*json.RawMessage
 14365  	err := json.Unmarshal(body, &m)
 14366  	if err != nil {
 14367  		return err
 14368  	}
 14369  	for k, v := range m {
 14370  		switch k {
 14371  		case "properties":
 14372  			if v != nil {
 14373  				var firewallPolicyPropertiesFormat FirewallPolicyPropertiesFormat
 14374  				err = json.Unmarshal(*v, &firewallPolicyPropertiesFormat)
 14375  				if err != nil {
 14376  					return err
 14377  				}
 14378  				fp.FirewallPolicyPropertiesFormat = &firewallPolicyPropertiesFormat
 14379  			}
 14380  		case "etag":
 14381  			if v != nil {
 14382  				var etag string
 14383  				err = json.Unmarshal(*v, &etag)
 14384  				if err != nil {
 14385  					return err
 14386  				}
 14387  				fp.Etag = &etag
 14388  			}
 14389  		case "id":
 14390  			if v != nil {
 14391  				var ID string
 14392  				err = json.Unmarshal(*v, &ID)
 14393  				if err != nil {
 14394  					return err
 14395  				}
 14396  				fp.ID = &ID
 14397  			}
 14398  		case "name":
 14399  			if v != nil {
 14400  				var name string
 14401  				err = json.Unmarshal(*v, &name)
 14402  				if err != nil {
 14403  					return err
 14404  				}
 14405  				fp.Name = &name
 14406  			}
 14407  		case "type":
 14408  			if v != nil {
 14409  				var typeVar string
 14410  				err = json.Unmarshal(*v, &typeVar)
 14411  				if err != nil {
 14412  					return err
 14413  				}
 14414  				fp.Type = &typeVar
 14415  			}
 14416  		case "location":
 14417  			if v != nil {
 14418  				var location string
 14419  				err = json.Unmarshal(*v, &location)
 14420  				if err != nil {
 14421  					return err
 14422  				}
 14423  				fp.Location = &location
 14424  			}
 14425  		case "tags":
 14426  			if v != nil {
 14427  				var tags map[string]*string
 14428  				err = json.Unmarshal(*v, &tags)
 14429  				if err != nil {
 14430  					return err
 14431  				}
 14432  				fp.Tags = tags
 14433  			}
 14434  		}
 14435  	}
 14436  
 14437  	return nil
 14438  }
 14439  
 14440  // FirewallPolicyFilterRule firewall Policy Filter Rule.
 14441  type FirewallPolicyFilterRule struct {
 14442  	// Action - The action type of a Filter rule.
 14443  	Action *FirewallPolicyFilterRuleAction `json:"action,omitempty"`
 14444  	// RuleConditions - Collection of rule conditions used by a rule.
 14445  	RuleConditions *[]BasicFirewallPolicyRuleCondition `json:"ruleConditions,omitempty"`
 14446  	// Name - The name of the rule.
 14447  	Name *string `json:"name,omitempty"`
 14448  	// Priority - Priority of the Firewall Policy Rule resource.
 14449  	Priority *int32 `json:"priority,omitempty"`
 14450  	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
 14451  	RuleType RuleType `json:"ruleType,omitempty"`
 14452  }
 14453  
 14454  // MarshalJSON is the custom marshaler for FirewallPolicyFilterRule.
 14455  func (fpfr FirewallPolicyFilterRule) MarshalJSON() ([]byte, error) {
 14456  	fpfr.RuleType = RuleTypeFirewallPolicyFilterRule
 14457  	objectMap := make(map[string]interface{})
 14458  	if fpfr.Action != nil {
 14459  		objectMap["action"] = fpfr.Action
 14460  	}
 14461  	if fpfr.RuleConditions != nil {
 14462  		objectMap["ruleConditions"] = fpfr.RuleConditions
 14463  	}
 14464  	if fpfr.Name != nil {
 14465  		objectMap["name"] = fpfr.Name
 14466  	}
 14467  	if fpfr.Priority != nil {
 14468  		objectMap["priority"] = fpfr.Priority
 14469  	}
 14470  	if fpfr.RuleType != "" {
 14471  		objectMap["ruleType"] = fpfr.RuleType
 14472  	}
 14473  	return json.Marshal(objectMap)
 14474  }
 14475  
 14476  // AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
 14477  func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
 14478  	return nil, false
 14479  }
 14480  
 14481  // AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
 14482  func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
 14483  	return &fpfr, true
 14484  }
 14485  
 14486  // AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
 14487  func (fpfr FirewallPolicyFilterRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
 14488  	return nil, false
 14489  }
 14490  
 14491  // AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyFilterRule.
 14492  func (fpfr FirewallPolicyFilterRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
 14493  	return &fpfr, true
 14494  }
 14495  
 14496  // UnmarshalJSON is the custom unmarshaler for FirewallPolicyFilterRule struct.
 14497  func (fpfr *FirewallPolicyFilterRule) UnmarshalJSON(body []byte) error {
 14498  	var m map[string]*json.RawMessage
 14499  	err := json.Unmarshal(body, &m)
 14500  	if err != nil {
 14501  		return err
 14502  	}
 14503  	for k, v := range m {
 14504  		switch k {
 14505  		case "action":
 14506  			if v != nil {
 14507  				var action FirewallPolicyFilterRuleAction
 14508  				err = json.Unmarshal(*v, &action)
 14509  				if err != nil {
 14510  					return err
 14511  				}
 14512  				fpfr.Action = &action
 14513  			}
 14514  		case "ruleConditions":
 14515  			if v != nil {
 14516  				ruleConditions, err := unmarshalBasicFirewallPolicyRuleConditionArray(*v)
 14517  				if err != nil {
 14518  					return err
 14519  				}
 14520  				fpfr.RuleConditions = &ruleConditions
 14521  			}
 14522  		case "name":
 14523  			if v != nil {
 14524  				var name string
 14525  				err = json.Unmarshal(*v, &name)
 14526  				if err != nil {
 14527  					return err
 14528  				}
 14529  				fpfr.Name = &name
 14530  			}
 14531  		case "priority":
 14532  			if v != nil {
 14533  				var priority int32
 14534  				err = json.Unmarshal(*v, &priority)
 14535  				if err != nil {
 14536  					return err
 14537  				}
 14538  				fpfr.Priority = &priority
 14539  			}
 14540  		case "ruleType":
 14541  			if v != nil {
 14542  				var ruleType RuleType
 14543  				err = json.Unmarshal(*v, &ruleType)
 14544  				if err != nil {
 14545  					return err
 14546  				}
 14547  				fpfr.RuleType = ruleType
 14548  			}
 14549  		}
 14550  	}
 14551  
 14552  	return nil
 14553  }
 14554  
 14555  // FirewallPolicyFilterRuleAction properties of the FirewallPolicyFilterRuleAction.
 14556  type FirewallPolicyFilterRuleAction struct {
 14557  	// Type - The type of action. Possible values include: 'FirewallPolicyFilterRuleActionTypeAllow', 'FirewallPolicyFilterRuleActionTypeDeny'
 14558  	Type FirewallPolicyFilterRuleActionType `json:"type,omitempty"`
 14559  }
 14560  
 14561  // FirewallPolicyListResult response for ListFirewallPolicies API service call.
 14562  type FirewallPolicyListResult struct {
 14563  	autorest.Response `json:"-"`
 14564  	// Value - List of Firewall Policies in a resource group.
 14565  	Value *[]FirewallPolicy `json:"value,omitempty"`
 14566  	// NextLink - URL to get the next set of results.
 14567  	NextLink *string `json:"nextLink,omitempty"`
 14568  }
 14569  
 14570  // FirewallPolicyListResultIterator provides access to a complete listing of FirewallPolicy values.
 14571  type FirewallPolicyListResultIterator struct {
 14572  	i    int
 14573  	page FirewallPolicyListResultPage
 14574  }
 14575  
 14576  // NextWithContext advances to the next value.  If there was an error making
 14577  // the request the iterator does not advance and the error is returned.
 14578  func (iter *FirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
 14579  	if tracing.IsEnabled() {
 14580  		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyListResultIterator.NextWithContext")
 14581  		defer func() {
 14582  			sc := -1
 14583  			if iter.Response().Response.Response != nil {
 14584  				sc = iter.Response().Response.Response.StatusCode
 14585  			}
 14586  			tracing.EndSpan(ctx, sc, err)
 14587  		}()
 14588  	}
 14589  	iter.i++
 14590  	if iter.i < len(iter.page.Values()) {
 14591  		return nil
 14592  	}
 14593  	err = iter.page.NextWithContext(ctx)
 14594  	if err != nil {
 14595  		iter.i--
 14596  		return err
 14597  	}
 14598  	iter.i = 0
 14599  	return nil
 14600  }
 14601  
 14602  // Next advances to the next value.  If there was an error making
 14603  // the request the iterator does not advance and the error is returned.
 14604  // Deprecated: Use NextWithContext() instead.
 14605  func (iter *FirewallPolicyListResultIterator) Next() error {
 14606  	return iter.NextWithContext(context.Background())
 14607  }
 14608  
 14609  // NotDone returns true if the enumeration should be started or is not yet complete.
 14610  func (iter FirewallPolicyListResultIterator) NotDone() bool {
 14611  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 14612  }
 14613  
 14614  // Response returns the raw server response from the last page request.
 14615  func (iter FirewallPolicyListResultIterator) Response() FirewallPolicyListResult {
 14616  	return iter.page.Response()
 14617  }
 14618  
 14619  // Value returns the current value or a zero-initialized value if the
 14620  // iterator has advanced beyond the end of the collection.
 14621  func (iter FirewallPolicyListResultIterator) Value() FirewallPolicy {
 14622  	if !iter.page.NotDone() {
 14623  		return FirewallPolicy{}
 14624  	}
 14625  	return iter.page.Values()[iter.i]
 14626  }
 14627  
 14628  // Creates a new instance of the FirewallPolicyListResultIterator type.
 14629  func NewFirewallPolicyListResultIterator(page FirewallPolicyListResultPage) FirewallPolicyListResultIterator {
 14630  	return FirewallPolicyListResultIterator{page: page}
 14631  }
 14632  
 14633  // IsEmpty returns true if the ListResult contains no values.
 14634  func (fplr FirewallPolicyListResult) IsEmpty() bool {
 14635  	return fplr.Value == nil || len(*fplr.Value) == 0
 14636  }
 14637  
 14638  // hasNextLink returns true if the NextLink is not empty.
 14639  func (fplr FirewallPolicyListResult) hasNextLink() bool {
 14640  	return fplr.NextLink != nil && len(*fplr.NextLink) != 0
 14641  }
 14642  
 14643  // firewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
 14644  // It returns nil if no more results exist.
 14645  func (fplr FirewallPolicyListResult) firewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
 14646  	if !fplr.hasNextLink() {
 14647  		return nil, nil
 14648  	}
 14649  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 14650  		autorest.AsJSON(),
 14651  		autorest.AsGet(),
 14652  		autorest.WithBaseURL(to.String(fplr.NextLink)))
 14653  }
 14654  
 14655  // FirewallPolicyListResultPage contains a page of FirewallPolicy values.
 14656  type FirewallPolicyListResultPage struct {
 14657  	fn   func(context.Context, FirewallPolicyListResult) (FirewallPolicyListResult, error)
 14658  	fplr FirewallPolicyListResult
 14659  }
 14660  
 14661  // NextWithContext advances to the next page of values.  If there was an error making
 14662  // the request the page does not advance and the error is returned.
 14663  func (page *FirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
 14664  	if tracing.IsEnabled() {
 14665  		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyListResultPage.NextWithContext")
 14666  		defer func() {
 14667  			sc := -1
 14668  			if page.Response().Response.Response != nil {
 14669  				sc = page.Response().Response.Response.StatusCode
 14670  			}
 14671  			tracing.EndSpan(ctx, sc, err)
 14672  		}()
 14673  	}
 14674  	for {
 14675  		next, err := page.fn(ctx, page.fplr)
 14676  		if err != nil {
 14677  			return err
 14678  		}
 14679  		page.fplr = next
 14680  		if !next.hasNextLink() || !next.IsEmpty() {
 14681  			break
 14682  		}
 14683  	}
 14684  	return nil
 14685  }
 14686  
 14687  // Next advances to the next page of values.  If there was an error making
 14688  // the request the page does not advance and the error is returned.
 14689  // Deprecated: Use NextWithContext() instead.
 14690  func (page *FirewallPolicyListResultPage) Next() error {
 14691  	return page.NextWithContext(context.Background())
 14692  }
 14693  
 14694  // NotDone returns true if the page enumeration should be started or is not yet complete.
 14695  func (page FirewallPolicyListResultPage) NotDone() bool {
 14696  	return !page.fplr.IsEmpty()
 14697  }
 14698  
 14699  // Response returns the raw server response from the last page request.
 14700  func (page FirewallPolicyListResultPage) Response() FirewallPolicyListResult {
 14701  	return page.fplr
 14702  }
 14703  
 14704  // Values returns the slice of values for the current page or nil if there are no values.
 14705  func (page FirewallPolicyListResultPage) Values() []FirewallPolicy {
 14706  	if page.fplr.IsEmpty() {
 14707  		return nil
 14708  	}
 14709  	return *page.fplr.Value
 14710  }
 14711  
 14712  // Creates a new instance of the FirewallPolicyListResultPage type.
 14713  func NewFirewallPolicyListResultPage(cur FirewallPolicyListResult, getNextPage func(context.Context, FirewallPolicyListResult) (FirewallPolicyListResult, error)) FirewallPolicyListResultPage {
 14714  	return FirewallPolicyListResultPage{
 14715  		fn:   getNextPage,
 14716  		fplr: cur,
 14717  	}
 14718  }
 14719  
 14720  // FirewallPolicyNatRule firewall Policy NAT Rule.
 14721  type FirewallPolicyNatRule struct {
 14722  	// Action - The action type of a Nat rule.
 14723  	Action *FirewallPolicyNatRuleAction `json:"action,omitempty"`
 14724  	// TranslatedAddress - The translated address for this NAT rule.
 14725  	TranslatedAddress *string `json:"translatedAddress,omitempty"`
 14726  	// TranslatedPort - The translated port for this NAT rule.
 14727  	TranslatedPort *string `json:"translatedPort,omitempty"`
 14728  	// RuleCondition - The match conditions for incoming traffic.
 14729  	RuleCondition BasicFirewallPolicyRuleCondition `json:"ruleCondition,omitempty"`
 14730  	// Name - The name of the rule.
 14731  	Name *string `json:"name,omitempty"`
 14732  	// Priority - Priority of the Firewall Policy Rule resource.
 14733  	Priority *int32 `json:"priority,omitempty"`
 14734  	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
 14735  	RuleType RuleType `json:"ruleType,omitempty"`
 14736  }
 14737  
 14738  // MarshalJSON is the custom marshaler for FirewallPolicyNatRule.
 14739  func (fpnr FirewallPolicyNatRule) MarshalJSON() ([]byte, error) {
 14740  	fpnr.RuleType = RuleTypeFirewallPolicyNatRule
 14741  	objectMap := make(map[string]interface{})
 14742  	if fpnr.Action != nil {
 14743  		objectMap["action"] = fpnr.Action
 14744  	}
 14745  	if fpnr.TranslatedAddress != nil {
 14746  		objectMap["translatedAddress"] = fpnr.TranslatedAddress
 14747  	}
 14748  	if fpnr.TranslatedPort != nil {
 14749  		objectMap["translatedPort"] = fpnr.TranslatedPort
 14750  	}
 14751  	objectMap["ruleCondition"] = fpnr.RuleCondition
 14752  	if fpnr.Name != nil {
 14753  		objectMap["name"] = fpnr.Name
 14754  	}
 14755  	if fpnr.Priority != nil {
 14756  		objectMap["priority"] = fpnr.Priority
 14757  	}
 14758  	if fpnr.RuleType != "" {
 14759  		objectMap["ruleType"] = fpnr.RuleType
 14760  	}
 14761  	return json.Marshal(objectMap)
 14762  }
 14763  
 14764  // AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
 14765  func (fpnr FirewallPolicyNatRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
 14766  	return &fpnr, true
 14767  }
 14768  
 14769  // AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
 14770  func (fpnr FirewallPolicyNatRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
 14771  	return nil, false
 14772  }
 14773  
 14774  // AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
 14775  func (fpnr FirewallPolicyNatRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
 14776  	return nil, false
 14777  }
 14778  
 14779  // AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyNatRule.
 14780  func (fpnr FirewallPolicyNatRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
 14781  	return &fpnr, true
 14782  }
 14783  
 14784  // UnmarshalJSON is the custom unmarshaler for FirewallPolicyNatRule struct.
 14785  func (fpnr *FirewallPolicyNatRule) UnmarshalJSON(body []byte) error {
 14786  	var m map[string]*json.RawMessage
 14787  	err := json.Unmarshal(body, &m)
 14788  	if err != nil {
 14789  		return err
 14790  	}
 14791  	for k, v := range m {
 14792  		switch k {
 14793  		case "action":
 14794  			if v != nil {
 14795  				var action FirewallPolicyNatRuleAction
 14796  				err = json.Unmarshal(*v, &action)
 14797  				if err != nil {
 14798  					return err
 14799  				}
 14800  				fpnr.Action = &action
 14801  			}
 14802  		case "translatedAddress":
 14803  			if v != nil {
 14804  				var translatedAddress string
 14805  				err = json.Unmarshal(*v, &translatedAddress)
 14806  				if err != nil {
 14807  					return err
 14808  				}
 14809  				fpnr.TranslatedAddress = &translatedAddress
 14810  			}
 14811  		case "translatedPort":
 14812  			if v != nil {
 14813  				var translatedPort string
 14814  				err = json.Unmarshal(*v, &translatedPort)
 14815  				if err != nil {
 14816  					return err
 14817  				}
 14818  				fpnr.TranslatedPort = &translatedPort
 14819  			}
 14820  		case "ruleCondition":
 14821  			if v != nil {
 14822  				ruleCondition, err := unmarshalBasicFirewallPolicyRuleCondition(*v)
 14823  				if err != nil {
 14824  					return err
 14825  				}
 14826  				fpnr.RuleCondition = ruleCondition
 14827  			}
 14828  		case "name":
 14829  			if v != nil {
 14830  				var name string
 14831  				err = json.Unmarshal(*v, &name)
 14832  				if err != nil {
 14833  					return err
 14834  				}
 14835  				fpnr.Name = &name
 14836  			}
 14837  		case "priority":
 14838  			if v != nil {
 14839  				var priority int32
 14840  				err = json.Unmarshal(*v, &priority)
 14841  				if err != nil {
 14842  					return err
 14843  				}
 14844  				fpnr.Priority = &priority
 14845  			}
 14846  		case "ruleType":
 14847  			if v != nil {
 14848  				var ruleType RuleType
 14849  				err = json.Unmarshal(*v, &ruleType)
 14850  				if err != nil {
 14851  					return err
 14852  				}
 14853  				fpnr.RuleType = ruleType
 14854  			}
 14855  		}
 14856  	}
 14857  
 14858  	return nil
 14859  }
 14860  
 14861  // FirewallPolicyNatRuleAction properties of the FirewallPolicyNatRuleAction.
 14862  type FirewallPolicyNatRuleAction struct {
 14863  	// Type - The type of action. Possible values include: 'DNAT'
 14864  	Type FirewallPolicyNatRuleActionType `json:"type,omitempty"`
 14865  }
 14866  
 14867  // FirewallPolicyPropertiesFormat firewall Policy definition.
 14868  type FirewallPolicyPropertiesFormat struct {
 14869  	// RuleGroups - READ-ONLY; List of references to FirewallPolicyRuleGroups.
 14870  	RuleGroups *[]SubResource `json:"ruleGroups,omitempty"`
 14871  	// ProvisioningState - READ-ONLY; The provisioning state of the firewall policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 14872  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 14873  	// BasePolicy - The parent firewall policy from which rules are inherited.
 14874  	BasePolicy *SubResource `json:"basePolicy,omitempty"`
 14875  	// Firewalls - READ-ONLY; List of references to Azure Firewalls that this Firewall Policy is associated with.
 14876  	Firewalls *[]SubResource `json:"firewalls,omitempty"`
 14877  	// ChildPolicies - READ-ONLY; List of references to Child Firewall Policies.
 14878  	ChildPolicies *[]SubResource `json:"childPolicies,omitempty"`
 14879  	// ThreatIntelMode - The operation mode for Threat Intelligence. Possible values include: 'AzureFirewallThreatIntelModeAlert', 'AzureFirewallThreatIntelModeDeny', 'AzureFirewallThreatIntelModeOff'
 14880  	ThreatIntelMode AzureFirewallThreatIntelMode `json:"threatIntelMode,omitempty"`
 14881  	// ThreatIntelWhitelist - ThreatIntel Whitelist for Firewall Policy.
 14882  	ThreatIntelWhitelist *FirewallPolicyThreatIntelWhitelist `json:"threatIntelWhitelist,omitempty"`
 14883  }
 14884  
 14885  // MarshalJSON is the custom marshaler for FirewallPolicyPropertiesFormat.
 14886  func (fppf FirewallPolicyPropertiesFormat) MarshalJSON() ([]byte, error) {
 14887  	objectMap := make(map[string]interface{})
 14888  	if fppf.BasePolicy != nil {
 14889  		objectMap["basePolicy"] = fppf.BasePolicy
 14890  	}
 14891  	if fppf.ThreatIntelMode != "" {
 14892  		objectMap["threatIntelMode"] = fppf.ThreatIntelMode
 14893  	}
 14894  	if fppf.ThreatIntelWhitelist != nil {
 14895  		objectMap["threatIntelWhitelist"] = fppf.ThreatIntelWhitelist
 14896  	}
 14897  	return json.Marshal(objectMap)
 14898  }
 14899  
 14900  // BasicFirewallPolicyRule properties of the rule.
 14901  type BasicFirewallPolicyRule interface {
 14902  	AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool)
 14903  	AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool)
 14904  	AsFirewallPolicyRule() (*FirewallPolicyRule, bool)
 14905  }
 14906  
 14907  // FirewallPolicyRule properties of the rule.
 14908  type FirewallPolicyRule struct {
 14909  	// Name - The name of the rule.
 14910  	Name *string `json:"name,omitempty"`
 14911  	// Priority - Priority of the Firewall Policy Rule resource.
 14912  	Priority *int32 `json:"priority,omitempty"`
 14913  	// RuleType - Possible values include: 'RuleTypeFirewallPolicyRule', 'RuleTypeFirewallPolicyNatRule', 'RuleTypeFirewallPolicyFilterRule'
 14914  	RuleType RuleType `json:"ruleType,omitempty"`
 14915  }
 14916  
 14917  func unmarshalBasicFirewallPolicyRule(body []byte) (BasicFirewallPolicyRule, error) {
 14918  	var m map[string]interface{}
 14919  	err := json.Unmarshal(body, &m)
 14920  	if err != nil {
 14921  		return nil, err
 14922  	}
 14923  
 14924  	switch m["ruleType"] {
 14925  	case string(RuleTypeFirewallPolicyNatRule):
 14926  		var fpnr FirewallPolicyNatRule
 14927  		err := json.Unmarshal(body, &fpnr)
 14928  		return fpnr, err
 14929  	case string(RuleTypeFirewallPolicyFilterRule):
 14930  		var fpfr FirewallPolicyFilterRule
 14931  		err := json.Unmarshal(body, &fpfr)
 14932  		return fpfr, err
 14933  	default:
 14934  		var fpr FirewallPolicyRule
 14935  		err := json.Unmarshal(body, &fpr)
 14936  		return fpr, err
 14937  	}
 14938  }
 14939  func unmarshalBasicFirewallPolicyRuleArray(body []byte) ([]BasicFirewallPolicyRule, error) {
 14940  	var rawMessages []*json.RawMessage
 14941  	err := json.Unmarshal(body, &rawMessages)
 14942  	if err != nil {
 14943  		return nil, err
 14944  	}
 14945  
 14946  	fprArray := make([]BasicFirewallPolicyRule, len(rawMessages))
 14947  
 14948  	for index, rawMessage := range rawMessages {
 14949  		fpr, err := unmarshalBasicFirewallPolicyRule(*rawMessage)
 14950  		if err != nil {
 14951  			return nil, err
 14952  		}
 14953  		fprArray[index] = fpr
 14954  	}
 14955  	return fprArray, nil
 14956  }
 14957  
 14958  // MarshalJSON is the custom marshaler for FirewallPolicyRule.
 14959  func (fpr FirewallPolicyRule) MarshalJSON() ([]byte, error) {
 14960  	fpr.RuleType = RuleTypeFirewallPolicyRule
 14961  	objectMap := make(map[string]interface{})
 14962  	if fpr.Name != nil {
 14963  		objectMap["name"] = fpr.Name
 14964  	}
 14965  	if fpr.Priority != nil {
 14966  		objectMap["priority"] = fpr.Priority
 14967  	}
 14968  	if fpr.RuleType != "" {
 14969  		objectMap["ruleType"] = fpr.RuleType
 14970  	}
 14971  	return json.Marshal(objectMap)
 14972  }
 14973  
 14974  // AsFirewallPolicyNatRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
 14975  func (fpr FirewallPolicyRule) AsFirewallPolicyNatRule() (*FirewallPolicyNatRule, bool) {
 14976  	return nil, false
 14977  }
 14978  
 14979  // AsFirewallPolicyFilterRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
 14980  func (fpr FirewallPolicyRule) AsFirewallPolicyFilterRule() (*FirewallPolicyFilterRule, bool) {
 14981  	return nil, false
 14982  }
 14983  
 14984  // AsFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
 14985  func (fpr FirewallPolicyRule) AsFirewallPolicyRule() (*FirewallPolicyRule, bool) {
 14986  	return &fpr, true
 14987  }
 14988  
 14989  // AsBasicFirewallPolicyRule is the BasicFirewallPolicyRule implementation for FirewallPolicyRule.
 14990  func (fpr FirewallPolicyRule) AsBasicFirewallPolicyRule() (BasicFirewallPolicyRule, bool) {
 14991  	return &fpr, true
 14992  }
 14993  
 14994  // BasicFirewallPolicyRuleCondition properties of a rule.
 14995  type BasicFirewallPolicyRuleCondition interface {
 14996  	AsApplicationRuleCondition() (*ApplicationRuleCondition, bool)
 14997  	AsNatRuleCondition() (*NatRuleCondition, bool)
 14998  	AsRuleCondition() (*RuleCondition, bool)
 14999  	AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool)
 15000  }
 15001  
 15002  // FirewallPolicyRuleCondition properties of a rule.
 15003  type FirewallPolicyRuleCondition struct {
 15004  	// Name - Name of the rule condition.
 15005  	Name *string `json:"name,omitempty"`
 15006  	// Description - Description of the rule condition.
 15007  	Description *string `json:"description,omitempty"`
 15008  	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNatRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
 15009  	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
 15010  }
 15011  
 15012  func unmarshalBasicFirewallPolicyRuleCondition(body []byte) (BasicFirewallPolicyRuleCondition, error) {
 15013  	var m map[string]interface{}
 15014  	err := json.Unmarshal(body, &m)
 15015  	if err != nil {
 15016  		return nil, err
 15017  	}
 15018  
 15019  	switch m["ruleConditionType"] {
 15020  	case string(RuleConditionTypeApplicationRuleCondition):
 15021  		var arc ApplicationRuleCondition
 15022  		err := json.Unmarshal(body, &arc)
 15023  		return arc, err
 15024  	case string(RuleConditionTypeNatRuleCondition):
 15025  		var nrc NatRuleCondition
 15026  		err := json.Unmarshal(body, &nrc)
 15027  		return nrc, err
 15028  	case string(RuleConditionTypeNetworkRuleCondition):
 15029  		var rc RuleCondition
 15030  		err := json.Unmarshal(body, &rc)
 15031  		return rc, err
 15032  	default:
 15033  		var fprc FirewallPolicyRuleCondition
 15034  		err := json.Unmarshal(body, &fprc)
 15035  		return fprc, err
 15036  	}
 15037  }
 15038  func unmarshalBasicFirewallPolicyRuleConditionArray(body []byte) ([]BasicFirewallPolicyRuleCondition, error) {
 15039  	var rawMessages []*json.RawMessage
 15040  	err := json.Unmarshal(body, &rawMessages)
 15041  	if err != nil {
 15042  		return nil, err
 15043  	}
 15044  
 15045  	fprcArray := make([]BasicFirewallPolicyRuleCondition, len(rawMessages))
 15046  
 15047  	for index, rawMessage := range rawMessages {
 15048  		fprc, err := unmarshalBasicFirewallPolicyRuleCondition(*rawMessage)
 15049  		if err != nil {
 15050  			return nil, err
 15051  		}
 15052  		fprcArray[index] = fprc
 15053  	}
 15054  	return fprcArray, nil
 15055  }
 15056  
 15057  // MarshalJSON is the custom marshaler for FirewallPolicyRuleCondition.
 15058  func (fprc FirewallPolicyRuleCondition) MarshalJSON() ([]byte, error) {
 15059  	fprc.RuleConditionType = RuleConditionTypeFirewallPolicyRuleCondition
 15060  	objectMap := make(map[string]interface{})
 15061  	if fprc.Name != nil {
 15062  		objectMap["name"] = fprc.Name
 15063  	}
 15064  	if fprc.Description != nil {
 15065  		objectMap["description"] = fprc.Description
 15066  	}
 15067  	if fprc.RuleConditionType != "" {
 15068  		objectMap["ruleConditionType"] = fprc.RuleConditionType
 15069  	}
 15070  	return json.Marshal(objectMap)
 15071  }
 15072  
 15073  // AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
 15074  func (fprc FirewallPolicyRuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
 15075  	return nil, false
 15076  }
 15077  
 15078  // AsNatRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
 15079  func (fprc FirewallPolicyRuleCondition) AsNatRuleCondition() (*NatRuleCondition, bool) {
 15080  	return nil, false
 15081  }
 15082  
 15083  // AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
 15084  func (fprc FirewallPolicyRuleCondition) AsRuleCondition() (*RuleCondition, bool) {
 15085  	return nil, false
 15086  }
 15087  
 15088  // AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
 15089  func (fprc FirewallPolicyRuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
 15090  	return &fprc, true
 15091  }
 15092  
 15093  // AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for FirewallPolicyRuleCondition.
 15094  func (fprc FirewallPolicyRuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
 15095  	return &fprc, true
 15096  }
 15097  
 15098  // FirewallPolicyRuleConditionApplicationProtocol properties of the application rule protocol.
 15099  type FirewallPolicyRuleConditionApplicationProtocol struct {
 15100  	// ProtocolType - Protocol type. Possible values include: 'FirewallPolicyRuleConditionApplicationProtocolTypeHTTP', 'FirewallPolicyRuleConditionApplicationProtocolTypeHTTPS'
 15101  	ProtocolType FirewallPolicyRuleConditionApplicationProtocolType `json:"protocolType,omitempty"`
 15102  	// Port - Port number for the protocol, cannot be greater than 64000.
 15103  	Port *int32 `json:"port,omitempty"`
 15104  }
 15105  
 15106  // FirewallPolicyRuleGroup rule Group resource.
 15107  type FirewallPolicyRuleGroup struct {
 15108  	autorest.Response `json:"-"`
 15109  	// FirewallPolicyRuleGroupProperties - The properties of the firewall policy rule group.
 15110  	*FirewallPolicyRuleGroupProperties `json:"properties,omitempty"`
 15111  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 15112  	Name *string `json:"name,omitempty"`
 15113  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 15114  	Etag *string `json:"etag,omitempty"`
 15115  	// Type - READ-ONLY; Rule Group type.
 15116  	Type *string `json:"type,omitempty"`
 15117  	// ID - Resource ID.
 15118  	ID *string `json:"id,omitempty"`
 15119  }
 15120  
 15121  // MarshalJSON is the custom marshaler for FirewallPolicyRuleGroup.
 15122  func (fprg FirewallPolicyRuleGroup) MarshalJSON() ([]byte, error) {
 15123  	objectMap := make(map[string]interface{})
 15124  	if fprg.FirewallPolicyRuleGroupProperties != nil {
 15125  		objectMap["properties"] = fprg.FirewallPolicyRuleGroupProperties
 15126  	}
 15127  	if fprg.Name != nil {
 15128  		objectMap["name"] = fprg.Name
 15129  	}
 15130  	if fprg.ID != nil {
 15131  		objectMap["id"] = fprg.ID
 15132  	}
 15133  	return json.Marshal(objectMap)
 15134  }
 15135  
 15136  // UnmarshalJSON is the custom unmarshaler for FirewallPolicyRuleGroup struct.
 15137  func (fprg *FirewallPolicyRuleGroup) UnmarshalJSON(body []byte) error {
 15138  	var m map[string]*json.RawMessage
 15139  	err := json.Unmarshal(body, &m)
 15140  	if err != nil {
 15141  		return err
 15142  	}
 15143  	for k, v := range m {
 15144  		switch k {
 15145  		case "properties":
 15146  			if v != nil {
 15147  				var firewallPolicyRuleGroupProperties FirewallPolicyRuleGroupProperties
 15148  				err = json.Unmarshal(*v, &firewallPolicyRuleGroupProperties)
 15149  				if err != nil {
 15150  					return err
 15151  				}
 15152  				fprg.FirewallPolicyRuleGroupProperties = &firewallPolicyRuleGroupProperties
 15153  			}
 15154  		case "name":
 15155  			if v != nil {
 15156  				var name string
 15157  				err = json.Unmarshal(*v, &name)
 15158  				if err != nil {
 15159  					return err
 15160  				}
 15161  				fprg.Name = &name
 15162  			}
 15163  		case "etag":
 15164  			if v != nil {
 15165  				var etag string
 15166  				err = json.Unmarshal(*v, &etag)
 15167  				if err != nil {
 15168  					return err
 15169  				}
 15170  				fprg.Etag = &etag
 15171  			}
 15172  		case "type":
 15173  			if v != nil {
 15174  				var typeVar string
 15175  				err = json.Unmarshal(*v, &typeVar)
 15176  				if err != nil {
 15177  					return err
 15178  				}
 15179  				fprg.Type = &typeVar
 15180  			}
 15181  		case "id":
 15182  			if v != nil {
 15183  				var ID string
 15184  				err = json.Unmarshal(*v, &ID)
 15185  				if err != nil {
 15186  					return err
 15187  				}
 15188  				fprg.ID = &ID
 15189  			}
 15190  		}
 15191  	}
 15192  
 15193  	return nil
 15194  }
 15195  
 15196  // FirewallPolicyRuleGroupListResult response for ListFirewallPolicyRuleGroups API service call.
 15197  type FirewallPolicyRuleGroupListResult struct {
 15198  	autorest.Response `json:"-"`
 15199  	// Value - List of FirewallPolicyRuleGroups in a FirewallPolicy.
 15200  	Value *[]FirewallPolicyRuleGroup `json:"value,omitempty"`
 15201  	// NextLink - URL to get the next set of results.
 15202  	NextLink *string `json:"nextLink,omitempty"`
 15203  }
 15204  
 15205  // FirewallPolicyRuleGroupListResultIterator provides access to a complete listing of
 15206  // FirewallPolicyRuleGroup values.
 15207  type FirewallPolicyRuleGroupListResultIterator struct {
 15208  	i    int
 15209  	page FirewallPolicyRuleGroupListResultPage
 15210  }
 15211  
 15212  // NextWithContext advances to the next value.  If there was an error making
 15213  // the request the iterator does not advance and the error is returned.
 15214  func (iter *FirewallPolicyRuleGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
 15215  	if tracing.IsEnabled() {
 15216  		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyRuleGroupListResultIterator.NextWithContext")
 15217  		defer func() {
 15218  			sc := -1
 15219  			if iter.Response().Response.Response != nil {
 15220  				sc = iter.Response().Response.Response.StatusCode
 15221  			}
 15222  			tracing.EndSpan(ctx, sc, err)
 15223  		}()
 15224  	}
 15225  	iter.i++
 15226  	if iter.i < len(iter.page.Values()) {
 15227  		return nil
 15228  	}
 15229  	err = iter.page.NextWithContext(ctx)
 15230  	if err != nil {
 15231  		iter.i--
 15232  		return err
 15233  	}
 15234  	iter.i = 0
 15235  	return nil
 15236  }
 15237  
 15238  // Next advances to the next value.  If there was an error making
 15239  // the request the iterator does not advance and the error is returned.
 15240  // Deprecated: Use NextWithContext() instead.
 15241  func (iter *FirewallPolicyRuleGroupListResultIterator) Next() error {
 15242  	return iter.NextWithContext(context.Background())
 15243  }
 15244  
 15245  // NotDone returns true if the enumeration should be started or is not yet complete.
 15246  func (iter FirewallPolicyRuleGroupListResultIterator) NotDone() bool {
 15247  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 15248  }
 15249  
 15250  // Response returns the raw server response from the last page request.
 15251  func (iter FirewallPolicyRuleGroupListResultIterator) Response() FirewallPolicyRuleGroupListResult {
 15252  	return iter.page.Response()
 15253  }
 15254  
 15255  // Value returns the current value or a zero-initialized value if the
 15256  // iterator has advanced beyond the end of the collection.
 15257  func (iter FirewallPolicyRuleGroupListResultIterator) Value() FirewallPolicyRuleGroup {
 15258  	if !iter.page.NotDone() {
 15259  		return FirewallPolicyRuleGroup{}
 15260  	}
 15261  	return iter.page.Values()[iter.i]
 15262  }
 15263  
 15264  // Creates a new instance of the FirewallPolicyRuleGroupListResultIterator type.
 15265  func NewFirewallPolicyRuleGroupListResultIterator(page FirewallPolicyRuleGroupListResultPage) FirewallPolicyRuleGroupListResultIterator {
 15266  	return FirewallPolicyRuleGroupListResultIterator{page: page}
 15267  }
 15268  
 15269  // IsEmpty returns true if the ListResult contains no values.
 15270  func (fprglr FirewallPolicyRuleGroupListResult) IsEmpty() bool {
 15271  	return fprglr.Value == nil || len(*fprglr.Value) == 0
 15272  }
 15273  
 15274  // hasNextLink returns true if the NextLink is not empty.
 15275  func (fprglr FirewallPolicyRuleGroupListResult) hasNextLink() bool {
 15276  	return fprglr.NextLink != nil && len(*fprglr.NextLink) != 0
 15277  }
 15278  
 15279  // firewallPolicyRuleGroupListResultPreparer prepares a request to retrieve the next set of results.
 15280  // It returns nil if no more results exist.
 15281  func (fprglr FirewallPolicyRuleGroupListResult) firewallPolicyRuleGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
 15282  	if !fprglr.hasNextLink() {
 15283  		return nil, nil
 15284  	}
 15285  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 15286  		autorest.AsJSON(),
 15287  		autorest.AsGet(),
 15288  		autorest.WithBaseURL(to.String(fprglr.NextLink)))
 15289  }
 15290  
 15291  // FirewallPolicyRuleGroupListResultPage contains a page of FirewallPolicyRuleGroup values.
 15292  type FirewallPolicyRuleGroupListResultPage struct {
 15293  	fn     func(context.Context, FirewallPolicyRuleGroupListResult) (FirewallPolicyRuleGroupListResult, error)
 15294  	fprglr FirewallPolicyRuleGroupListResult
 15295  }
 15296  
 15297  // NextWithContext advances to the next page of values.  If there was an error making
 15298  // the request the page does not advance and the error is returned.
 15299  func (page *FirewallPolicyRuleGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
 15300  	if tracing.IsEnabled() {
 15301  		ctx = tracing.StartSpan(ctx, fqdn+"/FirewallPolicyRuleGroupListResultPage.NextWithContext")
 15302  		defer func() {
 15303  			sc := -1
 15304  			if page.Response().Response.Response != nil {
 15305  				sc = page.Response().Response.Response.StatusCode
 15306  			}
 15307  			tracing.EndSpan(ctx, sc, err)
 15308  		}()
 15309  	}
 15310  	for {
 15311  		next, err := page.fn(ctx, page.fprglr)
 15312  		if err != nil {
 15313  			return err
 15314  		}
 15315  		page.fprglr = next
 15316  		if !next.hasNextLink() || !next.IsEmpty() {
 15317  			break
 15318  		}
 15319  	}
 15320  	return nil
 15321  }
 15322  
 15323  // Next advances to the next page of values.  If there was an error making
 15324  // the request the page does not advance and the error is returned.
 15325  // Deprecated: Use NextWithContext() instead.
 15326  func (page *FirewallPolicyRuleGroupListResultPage) Next() error {
 15327  	return page.NextWithContext(context.Background())
 15328  }
 15329  
 15330  // NotDone returns true if the page enumeration should be started or is not yet complete.
 15331  func (page FirewallPolicyRuleGroupListResultPage) NotDone() bool {
 15332  	return !page.fprglr.IsEmpty()
 15333  }
 15334  
 15335  // Response returns the raw server response from the last page request.
 15336  func (page FirewallPolicyRuleGroupListResultPage) Response() FirewallPolicyRuleGroupListResult {
 15337  	return page.fprglr
 15338  }
 15339  
 15340  // Values returns the slice of values for the current page or nil if there are no values.
 15341  func (page FirewallPolicyRuleGroupListResultPage) Values() []FirewallPolicyRuleGroup {
 15342  	if page.fprglr.IsEmpty() {
 15343  		return nil
 15344  	}
 15345  	return *page.fprglr.Value
 15346  }
 15347  
 15348  // Creates a new instance of the FirewallPolicyRuleGroupListResultPage type.
 15349  func NewFirewallPolicyRuleGroupListResultPage(cur FirewallPolicyRuleGroupListResult, getNextPage func(context.Context, FirewallPolicyRuleGroupListResult) (FirewallPolicyRuleGroupListResult, error)) FirewallPolicyRuleGroupListResultPage {
 15350  	return FirewallPolicyRuleGroupListResultPage{
 15351  		fn:     getNextPage,
 15352  		fprglr: cur,
 15353  	}
 15354  }
 15355  
 15356  // FirewallPolicyRuleGroupProperties properties of the rule group.
 15357  type FirewallPolicyRuleGroupProperties struct {
 15358  	// Priority - Priority of the Firewall Policy Rule Group resource.
 15359  	Priority *int32 `json:"priority,omitempty"`
 15360  	// Rules - Group of Firewall Policy rules.
 15361  	Rules *[]BasicFirewallPolicyRule `json:"rules,omitempty"`
 15362  	// ProvisioningState - READ-ONLY; The provisioning state of the firewall policy rule group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 15363  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 15364  }
 15365  
 15366  // MarshalJSON is the custom marshaler for FirewallPolicyRuleGroupProperties.
 15367  func (fprgp FirewallPolicyRuleGroupProperties) MarshalJSON() ([]byte, error) {
 15368  	objectMap := make(map[string]interface{})
 15369  	if fprgp.Priority != nil {
 15370  		objectMap["priority"] = fprgp.Priority
 15371  	}
 15372  	if fprgp.Rules != nil {
 15373  		objectMap["rules"] = fprgp.Rules
 15374  	}
 15375  	return json.Marshal(objectMap)
 15376  }
 15377  
 15378  // UnmarshalJSON is the custom unmarshaler for FirewallPolicyRuleGroupProperties struct.
 15379  func (fprgp *FirewallPolicyRuleGroupProperties) UnmarshalJSON(body []byte) error {
 15380  	var m map[string]*json.RawMessage
 15381  	err := json.Unmarshal(body, &m)
 15382  	if err != nil {
 15383  		return err
 15384  	}
 15385  	for k, v := range m {
 15386  		switch k {
 15387  		case "priority":
 15388  			if v != nil {
 15389  				var priority int32
 15390  				err = json.Unmarshal(*v, &priority)
 15391  				if err != nil {
 15392  					return err
 15393  				}
 15394  				fprgp.Priority = &priority
 15395  			}
 15396  		case "rules":
 15397  			if v != nil {
 15398  				rules, err := unmarshalBasicFirewallPolicyRuleArray(*v)
 15399  				if err != nil {
 15400  					return err
 15401  				}
 15402  				fprgp.Rules = &rules
 15403  			}
 15404  		case "provisioningState":
 15405  			if v != nil {
 15406  				var provisioningState ProvisioningState
 15407  				err = json.Unmarshal(*v, &provisioningState)
 15408  				if err != nil {
 15409  					return err
 15410  				}
 15411  				fprgp.ProvisioningState = provisioningState
 15412  			}
 15413  		}
 15414  	}
 15415  
 15416  	return nil
 15417  }
 15418  
 15419  // FirewallPolicyRuleGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
 15420  // a long-running operation.
 15421  type FirewallPolicyRuleGroupsCreateOrUpdateFuture struct {
 15422  	azure.FutureAPI
 15423  	// Result returns the result of the asynchronous operation.
 15424  	// If the operation has not completed it will return an error.
 15425  	Result func(FirewallPolicyRuleGroupsClient) (FirewallPolicyRuleGroup, error)
 15426  }
 15427  
 15428  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 15429  func (future *FirewallPolicyRuleGroupsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 15430  	var azFuture azure.Future
 15431  	if err := json.Unmarshal(body, &azFuture); err != nil {
 15432  		return err
 15433  	}
 15434  	future.FutureAPI = &azFuture
 15435  	future.Result = future.result
 15436  	return nil
 15437  }
 15438  
 15439  // result is the default implementation for FirewallPolicyRuleGroupsCreateOrUpdateFuture.Result.
 15440  func (future *FirewallPolicyRuleGroupsCreateOrUpdateFuture) result(client FirewallPolicyRuleGroupsClient) (fprg FirewallPolicyRuleGroup, err error) {
 15441  	var done bool
 15442  	done, err = future.DoneWithContext(context.Background(), client)
 15443  	if err != nil {
 15444  		err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 15445  		return
 15446  	}
 15447  	if !done {
 15448  		fprg.Response.Response = future.Response()
 15449  		err = azure.NewAsyncOpIncompleteError("network.FirewallPolicyRuleGroupsCreateOrUpdateFuture")
 15450  		return
 15451  	}
 15452  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 15453  	if fprg.Response.Response, err = future.GetResult(sender); err == nil && fprg.Response.Response.StatusCode != http.StatusNoContent {
 15454  		fprg, err = client.CreateOrUpdateResponder(fprg.Response.Response)
 15455  		if err != nil {
 15456  			err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsCreateOrUpdateFuture", "Result", fprg.Response.Response, "Failure responding to request")
 15457  		}
 15458  	}
 15459  	return
 15460  }
 15461  
 15462  // FirewallPolicyRuleGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
 15463  // long-running operation.
 15464  type FirewallPolicyRuleGroupsDeleteFuture struct {
 15465  	azure.FutureAPI
 15466  	// Result returns the result of the asynchronous operation.
 15467  	// If the operation has not completed it will return an error.
 15468  	Result func(FirewallPolicyRuleGroupsClient) (autorest.Response, error)
 15469  }
 15470  
 15471  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 15472  func (future *FirewallPolicyRuleGroupsDeleteFuture) UnmarshalJSON(body []byte) error {
 15473  	var azFuture azure.Future
 15474  	if err := json.Unmarshal(body, &azFuture); err != nil {
 15475  		return err
 15476  	}
 15477  	future.FutureAPI = &azFuture
 15478  	future.Result = future.result
 15479  	return nil
 15480  }
 15481  
 15482  // result is the default implementation for FirewallPolicyRuleGroupsDeleteFuture.Result.
 15483  func (future *FirewallPolicyRuleGroupsDeleteFuture) result(client FirewallPolicyRuleGroupsClient) (ar autorest.Response, err error) {
 15484  	var done bool
 15485  	done, err = future.DoneWithContext(context.Background(), client)
 15486  	if err != nil {
 15487  		err = autorest.NewErrorWithError(err, "network.FirewallPolicyRuleGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
 15488  		return
 15489  	}
 15490  	if !done {
 15491  		ar.Response = future.Response()
 15492  		err = azure.NewAsyncOpIncompleteError("network.FirewallPolicyRuleGroupsDeleteFuture")
 15493  		return
 15494  	}
 15495  	ar.Response = future.Response()
 15496  	return
 15497  }
 15498  
 15499  // FirewallPolicyThreatIntelWhitelist threatIntel Whitelist for Firewall Policy.
 15500  type FirewallPolicyThreatIntelWhitelist struct {
 15501  	// IPAddresses - List of IP addresses for the ThreatIntel Whitelist.
 15502  	IPAddresses *[]string `json:"ipAddresses,omitempty"`
 15503  	// Fqdns - List of FQDNs for the ThreatIntel Whitelist.
 15504  	Fqdns *[]string `json:"fqdns,omitempty"`
 15505  }
 15506  
 15507  // FlowLog a flow log resource.
 15508  type FlowLog struct {
 15509  	autorest.Response `json:"-"`
 15510  	// FlowLogPropertiesFormat - Properties of the flow log.
 15511  	*FlowLogPropertiesFormat `json:"properties,omitempty"`
 15512  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 15513  	Etag *string `json:"etag,omitempty"`
 15514  	// ID - Resource ID.
 15515  	ID *string `json:"id,omitempty"`
 15516  	// Name - READ-ONLY; Resource name.
 15517  	Name *string `json:"name,omitempty"`
 15518  	// Type - READ-ONLY; Resource type.
 15519  	Type *string `json:"type,omitempty"`
 15520  	// Location - Resource location.
 15521  	Location *string `json:"location,omitempty"`
 15522  	// Tags - Resource tags.
 15523  	Tags map[string]*string `json:"tags"`
 15524  }
 15525  
 15526  // MarshalJSON is the custom marshaler for FlowLog.
 15527  func (fl FlowLog) MarshalJSON() ([]byte, error) {
 15528  	objectMap := make(map[string]interface{})
 15529  	if fl.FlowLogPropertiesFormat != nil {
 15530  		objectMap["properties"] = fl.FlowLogPropertiesFormat
 15531  	}
 15532  	if fl.ID != nil {
 15533  		objectMap["id"] = fl.ID
 15534  	}
 15535  	if fl.Location != nil {
 15536  		objectMap["location"] = fl.Location
 15537  	}
 15538  	if fl.Tags != nil {
 15539  		objectMap["tags"] = fl.Tags
 15540  	}
 15541  	return json.Marshal(objectMap)
 15542  }
 15543  
 15544  // UnmarshalJSON is the custom unmarshaler for FlowLog struct.
 15545  func (fl *FlowLog) UnmarshalJSON(body []byte) error {
 15546  	var m map[string]*json.RawMessage
 15547  	err := json.Unmarshal(body, &m)
 15548  	if err != nil {
 15549  		return err
 15550  	}
 15551  	for k, v := range m {
 15552  		switch k {
 15553  		case "properties":
 15554  			if v != nil {
 15555  				var flowLogPropertiesFormat FlowLogPropertiesFormat
 15556  				err = json.Unmarshal(*v, &flowLogPropertiesFormat)
 15557  				if err != nil {
 15558  					return err
 15559  				}
 15560  				fl.FlowLogPropertiesFormat = &flowLogPropertiesFormat
 15561  			}
 15562  		case "etag":
 15563  			if v != nil {
 15564  				var etag string
 15565  				err = json.Unmarshal(*v, &etag)
 15566  				if err != nil {
 15567  					return err
 15568  				}
 15569  				fl.Etag = &etag
 15570  			}
 15571  		case "id":
 15572  			if v != nil {
 15573  				var ID string
 15574  				err = json.Unmarshal(*v, &ID)
 15575  				if err != nil {
 15576  					return err
 15577  				}
 15578  				fl.ID = &ID
 15579  			}
 15580  		case "name":
 15581  			if v != nil {
 15582  				var name string
 15583  				err = json.Unmarshal(*v, &name)
 15584  				if err != nil {
 15585  					return err
 15586  				}
 15587  				fl.Name = &name
 15588  			}
 15589  		case "type":
 15590  			if v != nil {
 15591  				var typeVar string
 15592  				err = json.Unmarshal(*v, &typeVar)
 15593  				if err != nil {
 15594  					return err
 15595  				}
 15596  				fl.Type = &typeVar
 15597  			}
 15598  		case "location":
 15599  			if v != nil {
 15600  				var location string
 15601  				err = json.Unmarshal(*v, &location)
 15602  				if err != nil {
 15603  					return err
 15604  				}
 15605  				fl.Location = &location
 15606  			}
 15607  		case "tags":
 15608  			if v != nil {
 15609  				var tags map[string]*string
 15610  				err = json.Unmarshal(*v, &tags)
 15611  				if err != nil {
 15612  					return err
 15613  				}
 15614  				fl.Tags = tags
 15615  			}
 15616  		}
 15617  	}
 15618  
 15619  	return nil
 15620  }
 15621  
 15622  // FlowLogFormatParameters parameters that define the flow log format.
 15623  type FlowLogFormatParameters struct {
 15624  	// Type - The file type of flow log. Possible values include: 'JSON'
 15625  	Type FlowLogFormatType `json:"type,omitempty"`
 15626  	// Version - The version (revision) of the flow log.
 15627  	Version *int32 `json:"version,omitempty"`
 15628  }
 15629  
 15630  // FlowLogInformation information on the configuration of flow log and traffic analytics (optional) .
 15631  type FlowLogInformation struct {
 15632  	autorest.Response `json:"-"`
 15633  	// TargetResourceID - The ID of the resource to configure for flow log and traffic analytics (optional) .
 15634  	TargetResourceID *string `json:"targetResourceId,omitempty"`
 15635  	// FlowLogProperties - Properties of the flow log.
 15636  	*FlowLogProperties `json:"properties,omitempty"`
 15637  	// FlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
 15638  	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
 15639  }
 15640  
 15641  // MarshalJSON is the custom marshaler for FlowLogInformation.
 15642  func (fli FlowLogInformation) MarshalJSON() ([]byte, error) {
 15643  	objectMap := make(map[string]interface{})
 15644  	if fli.TargetResourceID != nil {
 15645  		objectMap["targetResourceId"] = fli.TargetResourceID
 15646  	}
 15647  	if fli.FlowLogProperties != nil {
 15648  		objectMap["properties"] = fli.FlowLogProperties
 15649  	}
 15650  	if fli.FlowAnalyticsConfiguration != nil {
 15651  		objectMap["flowAnalyticsConfiguration"] = fli.FlowAnalyticsConfiguration
 15652  	}
 15653  	return json.Marshal(objectMap)
 15654  }
 15655  
 15656  // UnmarshalJSON is the custom unmarshaler for FlowLogInformation struct.
 15657  func (fli *FlowLogInformation) UnmarshalJSON(body []byte) error {
 15658  	var m map[string]*json.RawMessage
 15659  	err := json.Unmarshal(body, &m)
 15660  	if err != nil {
 15661  		return err
 15662  	}
 15663  	for k, v := range m {
 15664  		switch k {
 15665  		case "targetResourceId":
 15666  			if v != nil {
 15667  				var targetResourceID string
 15668  				err = json.Unmarshal(*v, &targetResourceID)
 15669  				if err != nil {
 15670  					return err
 15671  				}
 15672  				fli.TargetResourceID = &targetResourceID
 15673  			}
 15674  		case "properties":
 15675  			if v != nil {
 15676  				var flowLogProperties FlowLogProperties
 15677  				err = json.Unmarshal(*v, &flowLogProperties)
 15678  				if err != nil {
 15679  					return err
 15680  				}
 15681  				fli.FlowLogProperties = &flowLogProperties
 15682  			}
 15683  		case "flowAnalyticsConfiguration":
 15684  			if v != nil {
 15685  				var flowAnalyticsConfiguration TrafficAnalyticsProperties
 15686  				err = json.Unmarshal(*v, &flowAnalyticsConfiguration)
 15687  				if err != nil {
 15688  					return err
 15689  				}
 15690  				fli.FlowAnalyticsConfiguration = &flowAnalyticsConfiguration
 15691  			}
 15692  		}
 15693  	}
 15694  
 15695  	return nil
 15696  }
 15697  
 15698  // FlowLogListResult list of flow logs.
 15699  type FlowLogListResult struct {
 15700  	autorest.Response `json:"-"`
 15701  	// Value - Information about flow log resource.
 15702  	Value *[]FlowLog `json:"value,omitempty"`
 15703  	// NextLink - READ-ONLY; The URL to get the next set of results.
 15704  	NextLink *string `json:"nextLink,omitempty"`
 15705  }
 15706  
 15707  // MarshalJSON is the custom marshaler for FlowLogListResult.
 15708  func (fllr FlowLogListResult) MarshalJSON() ([]byte, error) {
 15709  	objectMap := make(map[string]interface{})
 15710  	if fllr.Value != nil {
 15711  		objectMap["value"] = fllr.Value
 15712  	}
 15713  	return json.Marshal(objectMap)
 15714  }
 15715  
 15716  // FlowLogListResultIterator provides access to a complete listing of FlowLog values.
 15717  type FlowLogListResultIterator struct {
 15718  	i    int
 15719  	page FlowLogListResultPage
 15720  }
 15721  
 15722  // NextWithContext advances to the next value.  If there was an error making
 15723  // the request the iterator does not advance and the error is returned.
 15724  func (iter *FlowLogListResultIterator) NextWithContext(ctx context.Context) (err error) {
 15725  	if tracing.IsEnabled() {
 15726  		ctx = tracing.StartSpan(ctx, fqdn+"/FlowLogListResultIterator.NextWithContext")
 15727  		defer func() {
 15728  			sc := -1
 15729  			if iter.Response().Response.Response != nil {
 15730  				sc = iter.Response().Response.Response.StatusCode
 15731  			}
 15732  			tracing.EndSpan(ctx, sc, err)
 15733  		}()
 15734  	}
 15735  	iter.i++
 15736  	if iter.i < len(iter.page.Values()) {
 15737  		return nil
 15738  	}
 15739  	err = iter.page.NextWithContext(ctx)
 15740  	if err != nil {
 15741  		iter.i--
 15742  		return err
 15743  	}
 15744  	iter.i = 0
 15745  	return nil
 15746  }
 15747  
 15748  // Next advances to the next value.  If there was an error making
 15749  // the request the iterator does not advance and the error is returned.
 15750  // Deprecated: Use NextWithContext() instead.
 15751  func (iter *FlowLogListResultIterator) Next() error {
 15752  	return iter.NextWithContext(context.Background())
 15753  }
 15754  
 15755  // NotDone returns true if the enumeration should be started or is not yet complete.
 15756  func (iter FlowLogListResultIterator) NotDone() bool {
 15757  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 15758  }
 15759  
 15760  // Response returns the raw server response from the last page request.
 15761  func (iter FlowLogListResultIterator) Response() FlowLogListResult {
 15762  	return iter.page.Response()
 15763  }
 15764  
 15765  // Value returns the current value or a zero-initialized value if the
 15766  // iterator has advanced beyond the end of the collection.
 15767  func (iter FlowLogListResultIterator) Value() FlowLog {
 15768  	if !iter.page.NotDone() {
 15769  		return FlowLog{}
 15770  	}
 15771  	return iter.page.Values()[iter.i]
 15772  }
 15773  
 15774  // Creates a new instance of the FlowLogListResultIterator type.
 15775  func NewFlowLogListResultIterator(page FlowLogListResultPage) FlowLogListResultIterator {
 15776  	return FlowLogListResultIterator{page: page}
 15777  }
 15778  
 15779  // IsEmpty returns true if the ListResult contains no values.
 15780  func (fllr FlowLogListResult) IsEmpty() bool {
 15781  	return fllr.Value == nil || len(*fllr.Value) == 0
 15782  }
 15783  
 15784  // hasNextLink returns true if the NextLink is not empty.
 15785  func (fllr FlowLogListResult) hasNextLink() bool {
 15786  	return fllr.NextLink != nil && len(*fllr.NextLink) != 0
 15787  }
 15788  
 15789  // flowLogListResultPreparer prepares a request to retrieve the next set of results.
 15790  // It returns nil if no more results exist.
 15791  func (fllr FlowLogListResult) flowLogListResultPreparer(ctx context.Context) (*http.Request, error) {
 15792  	if !fllr.hasNextLink() {
 15793  		return nil, nil
 15794  	}
 15795  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 15796  		autorest.AsJSON(),
 15797  		autorest.AsGet(),
 15798  		autorest.WithBaseURL(to.String(fllr.NextLink)))
 15799  }
 15800  
 15801  // FlowLogListResultPage contains a page of FlowLog values.
 15802  type FlowLogListResultPage struct {
 15803  	fn   func(context.Context, FlowLogListResult) (FlowLogListResult, error)
 15804  	fllr FlowLogListResult
 15805  }
 15806  
 15807  // NextWithContext advances to the next page of values.  If there was an error making
 15808  // the request the page does not advance and the error is returned.
 15809  func (page *FlowLogListResultPage) NextWithContext(ctx context.Context) (err error) {
 15810  	if tracing.IsEnabled() {
 15811  		ctx = tracing.StartSpan(ctx, fqdn+"/FlowLogListResultPage.NextWithContext")
 15812  		defer func() {
 15813  			sc := -1
 15814  			if page.Response().Response.Response != nil {
 15815  				sc = page.Response().Response.Response.StatusCode
 15816  			}
 15817  			tracing.EndSpan(ctx, sc, err)
 15818  		}()
 15819  	}
 15820  	for {
 15821  		next, err := page.fn(ctx, page.fllr)
 15822  		if err != nil {
 15823  			return err
 15824  		}
 15825  		page.fllr = next
 15826  		if !next.hasNextLink() || !next.IsEmpty() {
 15827  			break
 15828  		}
 15829  	}
 15830  	return nil
 15831  }
 15832  
 15833  // Next advances to the next page of values.  If there was an error making
 15834  // the request the page does not advance and the error is returned.
 15835  // Deprecated: Use NextWithContext() instead.
 15836  func (page *FlowLogListResultPage) Next() error {
 15837  	return page.NextWithContext(context.Background())
 15838  }
 15839  
 15840  // NotDone returns true if the page enumeration should be started or is not yet complete.
 15841  func (page FlowLogListResultPage) NotDone() bool {
 15842  	return !page.fllr.IsEmpty()
 15843  }
 15844  
 15845  // Response returns the raw server response from the last page request.
 15846  func (page FlowLogListResultPage) Response() FlowLogListResult {
 15847  	return page.fllr
 15848  }
 15849  
 15850  // Values returns the slice of values for the current page or nil if there are no values.
 15851  func (page FlowLogListResultPage) Values() []FlowLog {
 15852  	if page.fllr.IsEmpty() {
 15853  		return nil
 15854  	}
 15855  	return *page.fllr.Value
 15856  }
 15857  
 15858  // Creates a new instance of the FlowLogListResultPage type.
 15859  func NewFlowLogListResultPage(cur FlowLogListResult, getNextPage func(context.Context, FlowLogListResult) (FlowLogListResult, error)) FlowLogListResultPage {
 15860  	return FlowLogListResultPage{
 15861  		fn:   getNextPage,
 15862  		fllr: cur,
 15863  	}
 15864  }
 15865  
 15866  // FlowLogProperties parameters that define the configuration of flow log.
 15867  type FlowLogProperties struct {
 15868  	// StorageID - ID of the storage account which is used to store the flow log.
 15869  	StorageID *string `json:"storageId,omitempty"`
 15870  	// Enabled - Flag to enable/disable flow logging.
 15871  	Enabled *bool `json:"enabled,omitempty"`
 15872  	// RetentionPolicy - Parameters that define the retention policy for flow log.
 15873  	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
 15874  	// Format - Parameters that define the flow log format.
 15875  	Format *FlowLogFormatParameters `json:"format,omitempty"`
 15876  }
 15877  
 15878  // FlowLogPropertiesFormat parameters that define the configuration of flow log.
 15879  type FlowLogPropertiesFormat struct {
 15880  	// TargetResourceID - ID of network security group to which flow log will be applied.
 15881  	TargetResourceID *string `json:"targetResourceId,omitempty"`
 15882  	// TargetResourceGUID - READ-ONLY; Guid of network security group to which flow log will be applied.
 15883  	TargetResourceGUID *string `json:"targetResourceGuid,omitempty"`
 15884  	// StorageID - ID of the storage account which is used to store the flow log.
 15885  	StorageID *string `json:"storageId,omitempty"`
 15886  	// Enabled - Flag to enable/disable flow logging.
 15887  	Enabled *bool `json:"enabled,omitempty"`
 15888  	// RetentionPolicy - Parameters that define the retention policy for flow log.
 15889  	RetentionPolicy *RetentionPolicyParameters `json:"retentionPolicy,omitempty"`
 15890  	// Format - Parameters that define the flow log format.
 15891  	Format *FlowLogFormatParameters `json:"format,omitempty"`
 15892  	// FlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
 15893  	FlowAnalyticsConfiguration *TrafficAnalyticsProperties `json:"flowAnalyticsConfiguration,omitempty"`
 15894  	// ProvisioningState - READ-ONLY; The provisioning state of the flow log. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 15895  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 15896  }
 15897  
 15898  // MarshalJSON is the custom marshaler for FlowLogPropertiesFormat.
 15899  func (flpf FlowLogPropertiesFormat) MarshalJSON() ([]byte, error) {
 15900  	objectMap := make(map[string]interface{})
 15901  	if flpf.TargetResourceID != nil {
 15902  		objectMap["targetResourceId"] = flpf.TargetResourceID
 15903  	}
 15904  	if flpf.StorageID != nil {
 15905  		objectMap["storageId"] = flpf.StorageID
 15906  	}
 15907  	if flpf.Enabled != nil {
 15908  		objectMap["enabled"] = flpf.Enabled
 15909  	}
 15910  	if flpf.RetentionPolicy != nil {
 15911  		objectMap["retentionPolicy"] = flpf.RetentionPolicy
 15912  	}
 15913  	if flpf.Format != nil {
 15914  		objectMap["format"] = flpf.Format
 15915  	}
 15916  	if flpf.FlowAnalyticsConfiguration != nil {
 15917  		objectMap["flowAnalyticsConfiguration"] = flpf.FlowAnalyticsConfiguration
 15918  	}
 15919  	return json.Marshal(objectMap)
 15920  }
 15921  
 15922  // FlowLogsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
 15923  // operation.
 15924  type FlowLogsCreateOrUpdateFuture struct {
 15925  	azure.FutureAPI
 15926  	// Result returns the result of the asynchronous operation.
 15927  	// If the operation has not completed it will return an error.
 15928  	Result func(FlowLogsClient) (FlowLog, error)
 15929  }
 15930  
 15931  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 15932  func (future *FlowLogsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 15933  	var azFuture azure.Future
 15934  	if err := json.Unmarshal(body, &azFuture); err != nil {
 15935  		return err
 15936  	}
 15937  	future.FutureAPI = &azFuture
 15938  	future.Result = future.result
 15939  	return nil
 15940  }
 15941  
 15942  // result is the default implementation for FlowLogsCreateOrUpdateFuture.Result.
 15943  func (future *FlowLogsCreateOrUpdateFuture) result(client FlowLogsClient) (fl FlowLog, err error) {
 15944  	var done bool
 15945  	done, err = future.DoneWithContext(context.Background(), client)
 15946  	if err != nil {
 15947  		err = autorest.NewErrorWithError(err, "network.FlowLogsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 15948  		return
 15949  	}
 15950  	if !done {
 15951  		fl.Response.Response = future.Response()
 15952  		err = azure.NewAsyncOpIncompleteError("network.FlowLogsCreateOrUpdateFuture")
 15953  		return
 15954  	}
 15955  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 15956  	if fl.Response.Response, err = future.GetResult(sender); err == nil && fl.Response.Response.StatusCode != http.StatusNoContent {
 15957  		fl, err = client.CreateOrUpdateResponder(fl.Response.Response)
 15958  		if err != nil {
 15959  			err = autorest.NewErrorWithError(err, "network.FlowLogsCreateOrUpdateFuture", "Result", fl.Response.Response, "Failure responding to request")
 15960  		}
 15961  	}
 15962  	return
 15963  }
 15964  
 15965  // FlowLogsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 15966  // operation.
 15967  type FlowLogsDeleteFuture struct {
 15968  	azure.FutureAPI
 15969  	// Result returns the result of the asynchronous operation.
 15970  	// If the operation has not completed it will return an error.
 15971  	Result func(FlowLogsClient) (autorest.Response, error)
 15972  }
 15973  
 15974  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 15975  func (future *FlowLogsDeleteFuture) UnmarshalJSON(body []byte) error {
 15976  	var azFuture azure.Future
 15977  	if err := json.Unmarshal(body, &azFuture); err != nil {
 15978  		return err
 15979  	}
 15980  	future.FutureAPI = &azFuture
 15981  	future.Result = future.result
 15982  	return nil
 15983  }
 15984  
 15985  // result is the default implementation for FlowLogsDeleteFuture.Result.
 15986  func (future *FlowLogsDeleteFuture) result(client FlowLogsClient) (ar autorest.Response, err error) {
 15987  	var done bool
 15988  	done, err = future.DoneWithContext(context.Background(), client)
 15989  	if err != nil {
 15990  		err = autorest.NewErrorWithError(err, "network.FlowLogsDeleteFuture", "Result", future.Response(), "Polling failure")
 15991  		return
 15992  	}
 15993  	if !done {
 15994  		ar.Response = future.Response()
 15995  		err = azure.NewAsyncOpIncompleteError("network.FlowLogsDeleteFuture")
 15996  		return
 15997  	}
 15998  	ar.Response = future.Response()
 15999  	return
 16000  }
 16001  
 16002  // FlowLogStatusParameters parameters that define a resource to query flow log and traffic analytics
 16003  // (optional) status.
 16004  type FlowLogStatusParameters struct {
 16005  	// TargetResourceID - The target resource where getting the flow log and traffic analytics (optional) status.
 16006  	TargetResourceID *string `json:"targetResourceId,omitempty"`
 16007  }
 16008  
 16009  // FrontendIPConfiguration frontend IP address of the load balancer.
 16010  type FrontendIPConfiguration struct {
 16011  	autorest.Response `json:"-"`
 16012  	// FrontendIPConfigurationPropertiesFormat - Properties of the load balancer probe.
 16013  	*FrontendIPConfigurationPropertiesFormat `json:"properties,omitempty"`
 16014  	// Name - The name of the resource that is unique within the set of frontend IP configurations used by the load balancer. This name can be used to access the resource.
 16015  	Name *string `json:"name,omitempty"`
 16016  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 16017  	Etag *string `json:"etag,omitempty"`
 16018  	// Type - READ-ONLY; Type of the resource.
 16019  	Type *string `json:"type,omitempty"`
 16020  	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
 16021  	Zones *[]string `json:"zones,omitempty"`
 16022  	// ID - Resource ID.
 16023  	ID *string `json:"id,omitempty"`
 16024  }
 16025  
 16026  // MarshalJSON is the custom marshaler for FrontendIPConfiguration.
 16027  func (fic FrontendIPConfiguration) MarshalJSON() ([]byte, error) {
 16028  	objectMap := make(map[string]interface{})
 16029  	if fic.FrontendIPConfigurationPropertiesFormat != nil {
 16030  		objectMap["properties"] = fic.FrontendIPConfigurationPropertiesFormat
 16031  	}
 16032  	if fic.Name != nil {
 16033  		objectMap["name"] = fic.Name
 16034  	}
 16035  	if fic.Zones != nil {
 16036  		objectMap["zones"] = fic.Zones
 16037  	}
 16038  	if fic.ID != nil {
 16039  		objectMap["id"] = fic.ID
 16040  	}
 16041  	return json.Marshal(objectMap)
 16042  }
 16043  
 16044  // UnmarshalJSON is the custom unmarshaler for FrontendIPConfiguration struct.
 16045  func (fic *FrontendIPConfiguration) UnmarshalJSON(body []byte) error {
 16046  	var m map[string]*json.RawMessage
 16047  	err := json.Unmarshal(body, &m)
 16048  	if err != nil {
 16049  		return err
 16050  	}
 16051  	for k, v := range m {
 16052  		switch k {
 16053  		case "properties":
 16054  			if v != nil {
 16055  				var frontendIPConfigurationPropertiesFormat FrontendIPConfigurationPropertiesFormat
 16056  				err = json.Unmarshal(*v, &frontendIPConfigurationPropertiesFormat)
 16057  				if err != nil {
 16058  					return err
 16059  				}
 16060  				fic.FrontendIPConfigurationPropertiesFormat = &frontendIPConfigurationPropertiesFormat
 16061  			}
 16062  		case "name":
 16063  			if v != nil {
 16064  				var name string
 16065  				err = json.Unmarshal(*v, &name)
 16066  				if err != nil {
 16067  					return err
 16068  				}
 16069  				fic.Name = &name
 16070  			}
 16071  		case "etag":
 16072  			if v != nil {
 16073  				var etag string
 16074  				err = json.Unmarshal(*v, &etag)
 16075  				if err != nil {
 16076  					return err
 16077  				}
 16078  				fic.Etag = &etag
 16079  			}
 16080  		case "type":
 16081  			if v != nil {
 16082  				var typeVar string
 16083  				err = json.Unmarshal(*v, &typeVar)
 16084  				if err != nil {
 16085  					return err
 16086  				}
 16087  				fic.Type = &typeVar
 16088  			}
 16089  		case "zones":
 16090  			if v != nil {
 16091  				var zones []string
 16092  				err = json.Unmarshal(*v, &zones)
 16093  				if err != nil {
 16094  					return err
 16095  				}
 16096  				fic.Zones = &zones
 16097  			}
 16098  		case "id":
 16099  			if v != nil {
 16100  				var ID string
 16101  				err = json.Unmarshal(*v, &ID)
 16102  				if err != nil {
 16103  					return err
 16104  				}
 16105  				fic.ID = &ID
 16106  			}
 16107  		}
 16108  	}
 16109  
 16110  	return nil
 16111  }
 16112  
 16113  // FrontendIPConfigurationPropertiesFormat properties of Frontend IP Configuration of the load balancer.
 16114  type FrontendIPConfigurationPropertiesFormat struct {
 16115  	// InboundNatRules - READ-ONLY; An array of references to inbound rules that use this frontend IP.
 16116  	InboundNatRules *[]SubResource `json:"inboundNatRules,omitempty"`
 16117  	// InboundNatPools - READ-ONLY; An array of references to inbound pools that use this frontend IP.
 16118  	InboundNatPools *[]SubResource `json:"inboundNatPools,omitempty"`
 16119  	// OutboundRules - READ-ONLY; An array of references to outbound rules that use this frontend IP.
 16120  	OutboundRules *[]SubResource `json:"outboundRules,omitempty"`
 16121  	// LoadBalancingRules - READ-ONLY; An array of references to load balancing rules that use this frontend IP.
 16122  	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
 16123  	// PrivateIPAddress - The private IP address of the IP configuration.
 16124  	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
 16125  	// PrivateIPAllocationMethod - The Private IP allocation method. Possible values include: 'Static', 'Dynamic'
 16126  	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
 16127  	// PrivateIPAddressVersion - Whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values include: 'IPv4', 'IPv6'
 16128  	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
 16129  	// Subnet - The reference to the subnet resource.
 16130  	Subnet *Subnet `json:"subnet,omitempty"`
 16131  	// PublicIPAddress - The reference to the Public IP resource.
 16132  	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
 16133  	// PublicIPPrefix - The reference to the Public IP Prefix resource.
 16134  	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
 16135  	// ProvisioningState - READ-ONLY; The provisioning state of the frontend IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 16136  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 16137  }
 16138  
 16139  // MarshalJSON is the custom marshaler for FrontendIPConfigurationPropertiesFormat.
 16140  func (ficpf FrontendIPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
 16141  	objectMap := make(map[string]interface{})
 16142  	if ficpf.PrivateIPAddress != nil {
 16143  		objectMap["privateIPAddress"] = ficpf.PrivateIPAddress
 16144  	}
 16145  	if ficpf.PrivateIPAllocationMethod != "" {
 16146  		objectMap["privateIPAllocationMethod"] = ficpf.PrivateIPAllocationMethod
 16147  	}
 16148  	if ficpf.PrivateIPAddressVersion != "" {
 16149  		objectMap["privateIPAddressVersion"] = ficpf.PrivateIPAddressVersion
 16150  	}
 16151  	if ficpf.Subnet != nil {
 16152  		objectMap["subnet"] = ficpf.Subnet
 16153  	}
 16154  	if ficpf.PublicIPAddress != nil {
 16155  		objectMap["publicIPAddress"] = ficpf.PublicIPAddress
 16156  	}
 16157  	if ficpf.PublicIPPrefix != nil {
 16158  		objectMap["publicIPPrefix"] = ficpf.PublicIPPrefix
 16159  	}
 16160  	return json.Marshal(objectMap)
 16161  }
 16162  
 16163  // GatewayRoute gateway routing details.
 16164  type GatewayRoute struct {
 16165  	// LocalAddress - READ-ONLY; The gateway's local address.
 16166  	LocalAddress *string `json:"localAddress,omitempty"`
 16167  	// NetworkProperty - READ-ONLY; The route's network prefix.
 16168  	NetworkProperty *string `json:"network,omitempty"`
 16169  	// NextHop - READ-ONLY; The route's next hop.
 16170  	NextHop *string `json:"nextHop,omitempty"`
 16171  	// SourcePeer - READ-ONLY; The peer this route was learned from.
 16172  	SourcePeer *string `json:"sourcePeer,omitempty"`
 16173  	// Origin - READ-ONLY; The source this route was learned from.
 16174  	Origin *string `json:"origin,omitempty"`
 16175  	// AsPath - READ-ONLY; The route's AS path sequence.
 16176  	AsPath *string `json:"asPath,omitempty"`
 16177  	// Weight - READ-ONLY; The route's weight.
 16178  	Weight *int32 `json:"weight,omitempty"`
 16179  }
 16180  
 16181  // MarshalJSON is the custom marshaler for GatewayRoute.
 16182  func (gr GatewayRoute) MarshalJSON() ([]byte, error) {
 16183  	objectMap := make(map[string]interface{})
 16184  	return json.Marshal(objectMap)
 16185  }
 16186  
 16187  // GatewayRouteListResult list of virtual network gateway routes.
 16188  type GatewayRouteListResult struct {
 16189  	autorest.Response `json:"-"`
 16190  	// Value - List of gateway routes.
 16191  	Value *[]GatewayRoute `json:"value,omitempty"`
 16192  }
 16193  
 16194  // GeneratevirtualwanvpnserverconfigurationvpnprofileFuture an abstraction for monitoring and retrieving
 16195  // the results of a long-running operation.
 16196  type GeneratevirtualwanvpnserverconfigurationvpnprofileFuture struct {
 16197  	azure.FutureAPI
 16198  	// Result returns the result of the asynchronous operation.
 16199  	// If the operation has not completed it will return an error.
 16200  	Result func(BaseClient) (VpnProfileResponse, error)
 16201  }
 16202  
 16203  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 16204  func (future *GeneratevirtualwanvpnserverconfigurationvpnprofileFuture) UnmarshalJSON(body []byte) error {
 16205  	var azFuture azure.Future
 16206  	if err := json.Unmarshal(body, &azFuture); err != nil {
 16207  		return err
 16208  	}
 16209  	future.FutureAPI = &azFuture
 16210  	future.Result = future.result
 16211  	return nil
 16212  }
 16213  
 16214  // result is the default implementation for GeneratevirtualwanvpnserverconfigurationvpnprofileFuture.Result.
 16215  func (future *GeneratevirtualwanvpnserverconfigurationvpnprofileFuture) result(client BaseClient) (vpr VpnProfileResponse, err error) {
 16216  	var done bool
 16217  	done, err = future.DoneWithContext(context.Background(), client)
 16218  	if err != nil {
 16219  		err = autorest.NewErrorWithError(err, "network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture", "Result", future.Response(), "Polling failure")
 16220  		return
 16221  	}
 16222  	if !done {
 16223  		vpr.Response.Response = future.Response()
 16224  		err = azure.NewAsyncOpIncompleteError("network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture")
 16225  		return
 16226  	}
 16227  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 16228  	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
 16229  		vpr, err = client.GeneratevirtualwanvpnserverconfigurationvpnprofileResponder(vpr.Response.Response)
 16230  		if err != nil {
 16231  			err = autorest.NewErrorWithError(err, "network.GeneratevirtualwanvpnserverconfigurationvpnprofileFuture", "Result", vpr.Response.Response, "Failure responding to request")
 16232  		}
 16233  	}
 16234  	return
 16235  }
 16236  
 16237  // GetActiveSessionsAllFuture an abstraction for monitoring and retrieving the results of a long-running
 16238  // operation.
 16239  type GetActiveSessionsAllFuture struct {
 16240  	azure.FutureAPI
 16241  	// Result returns the result of the asynchronous operation.
 16242  	// If the operation has not completed it will return an error.
 16243  	Result func(BaseClient) (BastionActiveSessionListResultPage, error)
 16244  }
 16245  
 16246  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 16247  func (future *GetActiveSessionsAllFuture) UnmarshalJSON(body []byte) error {
 16248  	var azFuture azure.Future
 16249  	if err := json.Unmarshal(body, &azFuture); err != nil {
 16250  		return err
 16251  	}
 16252  	future.FutureAPI = &azFuture
 16253  	future.Result = future.result
 16254  	return nil
 16255  }
 16256  
 16257  // result is the default implementation for GetActiveSessionsAllFuture.Result.
 16258  func (future *GetActiveSessionsAllFuture) result(client BaseClient) (baslrp BastionActiveSessionListResultPage, err error) {
 16259  	var done bool
 16260  	done, err = future.DoneWithContext(context.Background(), client)
 16261  	if err != nil {
 16262  		err = autorest.NewErrorWithError(err, "network.GetActiveSessionsAllFuture", "Result", future.Response(), "Polling failure")
 16263  		return
 16264  	}
 16265  	if !done {
 16266  		baslrp.baslr.Response.Response = future.Response()
 16267  		err = azure.NewAsyncOpIncompleteError("network.GetActiveSessionsAllFuture")
 16268  		return
 16269  	}
 16270  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 16271  	if baslrp.baslr.Response.Response, err = future.GetResult(sender); err == nil && baslrp.baslr.Response.Response.StatusCode != http.StatusNoContent {
 16272  		baslrp, err = client.GetActiveSessionsResponder(baslrp.baslr.Response.Response)
 16273  		if err != nil {
 16274  			err = autorest.NewErrorWithError(err, "network.GetActiveSessionsAllFuture", "Result", baslrp.baslr.Response.Response, "Failure responding to request")
 16275  		}
 16276  	}
 16277  	return
 16278  }
 16279  
 16280  // GetActiveSessionsFuture an abstraction for monitoring and retrieving the results of a long-running
 16281  // operation.
 16282  type GetActiveSessionsFuture struct {
 16283  	azure.FutureAPI
 16284  	// Result returns the result of the asynchronous operation.
 16285  	// If the operation has not completed it will return an error.
 16286  	Result func(BaseClient) (BastionActiveSessionListResultPage, error)
 16287  }
 16288  
 16289  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 16290  func (future *GetActiveSessionsFuture) UnmarshalJSON(body []byte) error {
 16291  	var azFuture azure.Future
 16292  	if err := json.Unmarshal(body, &azFuture); err != nil {
 16293  		return err
 16294  	}
 16295  	future.FutureAPI = &azFuture
 16296  	future.Result = future.result
 16297  	return nil
 16298  }
 16299  
 16300  // result is the default implementation for GetActiveSessionsFuture.Result.
 16301  func (future *GetActiveSessionsFuture) result(client BaseClient) (baslrp BastionActiveSessionListResultPage, err error) {
 16302  	var done bool
 16303  	done, err = future.DoneWithContext(context.Background(), client)
 16304  	if err != nil {
 16305  		err = autorest.NewErrorWithError(err, "network.GetActiveSessionsFuture", "Result", future.Response(), "Polling failure")
 16306  		return
 16307  	}
 16308  	if !done {
 16309  		baslrp.baslr.Response.Response = future.Response()
 16310  		err = azure.NewAsyncOpIncompleteError("network.GetActiveSessionsFuture")
 16311  		return
 16312  	}
 16313  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 16314  	if baslrp.baslr.Response.Response, err = future.GetResult(sender); err == nil && baslrp.baslr.Response.Response.StatusCode != http.StatusNoContent {
 16315  		baslrp, err = client.GetActiveSessionsResponder(baslrp.baslr.Response.Response)
 16316  		if err != nil {
 16317  			err = autorest.NewErrorWithError(err, "network.GetActiveSessionsFuture", "Result", baslrp.baslr.Response.Response, "Failure responding to request")
 16318  		}
 16319  	}
 16320  	return
 16321  }
 16322  
 16323  // GetVpnSitesConfigurationRequest list of Vpn-Sites.
 16324  type GetVpnSitesConfigurationRequest struct {
 16325  	// VpnSites - List of resource-ids of the vpn-sites for which config is to be downloaded.
 16326  	VpnSites *[]string `json:"vpnSites,omitempty"`
 16327  	// OutputBlobSasURL - The sas-url to download the configurations for vpn-sites.
 16328  	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
 16329  }
 16330  
 16331  // HTTPConfiguration HTTP configuration of the connectivity check.
 16332  type HTTPConfiguration struct {
 16333  	// Method - HTTP method. Possible values include: 'HTTPMethodGet'
 16334  	Method HTTPMethod `json:"method,omitempty"`
 16335  	// Headers - List of HTTP headers.
 16336  	Headers *[]HTTPHeader `json:"headers,omitempty"`
 16337  	// ValidStatusCodes - Valid status codes.
 16338  	ValidStatusCodes *[]int32 `json:"validStatusCodes,omitempty"`
 16339  }
 16340  
 16341  // HTTPHeader the HTTP header.
 16342  type HTTPHeader struct {
 16343  	// Name - The name in HTTP header.
 16344  	Name *string `json:"name,omitempty"`
 16345  	// Value - The value in HTTP header.
 16346  	Value *string `json:"value,omitempty"`
 16347  }
 16348  
 16349  // HubIPAddresses IP addresses associated with azure firewall.
 16350  type HubIPAddresses struct {
 16351  	// PublicIPAddresses - List of Public IP addresses associated with azure firewall.
 16352  	PublicIPAddresses *[]AzureFirewallPublicIPAddress `json:"publicIPAddresses,omitempty"`
 16353  	// PrivateIPAddress - Private IP Address associated with azure firewall.
 16354  	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
 16355  }
 16356  
 16357  // HubRoute routeTable route.
 16358  type HubRoute struct {
 16359  	// Name - The name of the Route that is unique within a RouteTable. This name can be used to access this route.
 16360  	Name *string `json:"name,omitempty"`
 16361  	// DestinationType - The type of destinations (eg: CIDR, ResourceId, Service).
 16362  	DestinationType *string `json:"destinationType,omitempty"`
 16363  	// Destinations - List of all destinations.
 16364  	Destinations *[]string `json:"destinations,omitempty"`
 16365  	// NextHopType - The type of next hop (eg: ResourceId).
 16366  	NextHopType *string `json:"nextHopType,omitempty"`
 16367  	// NextHop - NextHop resource ID.
 16368  	NextHop *string `json:"nextHop,omitempty"`
 16369  }
 16370  
 16371  // HubRouteTable routeTable resource in a virtual hub.
 16372  type HubRouteTable struct {
 16373  	autorest.Response `json:"-"`
 16374  	// HubRouteTableProperties - Properties of the RouteTable resource.
 16375  	*HubRouteTableProperties `json:"properties,omitempty"`
 16376  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 16377  	Name *string `json:"name,omitempty"`
 16378  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 16379  	Etag *string `json:"etag,omitempty"`
 16380  	// Type - READ-ONLY; Resource type.
 16381  	Type *string `json:"type,omitempty"`
 16382  	// ID - Resource ID.
 16383  	ID *string `json:"id,omitempty"`
 16384  }
 16385  
 16386  // MarshalJSON is the custom marshaler for HubRouteTable.
 16387  func (hrt HubRouteTable) MarshalJSON() ([]byte, error) {
 16388  	objectMap := make(map[string]interface{})
 16389  	if hrt.HubRouteTableProperties != nil {
 16390  		objectMap["properties"] = hrt.HubRouteTableProperties
 16391  	}
 16392  	if hrt.Name != nil {
 16393  		objectMap["name"] = hrt.Name
 16394  	}
 16395  	if hrt.ID != nil {
 16396  		objectMap["id"] = hrt.ID
 16397  	}
 16398  	return json.Marshal(objectMap)
 16399  }
 16400  
 16401  // UnmarshalJSON is the custom unmarshaler for HubRouteTable struct.
 16402  func (hrt *HubRouteTable) UnmarshalJSON(body []byte) error {
 16403  	var m map[string]*json.RawMessage
 16404  	err := json.Unmarshal(body, &m)
 16405  	if err != nil {
 16406  		return err
 16407  	}
 16408  	for k, v := range m {
 16409  		switch k {
 16410  		case "properties":
 16411  			if v != nil {
 16412  				var hubRouteTableProperties HubRouteTableProperties
 16413  				err = json.Unmarshal(*v, &hubRouteTableProperties)
 16414  				if err != nil {
 16415  					return err
 16416  				}
 16417  				hrt.HubRouteTableProperties = &hubRouteTableProperties
 16418  			}
 16419  		case "name":
 16420  			if v != nil {
 16421  				var name string
 16422  				err = json.Unmarshal(*v, &name)
 16423  				if err != nil {
 16424  					return err
 16425  				}
 16426  				hrt.Name = &name
 16427  			}
 16428  		case "etag":
 16429  			if v != nil {
 16430  				var etag string
 16431  				err = json.Unmarshal(*v, &etag)
 16432  				if err != nil {
 16433  					return err
 16434  				}
 16435  				hrt.Etag = &etag
 16436  			}
 16437  		case "type":
 16438  			if v != nil {
 16439  				var typeVar string
 16440  				err = json.Unmarshal(*v, &typeVar)
 16441  				if err != nil {
 16442  					return err
 16443  				}
 16444  				hrt.Type = &typeVar
 16445  			}
 16446  		case "id":
 16447  			if v != nil {
 16448  				var ID string
 16449  				err = json.Unmarshal(*v, &ID)
 16450  				if err != nil {
 16451  					return err
 16452  				}
 16453  				hrt.ID = &ID
 16454  			}
 16455  		}
 16456  	}
 16457  
 16458  	return nil
 16459  }
 16460  
 16461  // HubRouteTableProperties parameters for RouteTable.
 16462  type HubRouteTableProperties struct {
 16463  	// Routes - List of all routes.
 16464  	Routes *[]HubRoute `json:"routes,omitempty"`
 16465  	// Labels - List of labels associated with this route table.
 16466  	Labels *[]string `json:"labels,omitempty"`
 16467  	// AssociatedConnections - READ-ONLY; List of all connections associated with this route table.
 16468  	AssociatedConnections *[]string `json:"associatedConnections,omitempty"`
 16469  	// PropagatingConnections - READ-ONLY; List of all connections that advertise to this route table.
 16470  	PropagatingConnections *[]string `json:"propagatingConnections,omitempty"`
 16471  	// ProvisioningState - READ-ONLY; The provisioning state of the RouteTable resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 16472  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 16473  }
 16474  
 16475  // MarshalJSON is the custom marshaler for HubRouteTableProperties.
 16476  func (hrtp HubRouteTableProperties) MarshalJSON() ([]byte, error) {
 16477  	objectMap := make(map[string]interface{})
 16478  	if hrtp.Routes != nil {
 16479  		objectMap["routes"] = hrtp.Routes
 16480  	}
 16481  	if hrtp.Labels != nil {
 16482  		objectMap["labels"] = hrtp.Labels
 16483  	}
 16484  	return json.Marshal(objectMap)
 16485  }
 16486  
 16487  // HubRouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 16488  // long-running operation.
 16489  type HubRouteTablesCreateOrUpdateFuture struct {
 16490  	azure.FutureAPI
 16491  	// Result returns the result of the asynchronous operation.
 16492  	// If the operation has not completed it will return an error.
 16493  	Result func(HubRouteTablesClient) (HubRouteTable, error)
 16494  }
 16495  
 16496  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 16497  func (future *HubRouteTablesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 16498  	var azFuture azure.Future
 16499  	if err := json.Unmarshal(body, &azFuture); err != nil {
 16500  		return err
 16501  	}
 16502  	future.FutureAPI = &azFuture
 16503  	future.Result = future.result
 16504  	return nil
 16505  }
 16506  
 16507  // result is the default implementation for HubRouteTablesCreateOrUpdateFuture.Result.
 16508  func (future *HubRouteTablesCreateOrUpdateFuture) result(client HubRouteTablesClient) (hrt HubRouteTable, err error) {
 16509  	var done bool
 16510  	done, err = future.DoneWithContext(context.Background(), client)
 16511  	if err != nil {
 16512  		err = autorest.NewErrorWithError(err, "network.HubRouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 16513  		return
 16514  	}
 16515  	if !done {
 16516  		hrt.Response.Response = future.Response()
 16517  		err = azure.NewAsyncOpIncompleteError("network.HubRouteTablesCreateOrUpdateFuture")
 16518  		return
 16519  	}
 16520  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 16521  	if hrt.Response.Response, err = future.GetResult(sender); err == nil && hrt.Response.Response.StatusCode != http.StatusNoContent {
 16522  		hrt, err = client.CreateOrUpdateResponder(hrt.Response.Response)
 16523  		if err != nil {
 16524  			err = autorest.NewErrorWithError(err, "network.HubRouteTablesCreateOrUpdateFuture", "Result", hrt.Response.Response, "Failure responding to request")
 16525  		}
 16526  	}
 16527  	return
 16528  }
 16529  
 16530  // HubRouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 16531  // operation.
 16532  type HubRouteTablesDeleteFuture struct {
 16533  	azure.FutureAPI
 16534  	// Result returns the result of the asynchronous operation.
 16535  	// If the operation has not completed it will return an error.
 16536  	Result func(HubRouteTablesClient) (autorest.Response, error)
 16537  }
 16538  
 16539  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 16540  func (future *HubRouteTablesDeleteFuture) UnmarshalJSON(body []byte) error {
 16541  	var azFuture azure.Future
 16542  	if err := json.Unmarshal(body, &azFuture); err != nil {
 16543  		return err
 16544  	}
 16545  	future.FutureAPI = &azFuture
 16546  	future.Result = future.result
 16547  	return nil
 16548  }
 16549  
 16550  // result is the default implementation for HubRouteTablesDeleteFuture.Result.
 16551  func (future *HubRouteTablesDeleteFuture) result(client HubRouteTablesClient) (ar autorest.Response, err error) {
 16552  	var done bool
 16553  	done, err = future.DoneWithContext(context.Background(), client)
 16554  	if err != nil {
 16555  		err = autorest.NewErrorWithError(err, "network.HubRouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
 16556  		return
 16557  	}
 16558  	if !done {
 16559  		ar.Response = future.Response()
 16560  		err = azure.NewAsyncOpIncompleteError("network.HubRouteTablesDeleteFuture")
 16561  		return
 16562  	}
 16563  	ar.Response = future.Response()
 16564  	return
 16565  }
 16566  
 16567  // HubVirtualNetworkConnection hubVirtualNetworkConnection Resource.
 16568  type HubVirtualNetworkConnection struct {
 16569  	autorest.Response `json:"-"`
 16570  	// HubVirtualNetworkConnectionProperties - Properties of the hub virtual network connection.
 16571  	*HubVirtualNetworkConnectionProperties `json:"properties,omitempty"`
 16572  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 16573  	Name *string `json:"name,omitempty"`
 16574  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 16575  	Etag *string `json:"etag,omitempty"`
 16576  	// ID - Resource ID.
 16577  	ID *string `json:"id,omitempty"`
 16578  }
 16579  
 16580  // MarshalJSON is the custom marshaler for HubVirtualNetworkConnection.
 16581  func (hvnc HubVirtualNetworkConnection) MarshalJSON() ([]byte, error) {
 16582  	objectMap := make(map[string]interface{})
 16583  	if hvnc.HubVirtualNetworkConnectionProperties != nil {
 16584  		objectMap["properties"] = hvnc.HubVirtualNetworkConnectionProperties
 16585  	}
 16586  	if hvnc.Name != nil {
 16587  		objectMap["name"] = hvnc.Name
 16588  	}
 16589  	if hvnc.ID != nil {
 16590  		objectMap["id"] = hvnc.ID
 16591  	}
 16592  	return json.Marshal(objectMap)
 16593  }
 16594  
 16595  // UnmarshalJSON is the custom unmarshaler for HubVirtualNetworkConnection struct.
 16596  func (hvnc *HubVirtualNetworkConnection) UnmarshalJSON(body []byte) error {
 16597  	var m map[string]*json.RawMessage
 16598  	err := json.Unmarshal(body, &m)
 16599  	if err != nil {
 16600  		return err
 16601  	}
 16602  	for k, v := range m {
 16603  		switch k {
 16604  		case "properties":
 16605  			if v != nil {
 16606  				var hubVirtualNetworkConnectionProperties HubVirtualNetworkConnectionProperties
 16607  				err = json.Unmarshal(*v, &hubVirtualNetworkConnectionProperties)
 16608  				if err != nil {
 16609  					return err
 16610  				}
 16611  				hvnc.HubVirtualNetworkConnectionProperties = &hubVirtualNetworkConnectionProperties
 16612  			}
 16613  		case "name":
 16614  			if v != nil {
 16615  				var name string
 16616  				err = json.Unmarshal(*v, &name)
 16617  				if err != nil {
 16618  					return err
 16619  				}
 16620  				hvnc.Name = &name
 16621  			}
 16622  		case "etag":
 16623  			if v != nil {
 16624  				var etag string
 16625  				err = json.Unmarshal(*v, &etag)
 16626  				if err != nil {
 16627  					return err
 16628  				}
 16629  				hvnc.Etag = &etag
 16630  			}
 16631  		case "id":
 16632  			if v != nil {
 16633  				var ID string
 16634  				err = json.Unmarshal(*v, &ID)
 16635  				if err != nil {
 16636  					return err
 16637  				}
 16638  				hvnc.ID = &ID
 16639  			}
 16640  		}
 16641  	}
 16642  
 16643  	return nil
 16644  }
 16645  
 16646  // HubVirtualNetworkConnectionProperties parameters for HubVirtualNetworkConnection.
 16647  type HubVirtualNetworkConnectionProperties struct {
 16648  	// RemoteVirtualNetwork - Reference to the remote virtual network.
 16649  	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
 16650  	// AllowHubToRemoteVnetTransit - VirtualHub to RemoteVnet transit to enabled or not.
 16651  	AllowHubToRemoteVnetTransit *bool `json:"allowHubToRemoteVnetTransit,omitempty"`
 16652  	// AllowRemoteVnetToUseHubVnetGateways - Allow RemoteVnet to use Virtual Hub's gateways.
 16653  	AllowRemoteVnetToUseHubVnetGateways *bool `json:"allowRemoteVnetToUseHubVnetGateways,omitempty"`
 16654  	// EnableInternetSecurity - Enable internet security.
 16655  	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
 16656  	// RoutingConfiguration - The Routing Configuration indicating the associated and propagated route tables on this connection.
 16657  	RoutingConfiguration *RoutingConfiguration `json:"routingConfiguration,omitempty"`
 16658  	// ProvisioningState - READ-ONLY; The provisioning state of the hub virtual network connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 16659  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 16660  }
 16661  
 16662  // MarshalJSON is the custom marshaler for HubVirtualNetworkConnectionProperties.
 16663  func (hvncp HubVirtualNetworkConnectionProperties) MarshalJSON() ([]byte, error) {
 16664  	objectMap := make(map[string]interface{})
 16665  	if hvncp.RemoteVirtualNetwork != nil {
 16666  		objectMap["remoteVirtualNetwork"] = hvncp.RemoteVirtualNetwork
 16667  	}
 16668  	if hvncp.AllowHubToRemoteVnetTransit != nil {
 16669  		objectMap["allowHubToRemoteVnetTransit"] = hvncp.AllowHubToRemoteVnetTransit
 16670  	}
 16671  	if hvncp.AllowRemoteVnetToUseHubVnetGateways != nil {
 16672  		objectMap["allowRemoteVnetToUseHubVnetGateways"] = hvncp.AllowRemoteVnetToUseHubVnetGateways
 16673  	}
 16674  	if hvncp.EnableInternetSecurity != nil {
 16675  		objectMap["enableInternetSecurity"] = hvncp.EnableInternetSecurity
 16676  	}
 16677  	if hvncp.RoutingConfiguration != nil {
 16678  		objectMap["routingConfiguration"] = hvncp.RoutingConfiguration
 16679  	}
 16680  	return json.Marshal(objectMap)
 16681  }
 16682  
 16683  // InboundNatPool inbound NAT pool of the load balancer.
 16684  type InboundNatPool struct {
 16685  	// InboundNatPoolPropertiesFormat - Properties of load balancer inbound nat pool.
 16686  	*InboundNatPoolPropertiesFormat `json:"properties,omitempty"`
 16687  	// Name - The name of the resource that is unique within the set of inbound NAT pools used by the load balancer. This name can be used to access the resource.
 16688  	Name *string `json:"name,omitempty"`
 16689  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 16690  	Etag *string `json:"etag,omitempty"`
 16691  	// Type - READ-ONLY; Type of the resource.
 16692  	Type *string `json:"type,omitempty"`
 16693  	// ID - Resource ID.
 16694  	ID *string `json:"id,omitempty"`
 16695  }
 16696  
 16697  // MarshalJSON is the custom marshaler for InboundNatPool.
 16698  func (inp InboundNatPool) MarshalJSON() ([]byte, error) {
 16699  	objectMap := make(map[string]interface{})
 16700  	if inp.InboundNatPoolPropertiesFormat != nil {
 16701  		objectMap["properties"] = inp.InboundNatPoolPropertiesFormat
 16702  	}
 16703  	if inp.Name != nil {
 16704  		objectMap["name"] = inp.Name
 16705  	}
 16706  	if inp.ID != nil {
 16707  		objectMap["id"] = inp.ID
 16708  	}
 16709  	return json.Marshal(objectMap)
 16710  }
 16711  
 16712  // UnmarshalJSON is the custom unmarshaler for InboundNatPool struct.
 16713  func (inp *InboundNatPool) UnmarshalJSON(body []byte) error {
 16714  	var m map[string]*json.RawMessage
 16715  	err := json.Unmarshal(body, &m)
 16716  	if err != nil {
 16717  		return err
 16718  	}
 16719  	for k, v := range m {
 16720  		switch k {
 16721  		case "properties":
 16722  			if v != nil {
 16723  				var inboundNatPoolPropertiesFormat InboundNatPoolPropertiesFormat
 16724  				err = json.Unmarshal(*v, &inboundNatPoolPropertiesFormat)
 16725  				if err != nil {
 16726  					return err
 16727  				}
 16728  				inp.InboundNatPoolPropertiesFormat = &inboundNatPoolPropertiesFormat
 16729  			}
 16730  		case "name":
 16731  			if v != nil {
 16732  				var name string
 16733  				err = json.Unmarshal(*v, &name)
 16734  				if err != nil {
 16735  					return err
 16736  				}
 16737  				inp.Name = &name
 16738  			}
 16739  		case "etag":
 16740  			if v != nil {
 16741  				var etag string
 16742  				err = json.Unmarshal(*v, &etag)
 16743  				if err != nil {
 16744  					return err
 16745  				}
 16746  				inp.Etag = &etag
 16747  			}
 16748  		case "type":
 16749  			if v != nil {
 16750  				var typeVar string
 16751  				err = json.Unmarshal(*v, &typeVar)
 16752  				if err != nil {
 16753  					return err
 16754  				}
 16755  				inp.Type = &typeVar
 16756  			}
 16757  		case "id":
 16758  			if v != nil {
 16759  				var ID string
 16760  				err = json.Unmarshal(*v, &ID)
 16761  				if err != nil {
 16762  					return err
 16763  				}
 16764  				inp.ID = &ID
 16765  			}
 16766  		}
 16767  	}
 16768  
 16769  	return nil
 16770  }
 16771  
 16772  // InboundNatPoolPropertiesFormat properties of Inbound NAT pool.
 16773  type InboundNatPoolPropertiesFormat struct {
 16774  	// FrontendIPConfiguration - A reference to frontend IP addresses.
 16775  	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
 16776  	// Protocol - The reference to the transport protocol used by the inbound NAT pool. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
 16777  	Protocol TransportProtocol `json:"protocol,omitempty"`
 16778  	// 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.
 16779  	FrontendPortRangeStart *int32 `json:"frontendPortRangeStart,omitempty"`
 16780  	// 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.
 16781  	FrontendPortRangeEnd *int32 `json:"frontendPortRangeEnd,omitempty"`
 16782  	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 1 and 65535.
 16783  	BackendPort *int32 `json:"backendPort,omitempty"`
 16784  	// 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.
 16785  	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
 16786  	// 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.
 16787  	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
 16788  	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
 16789  	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
 16790  	// ProvisioningState - READ-ONLY; The provisioning state of the inbound NAT pool resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 16791  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 16792  }
 16793  
 16794  // MarshalJSON is the custom marshaler for InboundNatPoolPropertiesFormat.
 16795  func (inppf InboundNatPoolPropertiesFormat) MarshalJSON() ([]byte, error) {
 16796  	objectMap := make(map[string]interface{})
 16797  	if inppf.FrontendIPConfiguration != nil {
 16798  		objectMap["frontendIPConfiguration"] = inppf.FrontendIPConfiguration
 16799  	}
 16800  	if inppf.Protocol != "" {
 16801  		objectMap["protocol"] = inppf.Protocol
 16802  	}
 16803  	if inppf.FrontendPortRangeStart != nil {
 16804  		objectMap["frontendPortRangeStart"] = inppf.FrontendPortRangeStart
 16805  	}
 16806  	if inppf.FrontendPortRangeEnd != nil {
 16807  		objectMap["frontendPortRangeEnd"] = inppf.FrontendPortRangeEnd
 16808  	}
 16809  	if inppf.BackendPort != nil {
 16810  		objectMap["backendPort"] = inppf.BackendPort
 16811  	}
 16812  	if inppf.IdleTimeoutInMinutes != nil {
 16813  		objectMap["idleTimeoutInMinutes"] = inppf.IdleTimeoutInMinutes
 16814  	}
 16815  	if inppf.EnableFloatingIP != nil {
 16816  		objectMap["enableFloatingIP"] = inppf.EnableFloatingIP
 16817  	}
 16818  	if inppf.EnableTCPReset != nil {
 16819  		objectMap["enableTcpReset"] = inppf.EnableTCPReset
 16820  	}
 16821  	return json.Marshal(objectMap)
 16822  }
 16823  
 16824  // InboundNatRule inbound NAT rule of the load balancer.
 16825  type InboundNatRule struct {
 16826  	autorest.Response `json:"-"`
 16827  	// InboundNatRulePropertiesFormat - Properties of load balancer inbound nat rule.
 16828  	*InboundNatRulePropertiesFormat `json:"properties,omitempty"`
 16829  	// Name - The name of the resource that is unique within the set of inbound NAT rules used by the load balancer. This name can be used to access the resource.
 16830  	Name *string `json:"name,omitempty"`
 16831  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 16832  	Etag *string `json:"etag,omitempty"`
 16833  	// Type - READ-ONLY; Type of the resource.
 16834  	Type *string `json:"type,omitempty"`
 16835  	// ID - Resource ID.
 16836  	ID *string `json:"id,omitempty"`
 16837  }
 16838  
 16839  // MarshalJSON is the custom marshaler for InboundNatRule.
 16840  func (inr InboundNatRule) MarshalJSON() ([]byte, error) {
 16841  	objectMap := make(map[string]interface{})
 16842  	if inr.InboundNatRulePropertiesFormat != nil {
 16843  		objectMap["properties"] = inr.InboundNatRulePropertiesFormat
 16844  	}
 16845  	if inr.Name != nil {
 16846  		objectMap["name"] = inr.Name
 16847  	}
 16848  	if inr.ID != nil {
 16849  		objectMap["id"] = inr.ID
 16850  	}
 16851  	return json.Marshal(objectMap)
 16852  }
 16853  
 16854  // UnmarshalJSON is the custom unmarshaler for InboundNatRule struct.
 16855  func (inr *InboundNatRule) UnmarshalJSON(body []byte) error {
 16856  	var m map[string]*json.RawMessage
 16857  	err := json.Unmarshal(body, &m)
 16858  	if err != nil {
 16859  		return err
 16860  	}
 16861  	for k, v := range m {
 16862  		switch k {
 16863  		case "properties":
 16864  			if v != nil {
 16865  				var inboundNatRulePropertiesFormat InboundNatRulePropertiesFormat
 16866  				err = json.Unmarshal(*v, &inboundNatRulePropertiesFormat)
 16867  				if err != nil {
 16868  					return err
 16869  				}
 16870  				inr.InboundNatRulePropertiesFormat = &inboundNatRulePropertiesFormat
 16871  			}
 16872  		case "name":
 16873  			if v != nil {
 16874  				var name string
 16875  				err = json.Unmarshal(*v, &name)
 16876  				if err != nil {
 16877  					return err
 16878  				}
 16879  				inr.Name = &name
 16880  			}
 16881  		case "etag":
 16882  			if v != nil {
 16883  				var etag string
 16884  				err = json.Unmarshal(*v, &etag)
 16885  				if err != nil {
 16886  					return err
 16887  				}
 16888  				inr.Etag = &etag
 16889  			}
 16890  		case "type":
 16891  			if v != nil {
 16892  				var typeVar string
 16893  				err = json.Unmarshal(*v, &typeVar)
 16894  				if err != nil {
 16895  					return err
 16896  				}
 16897  				inr.Type = &typeVar
 16898  			}
 16899  		case "id":
 16900  			if v != nil {
 16901  				var ID string
 16902  				err = json.Unmarshal(*v, &ID)
 16903  				if err != nil {
 16904  					return err
 16905  				}
 16906  				inr.ID = &ID
 16907  			}
 16908  		}
 16909  	}
 16910  
 16911  	return nil
 16912  }
 16913  
 16914  // InboundNatRuleListResult response for ListInboundNatRule API service call.
 16915  type InboundNatRuleListResult struct {
 16916  	autorest.Response `json:"-"`
 16917  	// Value - A list of inbound nat rules in a load balancer.
 16918  	Value *[]InboundNatRule `json:"value,omitempty"`
 16919  	// NextLink - READ-ONLY; The URL to get the next set of results.
 16920  	NextLink *string `json:"nextLink,omitempty"`
 16921  }
 16922  
 16923  // MarshalJSON is the custom marshaler for InboundNatRuleListResult.
 16924  func (inrlr InboundNatRuleListResult) MarshalJSON() ([]byte, error) {
 16925  	objectMap := make(map[string]interface{})
 16926  	if inrlr.Value != nil {
 16927  		objectMap["value"] = inrlr.Value
 16928  	}
 16929  	return json.Marshal(objectMap)
 16930  }
 16931  
 16932  // InboundNatRuleListResultIterator provides access to a complete listing of InboundNatRule values.
 16933  type InboundNatRuleListResultIterator struct {
 16934  	i    int
 16935  	page InboundNatRuleListResultPage
 16936  }
 16937  
 16938  // NextWithContext advances to the next value.  If there was an error making
 16939  // the request the iterator does not advance and the error is returned.
 16940  func (iter *InboundNatRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
 16941  	if tracing.IsEnabled() {
 16942  		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultIterator.NextWithContext")
 16943  		defer func() {
 16944  			sc := -1
 16945  			if iter.Response().Response.Response != nil {
 16946  				sc = iter.Response().Response.Response.StatusCode
 16947  			}
 16948  			tracing.EndSpan(ctx, sc, err)
 16949  		}()
 16950  	}
 16951  	iter.i++
 16952  	if iter.i < len(iter.page.Values()) {
 16953  		return nil
 16954  	}
 16955  	err = iter.page.NextWithContext(ctx)
 16956  	if err != nil {
 16957  		iter.i--
 16958  		return err
 16959  	}
 16960  	iter.i = 0
 16961  	return nil
 16962  }
 16963  
 16964  // Next advances to the next value.  If there was an error making
 16965  // the request the iterator does not advance and the error is returned.
 16966  // Deprecated: Use NextWithContext() instead.
 16967  func (iter *InboundNatRuleListResultIterator) Next() error {
 16968  	return iter.NextWithContext(context.Background())
 16969  }
 16970  
 16971  // NotDone returns true if the enumeration should be started or is not yet complete.
 16972  func (iter InboundNatRuleListResultIterator) NotDone() bool {
 16973  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 16974  }
 16975  
 16976  // Response returns the raw server response from the last page request.
 16977  func (iter InboundNatRuleListResultIterator) Response() InboundNatRuleListResult {
 16978  	return iter.page.Response()
 16979  }
 16980  
 16981  // Value returns the current value or a zero-initialized value if the
 16982  // iterator has advanced beyond the end of the collection.
 16983  func (iter InboundNatRuleListResultIterator) Value() InboundNatRule {
 16984  	if !iter.page.NotDone() {
 16985  		return InboundNatRule{}
 16986  	}
 16987  	return iter.page.Values()[iter.i]
 16988  }
 16989  
 16990  // Creates a new instance of the InboundNatRuleListResultIterator type.
 16991  func NewInboundNatRuleListResultIterator(page InboundNatRuleListResultPage) InboundNatRuleListResultIterator {
 16992  	return InboundNatRuleListResultIterator{page: page}
 16993  }
 16994  
 16995  // IsEmpty returns true if the ListResult contains no values.
 16996  func (inrlr InboundNatRuleListResult) IsEmpty() bool {
 16997  	return inrlr.Value == nil || len(*inrlr.Value) == 0
 16998  }
 16999  
 17000  // hasNextLink returns true if the NextLink is not empty.
 17001  func (inrlr InboundNatRuleListResult) hasNextLink() bool {
 17002  	return inrlr.NextLink != nil && len(*inrlr.NextLink) != 0
 17003  }
 17004  
 17005  // inboundNatRuleListResultPreparer prepares a request to retrieve the next set of results.
 17006  // It returns nil if no more results exist.
 17007  func (inrlr InboundNatRuleListResult) inboundNatRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
 17008  	if !inrlr.hasNextLink() {
 17009  		return nil, nil
 17010  	}
 17011  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 17012  		autorest.AsJSON(),
 17013  		autorest.AsGet(),
 17014  		autorest.WithBaseURL(to.String(inrlr.NextLink)))
 17015  }
 17016  
 17017  // InboundNatRuleListResultPage contains a page of InboundNatRule values.
 17018  type InboundNatRuleListResultPage struct {
 17019  	fn    func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)
 17020  	inrlr InboundNatRuleListResult
 17021  }
 17022  
 17023  // NextWithContext advances to the next page of values.  If there was an error making
 17024  // the request the page does not advance and the error is returned.
 17025  func (page *InboundNatRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
 17026  	if tracing.IsEnabled() {
 17027  		ctx = tracing.StartSpan(ctx, fqdn+"/InboundNatRuleListResultPage.NextWithContext")
 17028  		defer func() {
 17029  			sc := -1
 17030  			if page.Response().Response.Response != nil {
 17031  				sc = page.Response().Response.Response.StatusCode
 17032  			}
 17033  			tracing.EndSpan(ctx, sc, err)
 17034  		}()
 17035  	}
 17036  	for {
 17037  		next, err := page.fn(ctx, page.inrlr)
 17038  		if err != nil {
 17039  			return err
 17040  		}
 17041  		page.inrlr = next
 17042  		if !next.hasNextLink() || !next.IsEmpty() {
 17043  			break
 17044  		}
 17045  	}
 17046  	return nil
 17047  }
 17048  
 17049  // Next advances to the next page of values.  If there was an error making
 17050  // the request the page does not advance and the error is returned.
 17051  // Deprecated: Use NextWithContext() instead.
 17052  func (page *InboundNatRuleListResultPage) Next() error {
 17053  	return page.NextWithContext(context.Background())
 17054  }
 17055  
 17056  // NotDone returns true if the page enumeration should be started or is not yet complete.
 17057  func (page InboundNatRuleListResultPage) NotDone() bool {
 17058  	return !page.inrlr.IsEmpty()
 17059  }
 17060  
 17061  // Response returns the raw server response from the last page request.
 17062  func (page InboundNatRuleListResultPage) Response() InboundNatRuleListResult {
 17063  	return page.inrlr
 17064  }
 17065  
 17066  // Values returns the slice of values for the current page or nil if there are no values.
 17067  func (page InboundNatRuleListResultPage) Values() []InboundNatRule {
 17068  	if page.inrlr.IsEmpty() {
 17069  		return nil
 17070  	}
 17071  	return *page.inrlr.Value
 17072  }
 17073  
 17074  // Creates a new instance of the InboundNatRuleListResultPage type.
 17075  func NewInboundNatRuleListResultPage(cur InboundNatRuleListResult, getNextPage func(context.Context, InboundNatRuleListResult) (InboundNatRuleListResult, error)) InboundNatRuleListResultPage {
 17076  	return InboundNatRuleListResultPage{
 17077  		fn:    getNextPage,
 17078  		inrlr: cur,
 17079  	}
 17080  }
 17081  
 17082  // InboundNatRulePropertiesFormat properties of the inbound NAT rule.
 17083  type InboundNatRulePropertiesFormat struct {
 17084  	// FrontendIPConfiguration - A reference to frontend IP addresses.
 17085  	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
 17086  	// BackendIPConfiguration - READ-ONLY; A reference to a private IP address defined on a network interface of a VM. Traffic sent to the frontend port of each of the frontend IP configurations is forwarded to the backend IP.
 17087  	BackendIPConfiguration *InterfaceIPConfiguration `json:"backendIPConfiguration,omitempty"`
 17088  	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
 17089  	Protocol TransportProtocol `json:"protocol,omitempty"`
 17090  	// 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.
 17091  	FrontendPort *int32 `json:"frontendPort,omitempty"`
 17092  	// BackendPort - The port used for the internal endpoint. Acceptable values range from 1 to 65535.
 17093  	BackendPort *int32 `json:"backendPort,omitempty"`
 17094  	// 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.
 17095  	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
 17096  	// 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.
 17097  	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
 17098  	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
 17099  	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
 17100  	// ProvisioningState - READ-ONLY; The provisioning state of the inbound NAT rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 17101  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 17102  }
 17103  
 17104  // MarshalJSON is the custom marshaler for InboundNatRulePropertiesFormat.
 17105  func (inrpf InboundNatRulePropertiesFormat) MarshalJSON() ([]byte, error) {
 17106  	objectMap := make(map[string]interface{})
 17107  	if inrpf.FrontendIPConfiguration != nil {
 17108  		objectMap["frontendIPConfiguration"] = inrpf.FrontendIPConfiguration
 17109  	}
 17110  	if inrpf.Protocol != "" {
 17111  		objectMap["protocol"] = inrpf.Protocol
 17112  	}
 17113  	if inrpf.FrontendPort != nil {
 17114  		objectMap["frontendPort"] = inrpf.FrontendPort
 17115  	}
 17116  	if inrpf.BackendPort != nil {
 17117  		objectMap["backendPort"] = inrpf.BackendPort
 17118  	}
 17119  	if inrpf.IdleTimeoutInMinutes != nil {
 17120  		objectMap["idleTimeoutInMinutes"] = inrpf.IdleTimeoutInMinutes
 17121  	}
 17122  	if inrpf.EnableFloatingIP != nil {
 17123  		objectMap["enableFloatingIP"] = inrpf.EnableFloatingIP
 17124  	}
 17125  	if inrpf.EnableTCPReset != nil {
 17126  		objectMap["enableTcpReset"] = inrpf.EnableTCPReset
 17127  	}
 17128  	return json.Marshal(objectMap)
 17129  }
 17130  
 17131  // InboundNatRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 17132  // long-running operation.
 17133  type InboundNatRulesCreateOrUpdateFuture struct {
 17134  	azure.FutureAPI
 17135  	// Result returns the result of the asynchronous operation.
 17136  	// If the operation has not completed it will return an error.
 17137  	Result func(InboundNatRulesClient) (InboundNatRule, error)
 17138  }
 17139  
 17140  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 17141  func (future *InboundNatRulesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 17142  	var azFuture azure.Future
 17143  	if err := json.Unmarshal(body, &azFuture); err != nil {
 17144  		return err
 17145  	}
 17146  	future.FutureAPI = &azFuture
 17147  	future.Result = future.result
 17148  	return nil
 17149  }
 17150  
 17151  // result is the default implementation for InboundNatRulesCreateOrUpdateFuture.Result.
 17152  func (future *InboundNatRulesCreateOrUpdateFuture) result(client InboundNatRulesClient) (inr InboundNatRule, err error) {
 17153  	var done bool
 17154  	done, err = future.DoneWithContext(context.Background(), client)
 17155  	if err != nil {
 17156  		err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 17157  		return
 17158  	}
 17159  	if !done {
 17160  		inr.Response.Response = future.Response()
 17161  		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesCreateOrUpdateFuture")
 17162  		return
 17163  	}
 17164  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 17165  	if inr.Response.Response, err = future.GetResult(sender); err == nil && inr.Response.Response.StatusCode != http.StatusNoContent {
 17166  		inr, err = client.CreateOrUpdateResponder(inr.Response.Response)
 17167  		if err != nil {
 17168  			err = autorest.NewErrorWithError(err, "network.InboundNatRulesCreateOrUpdateFuture", "Result", inr.Response.Response, "Failure responding to request")
 17169  		}
 17170  	}
 17171  	return
 17172  }
 17173  
 17174  // InboundNatRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 17175  // operation.
 17176  type InboundNatRulesDeleteFuture struct {
 17177  	azure.FutureAPI
 17178  	// Result returns the result of the asynchronous operation.
 17179  	// If the operation has not completed it will return an error.
 17180  	Result func(InboundNatRulesClient) (autorest.Response, error)
 17181  }
 17182  
 17183  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 17184  func (future *InboundNatRulesDeleteFuture) UnmarshalJSON(body []byte) error {
 17185  	var azFuture azure.Future
 17186  	if err := json.Unmarshal(body, &azFuture); err != nil {
 17187  		return err
 17188  	}
 17189  	future.FutureAPI = &azFuture
 17190  	future.Result = future.result
 17191  	return nil
 17192  }
 17193  
 17194  // result is the default implementation for InboundNatRulesDeleteFuture.Result.
 17195  func (future *InboundNatRulesDeleteFuture) result(client InboundNatRulesClient) (ar autorest.Response, err error) {
 17196  	var done bool
 17197  	done, err = future.DoneWithContext(context.Background(), client)
 17198  	if err != nil {
 17199  		err = autorest.NewErrorWithError(err, "network.InboundNatRulesDeleteFuture", "Result", future.Response(), "Polling failure")
 17200  		return
 17201  	}
 17202  	if !done {
 17203  		ar.Response = future.Response()
 17204  		err = azure.NewAsyncOpIncompleteError("network.InboundNatRulesDeleteFuture")
 17205  		return
 17206  	}
 17207  	ar.Response = future.Response()
 17208  	return
 17209  }
 17210  
 17211  // IntentPolicy network Intent Policy resource.
 17212  type IntentPolicy struct {
 17213  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 17214  	Etag *string `json:"etag,omitempty"`
 17215  	// ID - Resource ID.
 17216  	ID *string `json:"id,omitempty"`
 17217  	// Name - READ-ONLY; Resource name.
 17218  	Name *string `json:"name,omitempty"`
 17219  	// Type - READ-ONLY; Resource type.
 17220  	Type *string `json:"type,omitempty"`
 17221  	// Location - Resource location.
 17222  	Location *string `json:"location,omitempty"`
 17223  	// Tags - Resource tags.
 17224  	Tags map[string]*string `json:"tags"`
 17225  }
 17226  
 17227  // MarshalJSON is the custom marshaler for IntentPolicy.
 17228  func (IP IntentPolicy) MarshalJSON() ([]byte, error) {
 17229  	objectMap := make(map[string]interface{})
 17230  	if IP.ID != nil {
 17231  		objectMap["id"] = IP.ID
 17232  	}
 17233  	if IP.Location != nil {
 17234  		objectMap["location"] = IP.Location
 17235  	}
 17236  	if IP.Tags != nil {
 17237  		objectMap["tags"] = IP.Tags
 17238  	}
 17239  	return json.Marshal(objectMap)
 17240  }
 17241  
 17242  // IntentPolicyConfiguration details of NetworkIntentPolicyConfiguration for PrepareNetworkPoliciesRequest.
 17243  type IntentPolicyConfiguration struct {
 17244  	// NetworkIntentPolicyName - The name of the Network Intent Policy for storing in target subscription.
 17245  	NetworkIntentPolicyName *string `json:"networkIntentPolicyName,omitempty"`
 17246  	// SourceNetworkIntentPolicy - Source network intent policy.
 17247  	SourceNetworkIntentPolicy *IntentPolicy `json:"sourceNetworkIntentPolicy,omitempty"`
 17248  }
 17249  
 17250  // Interface a network interface in a resource group.
 17251  type Interface struct {
 17252  	autorest.Response `json:"-"`
 17253  	// InterfacePropertiesFormat - Properties of the network interface.
 17254  	*InterfacePropertiesFormat `json:"properties,omitempty"`
 17255  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 17256  	Etag *string `json:"etag,omitempty"`
 17257  	// ID - Resource ID.
 17258  	ID *string `json:"id,omitempty"`
 17259  	// Name - READ-ONLY; Resource name.
 17260  	Name *string `json:"name,omitempty"`
 17261  	// Type - READ-ONLY; Resource type.
 17262  	Type *string `json:"type,omitempty"`
 17263  	// Location - Resource location.
 17264  	Location *string `json:"location,omitempty"`
 17265  	// Tags - Resource tags.
 17266  	Tags map[string]*string `json:"tags"`
 17267  }
 17268  
 17269  // MarshalJSON is the custom marshaler for Interface.
 17270  func (i Interface) MarshalJSON() ([]byte, error) {
 17271  	objectMap := make(map[string]interface{})
 17272  	if i.InterfacePropertiesFormat != nil {
 17273  		objectMap["properties"] = i.InterfacePropertiesFormat
 17274  	}
 17275  	if i.ID != nil {
 17276  		objectMap["id"] = i.ID
 17277  	}
 17278  	if i.Location != nil {
 17279  		objectMap["location"] = i.Location
 17280  	}
 17281  	if i.Tags != nil {
 17282  		objectMap["tags"] = i.Tags
 17283  	}
 17284  	return json.Marshal(objectMap)
 17285  }
 17286  
 17287  // UnmarshalJSON is the custom unmarshaler for Interface struct.
 17288  func (i *Interface) UnmarshalJSON(body []byte) error {
 17289  	var m map[string]*json.RawMessage
 17290  	err := json.Unmarshal(body, &m)
 17291  	if err != nil {
 17292  		return err
 17293  	}
 17294  	for k, v := range m {
 17295  		switch k {
 17296  		case "properties":
 17297  			if v != nil {
 17298  				var interfacePropertiesFormat InterfacePropertiesFormat
 17299  				err = json.Unmarshal(*v, &interfacePropertiesFormat)
 17300  				if err != nil {
 17301  					return err
 17302  				}
 17303  				i.InterfacePropertiesFormat = &interfacePropertiesFormat
 17304  			}
 17305  		case "etag":
 17306  			if v != nil {
 17307  				var etag string
 17308  				err = json.Unmarshal(*v, &etag)
 17309  				if err != nil {
 17310  					return err
 17311  				}
 17312  				i.Etag = &etag
 17313  			}
 17314  		case "id":
 17315  			if v != nil {
 17316  				var ID string
 17317  				err = json.Unmarshal(*v, &ID)
 17318  				if err != nil {
 17319  					return err
 17320  				}
 17321  				i.ID = &ID
 17322  			}
 17323  		case "name":
 17324  			if v != nil {
 17325  				var name string
 17326  				err = json.Unmarshal(*v, &name)
 17327  				if err != nil {
 17328  					return err
 17329  				}
 17330  				i.Name = &name
 17331  			}
 17332  		case "type":
 17333  			if v != nil {
 17334  				var typeVar string
 17335  				err = json.Unmarshal(*v, &typeVar)
 17336  				if err != nil {
 17337  					return err
 17338  				}
 17339  				i.Type = &typeVar
 17340  			}
 17341  		case "location":
 17342  			if v != nil {
 17343  				var location string
 17344  				err = json.Unmarshal(*v, &location)
 17345  				if err != nil {
 17346  					return err
 17347  				}
 17348  				i.Location = &location
 17349  			}
 17350  		case "tags":
 17351  			if v != nil {
 17352  				var tags map[string]*string
 17353  				err = json.Unmarshal(*v, &tags)
 17354  				if err != nil {
 17355  					return err
 17356  				}
 17357  				i.Tags = tags
 17358  			}
 17359  		}
 17360  	}
 17361  
 17362  	return nil
 17363  }
 17364  
 17365  // InterfaceAssociation network interface and its custom security rules.
 17366  type InterfaceAssociation struct {
 17367  	// ID - READ-ONLY; Network interface ID.
 17368  	ID *string `json:"id,omitempty"`
 17369  	// SecurityRules - Collection of custom security rules.
 17370  	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
 17371  }
 17372  
 17373  // MarshalJSON is the custom marshaler for InterfaceAssociation.
 17374  func (ia InterfaceAssociation) MarshalJSON() ([]byte, error) {
 17375  	objectMap := make(map[string]interface{})
 17376  	if ia.SecurityRules != nil {
 17377  		objectMap["securityRules"] = ia.SecurityRules
 17378  	}
 17379  	return json.Marshal(objectMap)
 17380  }
 17381  
 17382  // InterfaceDNSSettings DNS settings of a network interface.
 17383  type InterfaceDNSSettings struct {
 17384  	// 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.
 17385  	DNSServers *[]string `json:"dnsServers,omitempty"`
 17386  	// AppliedDNSServers - READ-ONLY; If the VM that uses this NIC is part of an Availability Set, then this list will have the union of all DNS servers from all NICs that are part of the Availability Set. This property is what is configured on each of those VMs.
 17387  	AppliedDNSServers *[]string `json:"appliedDnsServers,omitempty"`
 17388  	// InternalDNSNameLabel - Relative DNS name for this NIC used for internal communications between VMs in the same virtual network.
 17389  	InternalDNSNameLabel *string `json:"internalDnsNameLabel,omitempty"`
 17390  	// InternalFqdn - READ-ONLY; Fully qualified DNS name supporting internal communications between VMs in the same virtual network.
 17391  	InternalFqdn *string `json:"internalFqdn,omitempty"`
 17392  	// InternalDomainNameSuffix - READ-ONLY; Even if internalDnsNameLabel is not specified, a DNS entry is created for the primary NIC of the VM. This DNS name can be constructed by concatenating the VM name with the value of internalDomainNameSuffix.
 17393  	InternalDomainNameSuffix *string `json:"internalDomainNameSuffix,omitempty"`
 17394  }
 17395  
 17396  // MarshalJSON is the custom marshaler for InterfaceDNSSettings.
 17397  func (ids InterfaceDNSSettings) MarshalJSON() ([]byte, error) {
 17398  	objectMap := make(map[string]interface{})
 17399  	if ids.DNSServers != nil {
 17400  		objectMap["dnsServers"] = ids.DNSServers
 17401  	}
 17402  	if ids.InternalDNSNameLabel != nil {
 17403  		objectMap["internalDnsNameLabel"] = ids.InternalDNSNameLabel
 17404  	}
 17405  	return json.Marshal(objectMap)
 17406  }
 17407  
 17408  // InterfaceIPConfiguration iPConfiguration in a network interface.
 17409  type InterfaceIPConfiguration struct {
 17410  	autorest.Response `json:"-"`
 17411  	// InterfaceIPConfigurationPropertiesFormat - Network interface IP configuration properties.
 17412  	*InterfaceIPConfigurationPropertiesFormat `json:"properties,omitempty"`
 17413  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 17414  	Name *string `json:"name,omitempty"`
 17415  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 17416  	Etag *string `json:"etag,omitempty"`
 17417  	// ID - Resource ID.
 17418  	ID *string `json:"id,omitempty"`
 17419  }
 17420  
 17421  // MarshalJSON is the custom marshaler for InterfaceIPConfiguration.
 17422  func (iic InterfaceIPConfiguration) MarshalJSON() ([]byte, error) {
 17423  	objectMap := make(map[string]interface{})
 17424  	if iic.InterfaceIPConfigurationPropertiesFormat != nil {
 17425  		objectMap["properties"] = iic.InterfaceIPConfigurationPropertiesFormat
 17426  	}
 17427  	if iic.Name != nil {
 17428  		objectMap["name"] = iic.Name
 17429  	}
 17430  	if iic.ID != nil {
 17431  		objectMap["id"] = iic.ID
 17432  	}
 17433  	return json.Marshal(objectMap)
 17434  }
 17435  
 17436  // UnmarshalJSON is the custom unmarshaler for InterfaceIPConfiguration struct.
 17437  func (iic *InterfaceIPConfiguration) UnmarshalJSON(body []byte) error {
 17438  	var m map[string]*json.RawMessage
 17439  	err := json.Unmarshal(body, &m)
 17440  	if err != nil {
 17441  		return err
 17442  	}
 17443  	for k, v := range m {
 17444  		switch k {
 17445  		case "properties":
 17446  			if v != nil {
 17447  				var interfaceIPConfigurationPropertiesFormat InterfaceIPConfigurationPropertiesFormat
 17448  				err = json.Unmarshal(*v, &interfaceIPConfigurationPropertiesFormat)
 17449  				if err != nil {
 17450  					return err
 17451  				}
 17452  				iic.InterfaceIPConfigurationPropertiesFormat = &interfaceIPConfigurationPropertiesFormat
 17453  			}
 17454  		case "name":
 17455  			if v != nil {
 17456  				var name string
 17457  				err = json.Unmarshal(*v, &name)
 17458  				if err != nil {
 17459  					return err
 17460  				}
 17461  				iic.Name = &name
 17462  			}
 17463  		case "etag":
 17464  			if v != nil {
 17465  				var etag string
 17466  				err = json.Unmarshal(*v, &etag)
 17467  				if err != nil {
 17468  					return err
 17469  				}
 17470  				iic.Etag = &etag
 17471  			}
 17472  		case "id":
 17473  			if v != nil {
 17474  				var ID string
 17475  				err = json.Unmarshal(*v, &ID)
 17476  				if err != nil {
 17477  					return err
 17478  				}
 17479  				iic.ID = &ID
 17480  			}
 17481  		}
 17482  	}
 17483  
 17484  	return nil
 17485  }
 17486  
 17487  // InterfaceIPConfigurationListResult response for list ip configurations API service call.
 17488  type InterfaceIPConfigurationListResult struct {
 17489  	autorest.Response `json:"-"`
 17490  	// Value - A list of ip configurations.
 17491  	Value *[]InterfaceIPConfiguration `json:"value,omitempty"`
 17492  	// NextLink - READ-ONLY; The URL to get the next set of results.
 17493  	NextLink *string `json:"nextLink,omitempty"`
 17494  }
 17495  
 17496  // MarshalJSON is the custom marshaler for InterfaceIPConfigurationListResult.
 17497  func (iiclr InterfaceIPConfigurationListResult) MarshalJSON() ([]byte, error) {
 17498  	objectMap := make(map[string]interface{})
 17499  	if iiclr.Value != nil {
 17500  		objectMap["value"] = iiclr.Value
 17501  	}
 17502  	return json.Marshal(objectMap)
 17503  }
 17504  
 17505  // InterfaceIPConfigurationListResultIterator provides access to a complete listing of
 17506  // InterfaceIPConfiguration values.
 17507  type InterfaceIPConfigurationListResultIterator struct {
 17508  	i    int
 17509  	page InterfaceIPConfigurationListResultPage
 17510  }
 17511  
 17512  // NextWithContext advances to the next value.  If there was an error making
 17513  // the request the iterator does not advance and the error is returned.
 17514  func (iter *InterfaceIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
 17515  	if tracing.IsEnabled() {
 17516  		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultIterator.NextWithContext")
 17517  		defer func() {
 17518  			sc := -1
 17519  			if iter.Response().Response.Response != nil {
 17520  				sc = iter.Response().Response.Response.StatusCode
 17521  			}
 17522  			tracing.EndSpan(ctx, sc, err)
 17523  		}()
 17524  	}
 17525  	iter.i++
 17526  	if iter.i < len(iter.page.Values()) {
 17527  		return nil
 17528  	}
 17529  	err = iter.page.NextWithContext(ctx)
 17530  	if err != nil {
 17531  		iter.i--
 17532  		return err
 17533  	}
 17534  	iter.i = 0
 17535  	return nil
 17536  }
 17537  
 17538  // Next advances to the next value.  If there was an error making
 17539  // the request the iterator does not advance and the error is returned.
 17540  // Deprecated: Use NextWithContext() instead.
 17541  func (iter *InterfaceIPConfigurationListResultIterator) Next() error {
 17542  	return iter.NextWithContext(context.Background())
 17543  }
 17544  
 17545  // NotDone returns true if the enumeration should be started or is not yet complete.
 17546  func (iter InterfaceIPConfigurationListResultIterator) NotDone() bool {
 17547  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 17548  }
 17549  
 17550  // Response returns the raw server response from the last page request.
 17551  func (iter InterfaceIPConfigurationListResultIterator) Response() InterfaceIPConfigurationListResult {
 17552  	return iter.page.Response()
 17553  }
 17554  
 17555  // Value returns the current value or a zero-initialized value if the
 17556  // iterator has advanced beyond the end of the collection.
 17557  func (iter InterfaceIPConfigurationListResultIterator) Value() InterfaceIPConfiguration {
 17558  	if !iter.page.NotDone() {
 17559  		return InterfaceIPConfiguration{}
 17560  	}
 17561  	return iter.page.Values()[iter.i]
 17562  }
 17563  
 17564  // Creates a new instance of the InterfaceIPConfigurationListResultIterator type.
 17565  func NewInterfaceIPConfigurationListResultIterator(page InterfaceIPConfigurationListResultPage) InterfaceIPConfigurationListResultIterator {
 17566  	return InterfaceIPConfigurationListResultIterator{page: page}
 17567  }
 17568  
 17569  // IsEmpty returns true if the ListResult contains no values.
 17570  func (iiclr InterfaceIPConfigurationListResult) IsEmpty() bool {
 17571  	return iiclr.Value == nil || len(*iiclr.Value) == 0
 17572  }
 17573  
 17574  // hasNextLink returns true if the NextLink is not empty.
 17575  func (iiclr InterfaceIPConfigurationListResult) hasNextLink() bool {
 17576  	return iiclr.NextLink != nil && len(*iiclr.NextLink) != 0
 17577  }
 17578  
 17579  // interfaceIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
 17580  // It returns nil if no more results exist.
 17581  func (iiclr InterfaceIPConfigurationListResult) interfaceIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
 17582  	if !iiclr.hasNextLink() {
 17583  		return nil, nil
 17584  	}
 17585  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 17586  		autorest.AsJSON(),
 17587  		autorest.AsGet(),
 17588  		autorest.WithBaseURL(to.String(iiclr.NextLink)))
 17589  }
 17590  
 17591  // InterfaceIPConfigurationListResultPage contains a page of InterfaceIPConfiguration values.
 17592  type InterfaceIPConfigurationListResultPage struct {
 17593  	fn    func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)
 17594  	iiclr InterfaceIPConfigurationListResult
 17595  }
 17596  
 17597  // NextWithContext advances to the next page of values.  If there was an error making
 17598  // the request the page does not advance and the error is returned.
 17599  func (page *InterfaceIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
 17600  	if tracing.IsEnabled() {
 17601  		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceIPConfigurationListResultPage.NextWithContext")
 17602  		defer func() {
 17603  			sc := -1
 17604  			if page.Response().Response.Response != nil {
 17605  				sc = page.Response().Response.Response.StatusCode
 17606  			}
 17607  			tracing.EndSpan(ctx, sc, err)
 17608  		}()
 17609  	}
 17610  	for {
 17611  		next, err := page.fn(ctx, page.iiclr)
 17612  		if err != nil {
 17613  			return err
 17614  		}
 17615  		page.iiclr = next
 17616  		if !next.hasNextLink() || !next.IsEmpty() {
 17617  			break
 17618  		}
 17619  	}
 17620  	return nil
 17621  }
 17622  
 17623  // Next advances to the next page of values.  If there was an error making
 17624  // the request the page does not advance and the error is returned.
 17625  // Deprecated: Use NextWithContext() instead.
 17626  func (page *InterfaceIPConfigurationListResultPage) Next() error {
 17627  	return page.NextWithContext(context.Background())
 17628  }
 17629  
 17630  // NotDone returns true if the page enumeration should be started or is not yet complete.
 17631  func (page InterfaceIPConfigurationListResultPage) NotDone() bool {
 17632  	return !page.iiclr.IsEmpty()
 17633  }
 17634  
 17635  // Response returns the raw server response from the last page request.
 17636  func (page InterfaceIPConfigurationListResultPage) Response() InterfaceIPConfigurationListResult {
 17637  	return page.iiclr
 17638  }
 17639  
 17640  // Values returns the slice of values for the current page or nil if there are no values.
 17641  func (page InterfaceIPConfigurationListResultPage) Values() []InterfaceIPConfiguration {
 17642  	if page.iiclr.IsEmpty() {
 17643  		return nil
 17644  	}
 17645  	return *page.iiclr.Value
 17646  }
 17647  
 17648  // Creates a new instance of the InterfaceIPConfigurationListResultPage type.
 17649  func NewInterfaceIPConfigurationListResultPage(cur InterfaceIPConfigurationListResult, getNextPage func(context.Context, InterfaceIPConfigurationListResult) (InterfaceIPConfigurationListResult, error)) InterfaceIPConfigurationListResultPage {
 17650  	return InterfaceIPConfigurationListResultPage{
 17651  		fn:    getNextPage,
 17652  		iiclr: cur,
 17653  	}
 17654  }
 17655  
 17656  // InterfaceIPConfigurationPrivateLinkConnectionProperties privateLinkConnection properties for the network
 17657  // interface.
 17658  type InterfaceIPConfigurationPrivateLinkConnectionProperties struct {
 17659  	// GroupID - READ-ONLY; The group ID for current private link connection.
 17660  	GroupID *string `json:"groupId,omitempty"`
 17661  	// RequiredMemberName - READ-ONLY; The required member name for current private link connection.
 17662  	RequiredMemberName *string `json:"requiredMemberName,omitempty"`
 17663  	// Fqdns - READ-ONLY; List of FQDNs for current private link connection.
 17664  	Fqdns *[]string `json:"fqdns,omitempty"`
 17665  }
 17666  
 17667  // MarshalJSON is the custom marshaler for InterfaceIPConfigurationPrivateLinkConnectionProperties.
 17668  func (iicplcp InterfaceIPConfigurationPrivateLinkConnectionProperties) MarshalJSON() ([]byte, error) {
 17669  	objectMap := make(map[string]interface{})
 17670  	return json.Marshal(objectMap)
 17671  }
 17672  
 17673  // InterfaceIPConfigurationPropertiesFormat properties of IP configuration.
 17674  type InterfaceIPConfigurationPropertiesFormat struct {
 17675  	// VirtualNetworkTaps - The reference to Virtual Network Taps.
 17676  	VirtualNetworkTaps *[]VirtualNetworkTap `json:"virtualNetworkTaps,omitempty"`
 17677  	// ApplicationGatewayBackendAddressPools - The reference to ApplicationGatewayBackendAddressPool resource.
 17678  	ApplicationGatewayBackendAddressPools *[]ApplicationGatewayBackendAddressPool `json:"applicationGatewayBackendAddressPools,omitempty"`
 17679  	// LoadBalancerBackendAddressPools - The reference to LoadBalancerBackendAddressPool resource.
 17680  	LoadBalancerBackendAddressPools *[]BackendAddressPool `json:"loadBalancerBackendAddressPools,omitempty"`
 17681  	// LoadBalancerInboundNatRules - A list of references of LoadBalancerInboundNatRules.
 17682  	LoadBalancerInboundNatRules *[]InboundNatRule `json:"loadBalancerInboundNatRules,omitempty"`
 17683  	// PrivateIPAddress - Private IP address of the IP configuration.
 17684  	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
 17685  	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
 17686  	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
 17687  	// PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6'
 17688  	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
 17689  	// Subnet - Subnet bound to the IP configuration.
 17690  	Subnet *Subnet `json:"subnet,omitempty"`
 17691  	// Primary - Whether this is a primary customer address on the network interface.
 17692  	Primary *bool `json:"primary,omitempty"`
 17693  	// PublicIPAddress - Public IP address bound to the IP configuration.
 17694  	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
 17695  	// ApplicationSecurityGroups - Application security groups in which the IP configuration is included.
 17696  	ApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"applicationSecurityGroups,omitempty"`
 17697  	// ProvisioningState - READ-ONLY; The provisioning state of the network interface IP configuration. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 17698  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 17699  	// PrivateLinkConnectionProperties - READ-ONLY; PrivateLinkConnection properties for the network interface.
 17700  	PrivateLinkConnectionProperties *InterfaceIPConfigurationPrivateLinkConnectionProperties `json:"privateLinkConnectionProperties,omitempty"`
 17701  }
 17702  
 17703  // MarshalJSON is the custom marshaler for InterfaceIPConfigurationPropertiesFormat.
 17704  func (iicpf InterfaceIPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
 17705  	objectMap := make(map[string]interface{})
 17706  	if iicpf.VirtualNetworkTaps != nil {
 17707  		objectMap["virtualNetworkTaps"] = iicpf.VirtualNetworkTaps
 17708  	}
 17709  	if iicpf.ApplicationGatewayBackendAddressPools != nil {
 17710  		objectMap["applicationGatewayBackendAddressPools"] = iicpf.ApplicationGatewayBackendAddressPools
 17711  	}
 17712  	if iicpf.LoadBalancerBackendAddressPools != nil {
 17713  		objectMap["loadBalancerBackendAddressPools"] = iicpf.LoadBalancerBackendAddressPools
 17714  	}
 17715  	if iicpf.LoadBalancerInboundNatRules != nil {
 17716  		objectMap["loadBalancerInboundNatRules"] = iicpf.LoadBalancerInboundNatRules
 17717  	}
 17718  	if iicpf.PrivateIPAddress != nil {
 17719  		objectMap["privateIPAddress"] = iicpf.PrivateIPAddress
 17720  	}
 17721  	if iicpf.PrivateIPAllocationMethod != "" {
 17722  		objectMap["privateIPAllocationMethod"] = iicpf.PrivateIPAllocationMethod
 17723  	}
 17724  	if iicpf.PrivateIPAddressVersion != "" {
 17725  		objectMap["privateIPAddressVersion"] = iicpf.PrivateIPAddressVersion
 17726  	}
 17727  	if iicpf.Subnet != nil {
 17728  		objectMap["subnet"] = iicpf.Subnet
 17729  	}
 17730  	if iicpf.Primary != nil {
 17731  		objectMap["primary"] = iicpf.Primary
 17732  	}
 17733  	if iicpf.PublicIPAddress != nil {
 17734  		objectMap["publicIPAddress"] = iicpf.PublicIPAddress
 17735  	}
 17736  	if iicpf.ApplicationSecurityGroups != nil {
 17737  		objectMap["applicationSecurityGroups"] = iicpf.ApplicationSecurityGroups
 17738  	}
 17739  	return json.Marshal(objectMap)
 17740  }
 17741  
 17742  // InterfaceListResult response for the ListNetworkInterface API service call.
 17743  type InterfaceListResult struct {
 17744  	autorest.Response `json:"-"`
 17745  	// Value - A list of network interfaces in a resource group.
 17746  	Value *[]Interface `json:"value,omitempty"`
 17747  	// NextLink - READ-ONLY; The URL to get the next set of results.
 17748  	NextLink *string `json:"nextLink,omitempty"`
 17749  }
 17750  
 17751  // MarshalJSON is the custom marshaler for InterfaceListResult.
 17752  func (ilr InterfaceListResult) MarshalJSON() ([]byte, error) {
 17753  	objectMap := make(map[string]interface{})
 17754  	if ilr.Value != nil {
 17755  		objectMap["value"] = ilr.Value
 17756  	}
 17757  	return json.Marshal(objectMap)
 17758  }
 17759  
 17760  // InterfaceListResultIterator provides access to a complete listing of Interface values.
 17761  type InterfaceListResultIterator struct {
 17762  	i    int
 17763  	page InterfaceListResultPage
 17764  }
 17765  
 17766  // NextWithContext advances to the next value.  If there was an error making
 17767  // the request the iterator does not advance and the error is returned.
 17768  func (iter *InterfaceListResultIterator) NextWithContext(ctx context.Context) (err error) {
 17769  	if tracing.IsEnabled() {
 17770  		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultIterator.NextWithContext")
 17771  		defer func() {
 17772  			sc := -1
 17773  			if iter.Response().Response.Response != nil {
 17774  				sc = iter.Response().Response.Response.StatusCode
 17775  			}
 17776  			tracing.EndSpan(ctx, sc, err)
 17777  		}()
 17778  	}
 17779  	iter.i++
 17780  	if iter.i < len(iter.page.Values()) {
 17781  		return nil
 17782  	}
 17783  	err = iter.page.NextWithContext(ctx)
 17784  	if err != nil {
 17785  		iter.i--
 17786  		return err
 17787  	}
 17788  	iter.i = 0
 17789  	return nil
 17790  }
 17791  
 17792  // Next advances to the next value.  If there was an error making
 17793  // the request the iterator does not advance and the error is returned.
 17794  // Deprecated: Use NextWithContext() instead.
 17795  func (iter *InterfaceListResultIterator) Next() error {
 17796  	return iter.NextWithContext(context.Background())
 17797  }
 17798  
 17799  // NotDone returns true if the enumeration should be started or is not yet complete.
 17800  func (iter InterfaceListResultIterator) NotDone() bool {
 17801  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 17802  }
 17803  
 17804  // Response returns the raw server response from the last page request.
 17805  func (iter InterfaceListResultIterator) Response() InterfaceListResult {
 17806  	return iter.page.Response()
 17807  }
 17808  
 17809  // Value returns the current value or a zero-initialized value if the
 17810  // iterator has advanced beyond the end of the collection.
 17811  func (iter InterfaceListResultIterator) Value() Interface {
 17812  	if !iter.page.NotDone() {
 17813  		return Interface{}
 17814  	}
 17815  	return iter.page.Values()[iter.i]
 17816  }
 17817  
 17818  // Creates a new instance of the InterfaceListResultIterator type.
 17819  func NewInterfaceListResultIterator(page InterfaceListResultPage) InterfaceListResultIterator {
 17820  	return InterfaceListResultIterator{page: page}
 17821  }
 17822  
 17823  // IsEmpty returns true if the ListResult contains no values.
 17824  func (ilr InterfaceListResult) IsEmpty() bool {
 17825  	return ilr.Value == nil || len(*ilr.Value) == 0
 17826  }
 17827  
 17828  // hasNextLink returns true if the NextLink is not empty.
 17829  func (ilr InterfaceListResult) hasNextLink() bool {
 17830  	return ilr.NextLink != nil && len(*ilr.NextLink) != 0
 17831  }
 17832  
 17833  // interfaceListResultPreparer prepares a request to retrieve the next set of results.
 17834  // It returns nil if no more results exist.
 17835  func (ilr InterfaceListResult) interfaceListResultPreparer(ctx context.Context) (*http.Request, error) {
 17836  	if !ilr.hasNextLink() {
 17837  		return nil, nil
 17838  	}
 17839  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 17840  		autorest.AsJSON(),
 17841  		autorest.AsGet(),
 17842  		autorest.WithBaseURL(to.String(ilr.NextLink)))
 17843  }
 17844  
 17845  // InterfaceListResultPage contains a page of Interface values.
 17846  type InterfaceListResultPage struct {
 17847  	fn  func(context.Context, InterfaceListResult) (InterfaceListResult, error)
 17848  	ilr InterfaceListResult
 17849  }
 17850  
 17851  // NextWithContext advances to the next page of values.  If there was an error making
 17852  // the request the page does not advance and the error is returned.
 17853  func (page *InterfaceListResultPage) NextWithContext(ctx context.Context) (err error) {
 17854  	if tracing.IsEnabled() {
 17855  		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceListResultPage.NextWithContext")
 17856  		defer func() {
 17857  			sc := -1
 17858  			if page.Response().Response.Response != nil {
 17859  				sc = page.Response().Response.Response.StatusCode
 17860  			}
 17861  			tracing.EndSpan(ctx, sc, err)
 17862  		}()
 17863  	}
 17864  	for {
 17865  		next, err := page.fn(ctx, page.ilr)
 17866  		if err != nil {
 17867  			return err
 17868  		}
 17869  		page.ilr = next
 17870  		if !next.hasNextLink() || !next.IsEmpty() {
 17871  			break
 17872  		}
 17873  	}
 17874  	return nil
 17875  }
 17876  
 17877  // Next advances to the next page of values.  If there was an error making
 17878  // the request the page does not advance and the error is returned.
 17879  // Deprecated: Use NextWithContext() instead.
 17880  func (page *InterfaceListResultPage) Next() error {
 17881  	return page.NextWithContext(context.Background())
 17882  }
 17883  
 17884  // NotDone returns true if the page enumeration should be started or is not yet complete.
 17885  func (page InterfaceListResultPage) NotDone() bool {
 17886  	return !page.ilr.IsEmpty()
 17887  }
 17888  
 17889  // Response returns the raw server response from the last page request.
 17890  func (page InterfaceListResultPage) Response() InterfaceListResult {
 17891  	return page.ilr
 17892  }
 17893  
 17894  // Values returns the slice of values for the current page or nil if there are no values.
 17895  func (page InterfaceListResultPage) Values() []Interface {
 17896  	if page.ilr.IsEmpty() {
 17897  		return nil
 17898  	}
 17899  	return *page.ilr.Value
 17900  }
 17901  
 17902  // Creates a new instance of the InterfaceListResultPage type.
 17903  func NewInterfaceListResultPage(cur InterfaceListResult, getNextPage func(context.Context, InterfaceListResult) (InterfaceListResult, error)) InterfaceListResultPage {
 17904  	return InterfaceListResultPage{
 17905  		fn:  getNextPage,
 17906  		ilr: cur,
 17907  	}
 17908  }
 17909  
 17910  // InterfaceLoadBalancerListResult response for list ip configurations API service call.
 17911  type InterfaceLoadBalancerListResult struct {
 17912  	autorest.Response `json:"-"`
 17913  	// Value - A list of load balancers.
 17914  	Value *[]LoadBalancer `json:"value,omitempty"`
 17915  	// NextLink - READ-ONLY; The URL to get the next set of results.
 17916  	NextLink *string `json:"nextLink,omitempty"`
 17917  }
 17918  
 17919  // MarshalJSON is the custom marshaler for InterfaceLoadBalancerListResult.
 17920  func (ilblr InterfaceLoadBalancerListResult) MarshalJSON() ([]byte, error) {
 17921  	objectMap := make(map[string]interface{})
 17922  	if ilblr.Value != nil {
 17923  		objectMap["value"] = ilblr.Value
 17924  	}
 17925  	return json.Marshal(objectMap)
 17926  }
 17927  
 17928  // InterfaceLoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
 17929  type InterfaceLoadBalancerListResultIterator struct {
 17930  	i    int
 17931  	page InterfaceLoadBalancerListResultPage
 17932  }
 17933  
 17934  // NextWithContext advances to the next value.  If there was an error making
 17935  // the request the iterator does not advance and the error is returned.
 17936  func (iter *InterfaceLoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
 17937  	if tracing.IsEnabled() {
 17938  		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultIterator.NextWithContext")
 17939  		defer func() {
 17940  			sc := -1
 17941  			if iter.Response().Response.Response != nil {
 17942  				sc = iter.Response().Response.Response.StatusCode
 17943  			}
 17944  			tracing.EndSpan(ctx, sc, err)
 17945  		}()
 17946  	}
 17947  	iter.i++
 17948  	if iter.i < len(iter.page.Values()) {
 17949  		return nil
 17950  	}
 17951  	err = iter.page.NextWithContext(ctx)
 17952  	if err != nil {
 17953  		iter.i--
 17954  		return err
 17955  	}
 17956  	iter.i = 0
 17957  	return nil
 17958  }
 17959  
 17960  // Next advances to the next value.  If there was an error making
 17961  // the request the iterator does not advance and the error is returned.
 17962  // Deprecated: Use NextWithContext() instead.
 17963  func (iter *InterfaceLoadBalancerListResultIterator) Next() error {
 17964  	return iter.NextWithContext(context.Background())
 17965  }
 17966  
 17967  // NotDone returns true if the enumeration should be started or is not yet complete.
 17968  func (iter InterfaceLoadBalancerListResultIterator) NotDone() bool {
 17969  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 17970  }
 17971  
 17972  // Response returns the raw server response from the last page request.
 17973  func (iter InterfaceLoadBalancerListResultIterator) Response() InterfaceLoadBalancerListResult {
 17974  	return iter.page.Response()
 17975  }
 17976  
 17977  // Value returns the current value or a zero-initialized value if the
 17978  // iterator has advanced beyond the end of the collection.
 17979  func (iter InterfaceLoadBalancerListResultIterator) Value() LoadBalancer {
 17980  	if !iter.page.NotDone() {
 17981  		return LoadBalancer{}
 17982  	}
 17983  	return iter.page.Values()[iter.i]
 17984  }
 17985  
 17986  // Creates a new instance of the InterfaceLoadBalancerListResultIterator type.
 17987  func NewInterfaceLoadBalancerListResultIterator(page InterfaceLoadBalancerListResultPage) InterfaceLoadBalancerListResultIterator {
 17988  	return InterfaceLoadBalancerListResultIterator{page: page}
 17989  }
 17990  
 17991  // IsEmpty returns true if the ListResult contains no values.
 17992  func (ilblr InterfaceLoadBalancerListResult) IsEmpty() bool {
 17993  	return ilblr.Value == nil || len(*ilblr.Value) == 0
 17994  }
 17995  
 17996  // hasNextLink returns true if the NextLink is not empty.
 17997  func (ilblr InterfaceLoadBalancerListResult) hasNextLink() bool {
 17998  	return ilblr.NextLink != nil && len(*ilblr.NextLink) != 0
 17999  }
 18000  
 18001  // interfaceLoadBalancerListResultPreparer prepares a request to retrieve the next set of results.
 18002  // It returns nil if no more results exist.
 18003  func (ilblr InterfaceLoadBalancerListResult) interfaceLoadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
 18004  	if !ilblr.hasNextLink() {
 18005  		return nil, nil
 18006  	}
 18007  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 18008  		autorest.AsJSON(),
 18009  		autorest.AsGet(),
 18010  		autorest.WithBaseURL(to.String(ilblr.NextLink)))
 18011  }
 18012  
 18013  // InterfaceLoadBalancerListResultPage contains a page of LoadBalancer values.
 18014  type InterfaceLoadBalancerListResultPage struct {
 18015  	fn    func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)
 18016  	ilblr InterfaceLoadBalancerListResult
 18017  }
 18018  
 18019  // NextWithContext advances to the next page of values.  If there was an error making
 18020  // the request the page does not advance and the error is returned.
 18021  func (page *InterfaceLoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
 18022  	if tracing.IsEnabled() {
 18023  		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceLoadBalancerListResultPage.NextWithContext")
 18024  		defer func() {
 18025  			sc := -1
 18026  			if page.Response().Response.Response != nil {
 18027  				sc = page.Response().Response.Response.StatusCode
 18028  			}
 18029  			tracing.EndSpan(ctx, sc, err)
 18030  		}()
 18031  	}
 18032  	for {
 18033  		next, err := page.fn(ctx, page.ilblr)
 18034  		if err != nil {
 18035  			return err
 18036  		}
 18037  		page.ilblr = next
 18038  		if !next.hasNextLink() || !next.IsEmpty() {
 18039  			break
 18040  		}
 18041  	}
 18042  	return nil
 18043  }
 18044  
 18045  // Next advances to the next page of values.  If there was an error making
 18046  // the request the page does not advance and the error is returned.
 18047  // Deprecated: Use NextWithContext() instead.
 18048  func (page *InterfaceLoadBalancerListResultPage) Next() error {
 18049  	return page.NextWithContext(context.Background())
 18050  }
 18051  
 18052  // NotDone returns true if the page enumeration should be started or is not yet complete.
 18053  func (page InterfaceLoadBalancerListResultPage) NotDone() bool {
 18054  	return !page.ilblr.IsEmpty()
 18055  }
 18056  
 18057  // Response returns the raw server response from the last page request.
 18058  func (page InterfaceLoadBalancerListResultPage) Response() InterfaceLoadBalancerListResult {
 18059  	return page.ilblr
 18060  }
 18061  
 18062  // Values returns the slice of values for the current page or nil if there are no values.
 18063  func (page InterfaceLoadBalancerListResultPage) Values() []LoadBalancer {
 18064  	if page.ilblr.IsEmpty() {
 18065  		return nil
 18066  	}
 18067  	return *page.ilblr.Value
 18068  }
 18069  
 18070  // Creates a new instance of the InterfaceLoadBalancerListResultPage type.
 18071  func NewInterfaceLoadBalancerListResultPage(cur InterfaceLoadBalancerListResult, getNextPage func(context.Context, InterfaceLoadBalancerListResult) (InterfaceLoadBalancerListResult, error)) InterfaceLoadBalancerListResultPage {
 18072  	return InterfaceLoadBalancerListResultPage{
 18073  		fn:    getNextPage,
 18074  		ilblr: cur,
 18075  	}
 18076  }
 18077  
 18078  // InterfacePropertiesFormat networkInterface properties.
 18079  type InterfacePropertiesFormat struct {
 18080  	// VirtualMachine - READ-ONLY; The reference to a virtual machine.
 18081  	VirtualMachine *SubResource `json:"virtualMachine,omitempty"`
 18082  	// NetworkSecurityGroup - The reference to the NetworkSecurityGroup resource.
 18083  	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
 18084  	// PrivateEndpoint - READ-ONLY; A reference to the private endpoint to which the network interface is linked.
 18085  	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
 18086  	// IPConfigurations - A list of IPConfigurations of the network interface.
 18087  	IPConfigurations *[]InterfaceIPConfiguration `json:"ipConfigurations,omitempty"`
 18088  	// TapConfigurations - READ-ONLY; A list of TapConfigurations of the network interface.
 18089  	TapConfigurations *[]InterfaceTapConfiguration `json:"tapConfigurations,omitempty"`
 18090  	// DNSSettings - The DNS settings in network interface.
 18091  	DNSSettings *InterfaceDNSSettings `json:"dnsSettings,omitempty"`
 18092  	// MacAddress - READ-ONLY; The MAC address of the network interface.
 18093  	MacAddress *string `json:"macAddress,omitempty"`
 18094  	// Primary - READ-ONLY; Whether this is a primary network interface on a virtual machine.
 18095  	Primary *bool `json:"primary,omitempty"`
 18096  	// EnableAcceleratedNetworking - If the network interface is accelerated networking enabled.
 18097  	EnableAcceleratedNetworking *bool `json:"enableAcceleratedNetworking,omitempty"`
 18098  	// EnableIPForwarding - Indicates whether IP forwarding is enabled on this network interface.
 18099  	EnableIPForwarding *bool `json:"enableIPForwarding,omitempty"`
 18100  	// HostedWorkloads - READ-ONLY; A list of references to linked BareMetal resources.
 18101  	HostedWorkloads *[]string `json:"hostedWorkloads,omitempty"`
 18102  	// ResourceGUID - READ-ONLY; The resource GUID property of the network interface resource.
 18103  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 18104  	// ProvisioningState - READ-ONLY; The provisioning state of the network interface resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 18105  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 18106  }
 18107  
 18108  // MarshalJSON is the custom marshaler for InterfacePropertiesFormat.
 18109  func (ipf InterfacePropertiesFormat) MarshalJSON() ([]byte, error) {
 18110  	objectMap := make(map[string]interface{})
 18111  	if ipf.NetworkSecurityGroup != nil {
 18112  		objectMap["networkSecurityGroup"] = ipf.NetworkSecurityGroup
 18113  	}
 18114  	if ipf.IPConfigurations != nil {
 18115  		objectMap["ipConfigurations"] = ipf.IPConfigurations
 18116  	}
 18117  	if ipf.DNSSettings != nil {
 18118  		objectMap["dnsSettings"] = ipf.DNSSettings
 18119  	}
 18120  	if ipf.EnableAcceleratedNetworking != nil {
 18121  		objectMap["enableAcceleratedNetworking"] = ipf.EnableAcceleratedNetworking
 18122  	}
 18123  	if ipf.EnableIPForwarding != nil {
 18124  		objectMap["enableIPForwarding"] = ipf.EnableIPForwarding
 18125  	}
 18126  	return json.Marshal(objectMap)
 18127  }
 18128  
 18129  // InterfacesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 18130  // long-running operation.
 18131  type InterfacesCreateOrUpdateFuture struct {
 18132  	azure.FutureAPI
 18133  	// Result returns the result of the asynchronous operation.
 18134  	// If the operation has not completed it will return an error.
 18135  	Result func(InterfacesClient) (Interface, error)
 18136  }
 18137  
 18138  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 18139  func (future *InterfacesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 18140  	var azFuture azure.Future
 18141  	if err := json.Unmarshal(body, &azFuture); err != nil {
 18142  		return err
 18143  	}
 18144  	future.FutureAPI = &azFuture
 18145  	future.Result = future.result
 18146  	return nil
 18147  }
 18148  
 18149  // result is the default implementation for InterfacesCreateOrUpdateFuture.Result.
 18150  func (future *InterfacesCreateOrUpdateFuture) result(client InterfacesClient) (i Interface, err error) {
 18151  	var done bool
 18152  	done, err = future.DoneWithContext(context.Background(), client)
 18153  	if err != nil {
 18154  		err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 18155  		return
 18156  	}
 18157  	if !done {
 18158  		i.Response.Response = future.Response()
 18159  		err = azure.NewAsyncOpIncompleteError("network.InterfacesCreateOrUpdateFuture")
 18160  		return
 18161  	}
 18162  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 18163  	if i.Response.Response, err = future.GetResult(sender); err == nil && i.Response.Response.StatusCode != http.StatusNoContent {
 18164  		i, err = client.CreateOrUpdateResponder(i.Response.Response)
 18165  		if err != nil {
 18166  			err = autorest.NewErrorWithError(err, "network.InterfacesCreateOrUpdateFuture", "Result", i.Response.Response, "Failure responding to request")
 18167  		}
 18168  	}
 18169  	return
 18170  }
 18171  
 18172  // InterfacesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 18173  // operation.
 18174  type InterfacesDeleteFuture struct {
 18175  	azure.FutureAPI
 18176  	// Result returns the result of the asynchronous operation.
 18177  	// If the operation has not completed it will return an error.
 18178  	Result func(InterfacesClient) (autorest.Response, error)
 18179  }
 18180  
 18181  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 18182  func (future *InterfacesDeleteFuture) UnmarshalJSON(body []byte) error {
 18183  	var azFuture azure.Future
 18184  	if err := json.Unmarshal(body, &azFuture); err != nil {
 18185  		return err
 18186  	}
 18187  	future.FutureAPI = &azFuture
 18188  	future.Result = future.result
 18189  	return nil
 18190  }
 18191  
 18192  // result is the default implementation for InterfacesDeleteFuture.Result.
 18193  func (future *InterfacesDeleteFuture) result(client InterfacesClient) (ar autorest.Response, err error) {
 18194  	var done bool
 18195  	done, err = future.DoneWithContext(context.Background(), client)
 18196  	if err != nil {
 18197  		err = autorest.NewErrorWithError(err, "network.InterfacesDeleteFuture", "Result", future.Response(), "Polling failure")
 18198  		return
 18199  	}
 18200  	if !done {
 18201  		ar.Response = future.Response()
 18202  		err = azure.NewAsyncOpIncompleteError("network.InterfacesDeleteFuture")
 18203  		return
 18204  	}
 18205  	ar.Response = future.Response()
 18206  	return
 18207  }
 18208  
 18209  // InterfacesGetEffectiveRouteTableFuture an abstraction for monitoring and retrieving the results of a
 18210  // long-running operation.
 18211  type InterfacesGetEffectiveRouteTableFuture struct {
 18212  	azure.FutureAPI
 18213  	// Result returns the result of the asynchronous operation.
 18214  	// If the operation has not completed it will return an error.
 18215  	Result func(InterfacesClient) (EffectiveRouteListResult, error)
 18216  }
 18217  
 18218  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 18219  func (future *InterfacesGetEffectiveRouteTableFuture) UnmarshalJSON(body []byte) error {
 18220  	var azFuture azure.Future
 18221  	if err := json.Unmarshal(body, &azFuture); err != nil {
 18222  		return err
 18223  	}
 18224  	future.FutureAPI = &azFuture
 18225  	future.Result = future.result
 18226  	return nil
 18227  }
 18228  
 18229  // result is the default implementation for InterfacesGetEffectiveRouteTableFuture.Result.
 18230  func (future *InterfacesGetEffectiveRouteTableFuture) result(client InterfacesClient) (erlr EffectiveRouteListResult, err error) {
 18231  	var done bool
 18232  	done, err = future.DoneWithContext(context.Background(), client)
 18233  	if err != nil {
 18234  		err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", future.Response(), "Polling failure")
 18235  		return
 18236  	}
 18237  	if !done {
 18238  		erlr.Response.Response = future.Response()
 18239  		err = azure.NewAsyncOpIncompleteError("network.InterfacesGetEffectiveRouteTableFuture")
 18240  		return
 18241  	}
 18242  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 18243  	if erlr.Response.Response, err = future.GetResult(sender); err == nil && erlr.Response.Response.StatusCode != http.StatusNoContent {
 18244  		erlr, err = client.GetEffectiveRouteTableResponder(erlr.Response.Response)
 18245  		if err != nil {
 18246  			err = autorest.NewErrorWithError(err, "network.InterfacesGetEffectiveRouteTableFuture", "Result", erlr.Response.Response, "Failure responding to request")
 18247  		}
 18248  	}
 18249  	return
 18250  }
 18251  
 18252  // InterfacesListEffectiveNetworkSecurityGroupsFuture an abstraction for monitoring and retrieving the
 18253  // results of a long-running operation.
 18254  type InterfacesListEffectiveNetworkSecurityGroupsFuture struct {
 18255  	azure.FutureAPI
 18256  	// Result returns the result of the asynchronous operation.
 18257  	// If the operation has not completed it will return an error.
 18258  	Result func(InterfacesClient) (EffectiveNetworkSecurityGroupListResult, error)
 18259  }
 18260  
 18261  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 18262  func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) UnmarshalJSON(body []byte) error {
 18263  	var azFuture azure.Future
 18264  	if err := json.Unmarshal(body, &azFuture); err != nil {
 18265  		return err
 18266  	}
 18267  	future.FutureAPI = &azFuture
 18268  	future.Result = future.result
 18269  	return nil
 18270  }
 18271  
 18272  // result is the default implementation for InterfacesListEffectiveNetworkSecurityGroupsFuture.Result.
 18273  func (future *InterfacesListEffectiveNetworkSecurityGroupsFuture) result(client InterfacesClient) (ensglr EffectiveNetworkSecurityGroupListResult, err error) {
 18274  	var done bool
 18275  	done, err = future.DoneWithContext(context.Background(), client)
 18276  	if err != nil {
 18277  		err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", future.Response(), "Polling failure")
 18278  		return
 18279  	}
 18280  	if !done {
 18281  		ensglr.Response.Response = future.Response()
 18282  		err = azure.NewAsyncOpIncompleteError("network.InterfacesListEffectiveNetworkSecurityGroupsFuture")
 18283  		return
 18284  	}
 18285  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 18286  	if ensglr.Response.Response, err = future.GetResult(sender); err == nil && ensglr.Response.Response.StatusCode != http.StatusNoContent {
 18287  		ensglr, err = client.ListEffectiveNetworkSecurityGroupsResponder(ensglr.Response.Response)
 18288  		if err != nil {
 18289  			err = autorest.NewErrorWithError(err, "network.InterfacesListEffectiveNetworkSecurityGroupsFuture", "Result", ensglr.Response.Response, "Failure responding to request")
 18290  		}
 18291  	}
 18292  	return
 18293  }
 18294  
 18295  // InterfaceTapConfiguration tap configuration in a Network Interface.
 18296  type InterfaceTapConfiguration struct {
 18297  	autorest.Response `json:"-"`
 18298  	// InterfaceTapConfigurationPropertiesFormat - Properties of the Virtual Network Tap configuration.
 18299  	*InterfaceTapConfigurationPropertiesFormat `json:"properties,omitempty"`
 18300  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 18301  	Name *string `json:"name,omitempty"`
 18302  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 18303  	Etag *string `json:"etag,omitempty"`
 18304  	// Type - READ-ONLY; Sub Resource type.
 18305  	Type *string `json:"type,omitempty"`
 18306  	// ID - Resource ID.
 18307  	ID *string `json:"id,omitempty"`
 18308  }
 18309  
 18310  // MarshalJSON is the custom marshaler for InterfaceTapConfiguration.
 18311  func (itc InterfaceTapConfiguration) MarshalJSON() ([]byte, error) {
 18312  	objectMap := make(map[string]interface{})
 18313  	if itc.InterfaceTapConfigurationPropertiesFormat != nil {
 18314  		objectMap["properties"] = itc.InterfaceTapConfigurationPropertiesFormat
 18315  	}
 18316  	if itc.Name != nil {
 18317  		objectMap["name"] = itc.Name
 18318  	}
 18319  	if itc.ID != nil {
 18320  		objectMap["id"] = itc.ID
 18321  	}
 18322  	return json.Marshal(objectMap)
 18323  }
 18324  
 18325  // UnmarshalJSON is the custom unmarshaler for InterfaceTapConfiguration struct.
 18326  func (itc *InterfaceTapConfiguration) UnmarshalJSON(body []byte) error {
 18327  	var m map[string]*json.RawMessage
 18328  	err := json.Unmarshal(body, &m)
 18329  	if err != nil {
 18330  		return err
 18331  	}
 18332  	for k, v := range m {
 18333  		switch k {
 18334  		case "properties":
 18335  			if v != nil {
 18336  				var interfaceTapConfigurationPropertiesFormat InterfaceTapConfigurationPropertiesFormat
 18337  				err = json.Unmarshal(*v, &interfaceTapConfigurationPropertiesFormat)
 18338  				if err != nil {
 18339  					return err
 18340  				}
 18341  				itc.InterfaceTapConfigurationPropertiesFormat = &interfaceTapConfigurationPropertiesFormat
 18342  			}
 18343  		case "name":
 18344  			if v != nil {
 18345  				var name string
 18346  				err = json.Unmarshal(*v, &name)
 18347  				if err != nil {
 18348  					return err
 18349  				}
 18350  				itc.Name = &name
 18351  			}
 18352  		case "etag":
 18353  			if v != nil {
 18354  				var etag string
 18355  				err = json.Unmarshal(*v, &etag)
 18356  				if err != nil {
 18357  					return err
 18358  				}
 18359  				itc.Etag = &etag
 18360  			}
 18361  		case "type":
 18362  			if v != nil {
 18363  				var typeVar string
 18364  				err = json.Unmarshal(*v, &typeVar)
 18365  				if err != nil {
 18366  					return err
 18367  				}
 18368  				itc.Type = &typeVar
 18369  			}
 18370  		case "id":
 18371  			if v != nil {
 18372  				var ID string
 18373  				err = json.Unmarshal(*v, &ID)
 18374  				if err != nil {
 18375  					return err
 18376  				}
 18377  				itc.ID = &ID
 18378  			}
 18379  		}
 18380  	}
 18381  
 18382  	return nil
 18383  }
 18384  
 18385  // InterfaceTapConfigurationListResult response for list tap configurations API service call.
 18386  type InterfaceTapConfigurationListResult struct {
 18387  	autorest.Response `json:"-"`
 18388  	// Value - A list of tap configurations.
 18389  	Value *[]InterfaceTapConfiguration `json:"value,omitempty"`
 18390  	// NextLink - READ-ONLY; The URL to get the next set of results.
 18391  	NextLink *string `json:"nextLink,omitempty"`
 18392  }
 18393  
 18394  // MarshalJSON is the custom marshaler for InterfaceTapConfigurationListResult.
 18395  func (itclr InterfaceTapConfigurationListResult) MarshalJSON() ([]byte, error) {
 18396  	objectMap := make(map[string]interface{})
 18397  	if itclr.Value != nil {
 18398  		objectMap["value"] = itclr.Value
 18399  	}
 18400  	return json.Marshal(objectMap)
 18401  }
 18402  
 18403  // InterfaceTapConfigurationListResultIterator provides access to a complete listing of
 18404  // InterfaceTapConfiguration values.
 18405  type InterfaceTapConfigurationListResultIterator struct {
 18406  	i    int
 18407  	page InterfaceTapConfigurationListResultPage
 18408  }
 18409  
 18410  // NextWithContext advances to the next value.  If there was an error making
 18411  // the request the iterator does not advance and the error is returned.
 18412  func (iter *InterfaceTapConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
 18413  	if tracing.IsEnabled() {
 18414  		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultIterator.NextWithContext")
 18415  		defer func() {
 18416  			sc := -1
 18417  			if iter.Response().Response.Response != nil {
 18418  				sc = iter.Response().Response.Response.StatusCode
 18419  			}
 18420  			tracing.EndSpan(ctx, sc, err)
 18421  		}()
 18422  	}
 18423  	iter.i++
 18424  	if iter.i < len(iter.page.Values()) {
 18425  		return nil
 18426  	}
 18427  	err = iter.page.NextWithContext(ctx)
 18428  	if err != nil {
 18429  		iter.i--
 18430  		return err
 18431  	}
 18432  	iter.i = 0
 18433  	return nil
 18434  }
 18435  
 18436  // Next advances to the next value.  If there was an error making
 18437  // the request the iterator does not advance and the error is returned.
 18438  // Deprecated: Use NextWithContext() instead.
 18439  func (iter *InterfaceTapConfigurationListResultIterator) Next() error {
 18440  	return iter.NextWithContext(context.Background())
 18441  }
 18442  
 18443  // NotDone returns true if the enumeration should be started or is not yet complete.
 18444  func (iter InterfaceTapConfigurationListResultIterator) NotDone() bool {
 18445  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 18446  }
 18447  
 18448  // Response returns the raw server response from the last page request.
 18449  func (iter InterfaceTapConfigurationListResultIterator) Response() InterfaceTapConfigurationListResult {
 18450  	return iter.page.Response()
 18451  }
 18452  
 18453  // Value returns the current value or a zero-initialized value if the
 18454  // iterator has advanced beyond the end of the collection.
 18455  func (iter InterfaceTapConfigurationListResultIterator) Value() InterfaceTapConfiguration {
 18456  	if !iter.page.NotDone() {
 18457  		return InterfaceTapConfiguration{}
 18458  	}
 18459  	return iter.page.Values()[iter.i]
 18460  }
 18461  
 18462  // Creates a new instance of the InterfaceTapConfigurationListResultIterator type.
 18463  func NewInterfaceTapConfigurationListResultIterator(page InterfaceTapConfigurationListResultPage) InterfaceTapConfigurationListResultIterator {
 18464  	return InterfaceTapConfigurationListResultIterator{page: page}
 18465  }
 18466  
 18467  // IsEmpty returns true if the ListResult contains no values.
 18468  func (itclr InterfaceTapConfigurationListResult) IsEmpty() bool {
 18469  	return itclr.Value == nil || len(*itclr.Value) == 0
 18470  }
 18471  
 18472  // hasNextLink returns true if the NextLink is not empty.
 18473  func (itclr InterfaceTapConfigurationListResult) hasNextLink() bool {
 18474  	return itclr.NextLink != nil && len(*itclr.NextLink) != 0
 18475  }
 18476  
 18477  // interfaceTapConfigurationListResultPreparer prepares a request to retrieve the next set of results.
 18478  // It returns nil if no more results exist.
 18479  func (itclr InterfaceTapConfigurationListResult) interfaceTapConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
 18480  	if !itclr.hasNextLink() {
 18481  		return nil, nil
 18482  	}
 18483  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 18484  		autorest.AsJSON(),
 18485  		autorest.AsGet(),
 18486  		autorest.WithBaseURL(to.String(itclr.NextLink)))
 18487  }
 18488  
 18489  // InterfaceTapConfigurationListResultPage contains a page of InterfaceTapConfiguration values.
 18490  type InterfaceTapConfigurationListResultPage struct {
 18491  	fn    func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)
 18492  	itclr InterfaceTapConfigurationListResult
 18493  }
 18494  
 18495  // NextWithContext advances to the next page of values.  If there was an error making
 18496  // the request the page does not advance and the error is returned.
 18497  func (page *InterfaceTapConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
 18498  	if tracing.IsEnabled() {
 18499  		ctx = tracing.StartSpan(ctx, fqdn+"/InterfaceTapConfigurationListResultPage.NextWithContext")
 18500  		defer func() {
 18501  			sc := -1
 18502  			if page.Response().Response.Response != nil {
 18503  				sc = page.Response().Response.Response.StatusCode
 18504  			}
 18505  			tracing.EndSpan(ctx, sc, err)
 18506  		}()
 18507  	}
 18508  	for {
 18509  		next, err := page.fn(ctx, page.itclr)
 18510  		if err != nil {
 18511  			return err
 18512  		}
 18513  		page.itclr = next
 18514  		if !next.hasNextLink() || !next.IsEmpty() {
 18515  			break
 18516  		}
 18517  	}
 18518  	return nil
 18519  }
 18520  
 18521  // Next advances to the next page of values.  If there was an error making
 18522  // the request the page does not advance and the error is returned.
 18523  // Deprecated: Use NextWithContext() instead.
 18524  func (page *InterfaceTapConfigurationListResultPage) Next() error {
 18525  	return page.NextWithContext(context.Background())
 18526  }
 18527  
 18528  // NotDone returns true if the page enumeration should be started or is not yet complete.
 18529  func (page InterfaceTapConfigurationListResultPage) NotDone() bool {
 18530  	return !page.itclr.IsEmpty()
 18531  }
 18532  
 18533  // Response returns the raw server response from the last page request.
 18534  func (page InterfaceTapConfigurationListResultPage) Response() InterfaceTapConfigurationListResult {
 18535  	return page.itclr
 18536  }
 18537  
 18538  // Values returns the slice of values for the current page or nil if there are no values.
 18539  func (page InterfaceTapConfigurationListResultPage) Values() []InterfaceTapConfiguration {
 18540  	if page.itclr.IsEmpty() {
 18541  		return nil
 18542  	}
 18543  	return *page.itclr.Value
 18544  }
 18545  
 18546  // Creates a new instance of the InterfaceTapConfigurationListResultPage type.
 18547  func NewInterfaceTapConfigurationListResultPage(cur InterfaceTapConfigurationListResult, getNextPage func(context.Context, InterfaceTapConfigurationListResult) (InterfaceTapConfigurationListResult, error)) InterfaceTapConfigurationListResultPage {
 18548  	return InterfaceTapConfigurationListResultPage{
 18549  		fn:    getNextPage,
 18550  		itclr: cur,
 18551  	}
 18552  }
 18553  
 18554  // InterfaceTapConfigurationPropertiesFormat properties of Virtual Network Tap configuration.
 18555  type InterfaceTapConfigurationPropertiesFormat struct {
 18556  	// VirtualNetworkTap - The reference to the Virtual Network Tap resource.
 18557  	VirtualNetworkTap *VirtualNetworkTap `json:"virtualNetworkTap,omitempty"`
 18558  	// ProvisioningState - READ-ONLY; The provisioning state of the network interface tap configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 18559  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 18560  }
 18561  
 18562  // MarshalJSON is the custom marshaler for InterfaceTapConfigurationPropertiesFormat.
 18563  func (itcpf InterfaceTapConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
 18564  	objectMap := make(map[string]interface{})
 18565  	if itcpf.VirtualNetworkTap != nil {
 18566  		objectMap["virtualNetworkTap"] = itcpf.VirtualNetworkTap
 18567  	}
 18568  	return json.Marshal(objectMap)
 18569  }
 18570  
 18571  // InterfaceTapConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results
 18572  // of a long-running operation.
 18573  type InterfaceTapConfigurationsCreateOrUpdateFuture struct {
 18574  	azure.FutureAPI
 18575  	// Result returns the result of the asynchronous operation.
 18576  	// If the operation has not completed it will return an error.
 18577  	Result func(InterfaceTapConfigurationsClient) (InterfaceTapConfiguration, error)
 18578  }
 18579  
 18580  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 18581  func (future *InterfaceTapConfigurationsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 18582  	var azFuture azure.Future
 18583  	if err := json.Unmarshal(body, &azFuture); err != nil {
 18584  		return err
 18585  	}
 18586  	future.FutureAPI = &azFuture
 18587  	future.Result = future.result
 18588  	return nil
 18589  }
 18590  
 18591  // result is the default implementation for InterfaceTapConfigurationsCreateOrUpdateFuture.Result.
 18592  func (future *InterfaceTapConfigurationsCreateOrUpdateFuture) result(client InterfaceTapConfigurationsClient) (itc InterfaceTapConfiguration, err error) {
 18593  	var done bool
 18594  	done, err = future.DoneWithContext(context.Background(), client)
 18595  	if err != nil {
 18596  		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 18597  		return
 18598  	}
 18599  	if !done {
 18600  		itc.Response.Response = future.Response()
 18601  		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsCreateOrUpdateFuture")
 18602  		return
 18603  	}
 18604  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 18605  	if itc.Response.Response, err = future.GetResult(sender); err == nil && itc.Response.Response.StatusCode != http.StatusNoContent {
 18606  		itc, err = client.CreateOrUpdateResponder(itc.Response.Response)
 18607  		if err != nil {
 18608  			err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsCreateOrUpdateFuture", "Result", itc.Response.Response, "Failure responding to request")
 18609  		}
 18610  	}
 18611  	return
 18612  }
 18613  
 18614  // InterfaceTapConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
 18615  // long-running operation.
 18616  type InterfaceTapConfigurationsDeleteFuture struct {
 18617  	azure.FutureAPI
 18618  	// Result returns the result of the asynchronous operation.
 18619  	// If the operation has not completed it will return an error.
 18620  	Result func(InterfaceTapConfigurationsClient) (autorest.Response, error)
 18621  }
 18622  
 18623  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 18624  func (future *InterfaceTapConfigurationsDeleteFuture) UnmarshalJSON(body []byte) error {
 18625  	var azFuture azure.Future
 18626  	if err := json.Unmarshal(body, &azFuture); err != nil {
 18627  		return err
 18628  	}
 18629  	future.FutureAPI = &azFuture
 18630  	future.Result = future.result
 18631  	return nil
 18632  }
 18633  
 18634  // result is the default implementation for InterfaceTapConfigurationsDeleteFuture.Result.
 18635  func (future *InterfaceTapConfigurationsDeleteFuture) result(client InterfaceTapConfigurationsClient) (ar autorest.Response, err error) {
 18636  	var done bool
 18637  	done, err = future.DoneWithContext(context.Background(), client)
 18638  	if err != nil {
 18639  		err = autorest.NewErrorWithError(err, "network.InterfaceTapConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
 18640  		return
 18641  	}
 18642  	if !done {
 18643  		ar.Response = future.Response()
 18644  		err = azure.NewAsyncOpIncompleteError("network.InterfaceTapConfigurationsDeleteFuture")
 18645  		return
 18646  	}
 18647  	ar.Response = future.Response()
 18648  	return
 18649  }
 18650  
 18651  // IPAddressAvailabilityResult response for CheckIPAddressAvailability API service call.
 18652  type IPAddressAvailabilityResult struct {
 18653  	autorest.Response `json:"-"`
 18654  	// Available - Private IP address availability.
 18655  	Available *bool `json:"available,omitempty"`
 18656  	// AvailableIPAddresses - Contains other available private IP addresses if the asked for address is taken.
 18657  	AvailableIPAddresses *[]string `json:"availableIPAddresses,omitempty"`
 18658  }
 18659  
 18660  // IPAllocation ipAllocation resource.
 18661  type IPAllocation struct {
 18662  	autorest.Response `json:"-"`
 18663  	// IPAllocationPropertiesFormat - Properties of the IpAllocation.
 18664  	*IPAllocationPropertiesFormat `json:"properties,omitempty"`
 18665  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 18666  	Etag *string `json:"etag,omitempty"`
 18667  	// ID - Resource ID.
 18668  	ID *string `json:"id,omitempty"`
 18669  	// Name - READ-ONLY; Resource name.
 18670  	Name *string `json:"name,omitempty"`
 18671  	// Type - READ-ONLY; Resource type.
 18672  	Type *string `json:"type,omitempty"`
 18673  	// Location - Resource location.
 18674  	Location *string `json:"location,omitempty"`
 18675  	// Tags - Resource tags.
 18676  	Tags map[string]*string `json:"tags"`
 18677  }
 18678  
 18679  // MarshalJSON is the custom marshaler for IPAllocation.
 18680  func (ia IPAllocation) MarshalJSON() ([]byte, error) {
 18681  	objectMap := make(map[string]interface{})
 18682  	if ia.IPAllocationPropertiesFormat != nil {
 18683  		objectMap["properties"] = ia.IPAllocationPropertiesFormat
 18684  	}
 18685  	if ia.ID != nil {
 18686  		objectMap["id"] = ia.ID
 18687  	}
 18688  	if ia.Location != nil {
 18689  		objectMap["location"] = ia.Location
 18690  	}
 18691  	if ia.Tags != nil {
 18692  		objectMap["tags"] = ia.Tags
 18693  	}
 18694  	return json.Marshal(objectMap)
 18695  }
 18696  
 18697  // UnmarshalJSON is the custom unmarshaler for IPAllocation struct.
 18698  func (ia *IPAllocation) UnmarshalJSON(body []byte) error {
 18699  	var m map[string]*json.RawMessage
 18700  	err := json.Unmarshal(body, &m)
 18701  	if err != nil {
 18702  		return err
 18703  	}
 18704  	for k, v := range m {
 18705  		switch k {
 18706  		case "properties":
 18707  			if v != nil {
 18708  				var IPAllocationPropertiesFormat IPAllocationPropertiesFormat
 18709  				err = json.Unmarshal(*v, &IPAllocationPropertiesFormat)
 18710  				if err != nil {
 18711  					return err
 18712  				}
 18713  				ia.IPAllocationPropertiesFormat = &IPAllocationPropertiesFormat
 18714  			}
 18715  		case "etag":
 18716  			if v != nil {
 18717  				var etag string
 18718  				err = json.Unmarshal(*v, &etag)
 18719  				if err != nil {
 18720  					return err
 18721  				}
 18722  				ia.Etag = &etag
 18723  			}
 18724  		case "id":
 18725  			if v != nil {
 18726  				var ID string
 18727  				err = json.Unmarshal(*v, &ID)
 18728  				if err != nil {
 18729  					return err
 18730  				}
 18731  				ia.ID = &ID
 18732  			}
 18733  		case "name":
 18734  			if v != nil {
 18735  				var name string
 18736  				err = json.Unmarshal(*v, &name)
 18737  				if err != nil {
 18738  					return err
 18739  				}
 18740  				ia.Name = &name
 18741  			}
 18742  		case "type":
 18743  			if v != nil {
 18744  				var typeVar string
 18745  				err = json.Unmarshal(*v, &typeVar)
 18746  				if err != nil {
 18747  					return err
 18748  				}
 18749  				ia.Type = &typeVar
 18750  			}
 18751  		case "location":
 18752  			if v != nil {
 18753  				var location string
 18754  				err = json.Unmarshal(*v, &location)
 18755  				if err != nil {
 18756  					return err
 18757  				}
 18758  				ia.Location = &location
 18759  			}
 18760  		case "tags":
 18761  			if v != nil {
 18762  				var tags map[string]*string
 18763  				err = json.Unmarshal(*v, &tags)
 18764  				if err != nil {
 18765  					return err
 18766  				}
 18767  				ia.Tags = tags
 18768  			}
 18769  		}
 18770  	}
 18771  
 18772  	return nil
 18773  }
 18774  
 18775  // IPAllocationListResult response for the ListIpAllocations API service call.
 18776  type IPAllocationListResult struct {
 18777  	autorest.Response `json:"-"`
 18778  	// Value - A list of IpAllocation resources.
 18779  	Value *[]IPAllocation `json:"value,omitempty"`
 18780  	// NextLink - The URL to get the next set of results.
 18781  	NextLink *string `json:"nextLink,omitempty"`
 18782  }
 18783  
 18784  // IPAllocationListResultIterator provides access to a complete listing of IPAllocation values.
 18785  type IPAllocationListResultIterator struct {
 18786  	i    int
 18787  	page IPAllocationListResultPage
 18788  }
 18789  
 18790  // NextWithContext advances to the next value.  If there was an error making
 18791  // the request the iterator does not advance and the error is returned.
 18792  func (iter *IPAllocationListResultIterator) NextWithContext(ctx context.Context) (err error) {
 18793  	if tracing.IsEnabled() {
 18794  		ctx = tracing.StartSpan(ctx, fqdn+"/IPAllocationListResultIterator.NextWithContext")
 18795  		defer func() {
 18796  			sc := -1
 18797  			if iter.Response().Response.Response != nil {
 18798  				sc = iter.Response().Response.Response.StatusCode
 18799  			}
 18800  			tracing.EndSpan(ctx, sc, err)
 18801  		}()
 18802  	}
 18803  	iter.i++
 18804  	if iter.i < len(iter.page.Values()) {
 18805  		return nil
 18806  	}
 18807  	err = iter.page.NextWithContext(ctx)
 18808  	if err != nil {
 18809  		iter.i--
 18810  		return err
 18811  	}
 18812  	iter.i = 0
 18813  	return nil
 18814  }
 18815  
 18816  // Next advances to the next value.  If there was an error making
 18817  // the request the iterator does not advance and the error is returned.
 18818  // Deprecated: Use NextWithContext() instead.
 18819  func (iter *IPAllocationListResultIterator) Next() error {
 18820  	return iter.NextWithContext(context.Background())
 18821  }
 18822  
 18823  // NotDone returns true if the enumeration should be started or is not yet complete.
 18824  func (iter IPAllocationListResultIterator) NotDone() bool {
 18825  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 18826  }
 18827  
 18828  // Response returns the raw server response from the last page request.
 18829  func (iter IPAllocationListResultIterator) Response() IPAllocationListResult {
 18830  	return iter.page.Response()
 18831  }
 18832  
 18833  // Value returns the current value or a zero-initialized value if the
 18834  // iterator has advanced beyond the end of the collection.
 18835  func (iter IPAllocationListResultIterator) Value() IPAllocation {
 18836  	if !iter.page.NotDone() {
 18837  		return IPAllocation{}
 18838  	}
 18839  	return iter.page.Values()[iter.i]
 18840  }
 18841  
 18842  // Creates a new instance of the IPAllocationListResultIterator type.
 18843  func NewIPAllocationListResultIterator(page IPAllocationListResultPage) IPAllocationListResultIterator {
 18844  	return IPAllocationListResultIterator{page: page}
 18845  }
 18846  
 18847  // IsEmpty returns true if the ListResult contains no values.
 18848  func (ialr IPAllocationListResult) IsEmpty() bool {
 18849  	return ialr.Value == nil || len(*ialr.Value) == 0
 18850  }
 18851  
 18852  // hasNextLink returns true if the NextLink is not empty.
 18853  func (ialr IPAllocationListResult) hasNextLink() bool {
 18854  	return ialr.NextLink != nil && len(*ialr.NextLink) != 0
 18855  }
 18856  
 18857  // iPAllocationListResultPreparer prepares a request to retrieve the next set of results.
 18858  // It returns nil if no more results exist.
 18859  func (ialr IPAllocationListResult) iPAllocationListResultPreparer(ctx context.Context) (*http.Request, error) {
 18860  	if !ialr.hasNextLink() {
 18861  		return nil, nil
 18862  	}
 18863  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 18864  		autorest.AsJSON(),
 18865  		autorest.AsGet(),
 18866  		autorest.WithBaseURL(to.String(ialr.NextLink)))
 18867  }
 18868  
 18869  // IPAllocationListResultPage contains a page of IPAllocation values.
 18870  type IPAllocationListResultPage struct {
 18871  	fn   func(context.Context, IPAllocationListResult) (IPAllocationListResult, error)
 18872  	ialr IPAllocationListResult
 18873  }
 18874  
 18875  // NextWithContext advances to the next page of values.  If there was an error making
 18876  // the request the page does not advance and the error is returned.
 18877  func (page *IPAllocationListResultPage) NextWithContext(ctx context.Context) (err error) {
 18878  	if tracing.IsEnabled() {
 18879  		ctx = tracing.StartSpan(ctx, fqdn+"/IPAllocationListResultPage.NextWithContext")
 18880  		defer func() {
 18881  			sc := -1
 18882  			if page.Response().Response.Response != nil {
 18883  				sc = page.Response().Response.Response.StatusCode
 18884  			}
 18885  			tracing.EndSpan(ctx, sc, err)
 18886  		}()
 18887  	}
 18888  	for {
 18889  		next, err := page.fn(ctx, page.ialr)
 18890  		if err != nil {
 18891  			return err
 18892  		}
 18893  		page.ialr = next
 18894  		if !next.hasNextLink() || !next.IsEmpty() {
 18895  			break
 18896  		}
 18897  	}
 18898  	return nil
 18899  }
 18900  
 18901  // Next advances to the next page of values.  If there was an error making
 18902  // the request the page does not advance and the error is returned.
 18903  // Deprecated: Use NextWithContext() instead.
 18904  func (page *IPAllocationListResultPage) Next() error {
 18905  	return page.NextWithContext(context.Background())
 18906  }
 18907  
 18908  // NotDone returns true if the page enumeration should be started or is not yet complete.
 18909  func (page IPAllocationListResultPage) NotDone() bool {
 18910  	return !page.ialr.IsEmpty()
 18911  }
 18912  
 18913  // Response returns the raw server response from the last page request.
 18914  func (page IPAllocationListResultPage) Response() IPAllocationListResult {
 18915  	return page.ialr
 18916  }
 18917  
 18918  // Values returns the slice of values for the current page or nil if there are no values.
 18919  func (page IPAllocationListResultPage) Values() []IPAllocation {
 18920  	if page.ialr.IsEmpty() {
 18921  		return nil
 18922  	}
 18923  	return *page.ialr.Value
 18924  }
 18925  
 18926  // Creates a new instance of the IPAllocationListResultPage type.
 18927  func NewIPAllocationListResultPage(cur IPAllocationListResult, getNextPage func(context.Context, IPAllocationListResult) (IPAllocationListResult, error)) IPAllocationListResultPage {
 18928  	return IPAllocationListResultPage{
 18929  		fn:   getNextPage,
 18930  		ialr: cur,
 18931  	}
 18932  }
 18933  
 18934  // IPAllocationPropertiesFormat properties of the IpAllocation.
 18935  type IPAllocationPropertiesFormat struct {
 18936  	// Subnet - READ-ONLY; The Subnet that using the prefix of this IpAllocation resource.
 18937  	Subnet *SubResource `json:"subnet,omitempty"`
 18938  	// VirtualNetwork - READ-ONLY; The VirtualNetwork that using the prefix of this IpAllocation resource.
 18939  	VirtualNetwork *SubResource `json:"virtualNetwork,omitempty"`
 18940  	// Type - The type for the IpAllocation. Possible values include: 'Undefined', 'Hypernet'
 18941  	Type IPAllocationType `json:"type,omitempty"`
 18942  	// Prefix - The address prefix for the IpAllocation.
 18943  	Prefix *string `json:"prefix,omitempty"`
 18944  	// PrefixLength - The address prefix length for the IpAllocation.
 18945  	PrefixLength *int32 `json:"prefixLength,omitempty"`
 18946  	// PrefixType - The address prefix Type for the IpAllocation. Possible values include: 'IPv4', 'IPv6'
 18947  	PrefixType IPVersion `json:"prefixType,omitempty"`
 18948  	// IpamAllocationID - The IPAM allocation ID.
 18949  	IpamAllocationID *string `json:"ipamAllocationId,omitempty"`
 18950  	// AllocationTags - IpAllocation tags.
 18951  	AllocationTags map[string]*string `json:"allocationTags"`
 18952  }
 18953  
 18954  // MarshalJSON is the custom marshaler for IPAllocationPropertiesFormat.
 18955  func (iapf IPAllocationPropertiesFormat) MarshalJSON() ([]byte, error) {
 18956  	objectMap := make(map[string]interface{})
 18957  	if iapf.Type != "" {
 18958  		objectMap["type"] = iapf.Type
 18959  	}
 18960  	if iapf.Prefix != nil {
 18961  		objectMap["prefix"] = iapf.Prefix
 18962  	}
 18963  	if iapf.PrefixLength != nil {
 18964  		objectMap["prefixLength"] = iapf.PrefixLength
 18965  	}
 18966  	if iapf.PrefixType != "" {
 18967  		objectMap["prefixType"] = iapf.PrefixType
 18968  	}
 18969  	if iapf.IpamAllocationID != nil {
 18970  		objectMap["ipamAllocationId"] = iapf.IpamAllocationID
 18971  	}
 18972  	if iapf.AllocationTags != nil {
 18973  		objectMap["allocationTags"] = iapf.AllocationTags
 18974  	}
 18975  	return json.Marshal(objectMap)
 18976  }
 18977  
 18978  // IPAllocationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 18979  // long-running operation.
 18980  type IPAllocationsCreateOrUpdateFuture struct {
 18981  	azure.FutureAPI
 18982  	// Result returns the result of the asynchronous operation.
 18983  	// If the operation has not completed it will return an error.
 18984  	Result func(IPAllocationsClient) (IPAllocation, error)
 18985  }
 18986  
 18987  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 18988  func (future *IPAllocationsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 18989  	var azFuture azure.Future
 18990  	if err := json.Unmarshal(body, &azFuture); err != nil {
 18991  		return err
 18992  	}
 18993  	future.FutureAPI = &azFuture
 18994  	future.Result = future.result
 18995  	return nil
 18996  }
 18997  
 18998  // result is the default implementation for IPAllocationsCreateOrUpdateFuture.Result.
 18999  func (future *IPAllocationsCreateOrUpdateFuture) result(client IPAllocationsClient) (ia IPAllocation, err error) {
 19000  	var done bool
 19001  	done, err = future.DoneWithContext(context.Background(), client)
 19002  	if err != nil {
 19003  		err = autorest.NewErrorWithError(err, "network.IPAllocationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 19004  		return
 19005  	}
 19006  	if !done {
 19007  		ia.Response.Response = future.Response()
 19008  		err = azure.NewAsyncOpIncompleteError("network.IPAllocationsCreateOrUpdateFuture")
 19009  		return
 19010  	}
 19011  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 19012  	if ia.Response.Response, err = future.GetResult(sender); err == nil && ia.Response.Response.StatusCode != http.StatusNoContent {
 19013  		ia, err = client.CreateOrUpdateResponder(ia.Response.Response)
 19014  		if err != nil {
 19015  			err = autorest.NewErrorWithError(err, "network.IPAllocationsCreateOrUpdateFuture", "Result", ia.Response.Response, "Failure responding to request")
 19016  		}
 19017  	}
 19018  	return
 19019  }
 19020  
 19021  // IPAllocationsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 19022  // operation.
 19023  type IPAllocationsDeleteFuture struct {
 19024  	azure.FutureAPI
 19025  	// Result returns the result of the asynchronous operation.
 19026  	// If the operation has not completed it will return an error.
 19027  	Result func(IPAllocationsClient) (autorest.Response, error)
 19028  }
 19029  
 19030  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 19031  func (future *IPAllocationsDeleteFuture) UnmarshalJSON(body []byte) error {
 19032  	var azFuture azure.Future
 19033  	if err := json.Unmarshal(body, &azFuture); err != nil {
 19034  		return err
 19035  	}
 19036  	future.FutureAPI = &azFuture
 19037  	future.Result = future.result
 19038  	return nil
 19039  }
 19040  
 19041  // result is the default implementation for IPAllocationsDeleteFuture.Result.
 19042  func (future *IPAllocationsDeleteFuture) result(client IPAllocationsClient) (ar autorest.Response, err error) {
 19043  	var done bool
 19044  	done, err = future.DoneWithContext(context.Background(), client)
 19045  	if err != nil {
 19046  		err = autorest.NewErrorWithError(err, "network.IPAllocationsDeleteFuture", "Result", future.Response(), "Polling failure")
 19047  		return
 19048  	}
 19049  	if !done {
 19050  		ar.Response = future.Response()
 19051  		err = azure.NewAsyncOpIncompleteError("network.IPAllocationsDeleteFuture")
 19052  		return
 19053  	}
 19054  	ar.Response = future.Response()
 19055  	return
 19056  }
 19057  
 19058  // IPConfiguration IP configuration.
 19059  type IPConfiguration struct {
 19060  	// IPConfigurationPropertiesFormat - Properties of the IP configuration.
 19061  	*IPConfigurationPropertiesFormat `json:"properties,omitempty"`
 19062  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 19063  	Name *string `json:"name,omitempty"`
 19064  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 19065  	Etag *string `json:"etag,omitempty"`
 19066  	// ID - Resource ID.
 19067  	ID *string `json:"id,omitempty"`
 19068  }
 19069  
 19070  // MarshalJSON is the custom marshaler for IPConfiguration.
 19071  func (ic IPConfiguration) MarshalJSON() ([]byte, error) {
 19072  	objectMap := make(map[string]interface{})
 19073  	if ic.IPConfigurationPropertiesFormat != nil {
 19074  		objectMap["properties"] = ic.IPConfigurationPropertiesFormat
 19075  	}
 19076  	if ic.Name != nil {
 19077  		objectMap["name"] = ic.Name
 19078  	}
 19079  	if ic.ID != nil {
 19080  		objectMap["id"] = ic.ID
 19081  	}
 19082  	return json.Marshal(objectMap)
 19083  }
 19084  
 19085  // UnmarshalJSON is the custom unmarshaler for IPConfiguration struct.
 19086  func (ic *IPConfiguration) UnmarshalJSON(body []byte) error {
 19087  	var m map[string]*json.RawMessage
 19088  	err := json.Unmarshal(body, &m)
 19089  	if err != nil {
 19090  		return err
 19091  	}
 19092  	for k, v := range m {
 19093  		switch k {
 19094  		case "properties":
 19095  			if v != nil {
 19096  				var IPConfigurationPropertiesFormat IPConfigurationPropertiesFormat
 19097  				err = json.Unmarshal(*v, &IPConfigurationPropertiesFormat)
 19098  				if err != nil {
 19099  					return err
 19100  				}
 19101  				ic.IPConfigurationPropertiesFormat = &IPConfigurationPropertiesFormat
 19102  			}
 19103  		case "name":
 19104  			if v != nil {
 19105  				var name string
 19106  				err = json.Unmarshal(*v, &name)
 19107  				if err != nil {
 19108  					return err
 19109  				}
 19110  				ic.Name = &name
 19111  			}
 19112  		case "etag":
 19113  			if v != nil {
 19114  				var etag string
 19115  				err = json.Unmarshal(*v, &etag)
 19116  				if err != nil {
 19117  					return err
 19118  				}
 19119  				ic.Etag = &etag
 19120  			}
 19121  		case "id":
 19122  			if v != nil {
 19123  				var ID string
 19124  				err = json.Unmarshal(*v, &ID)
 19125  				if err != nil {
 19126  					return err
 19127  				}
 19128  				ic.ID = &ID
 19129  			}
 19130  		}
 19131  	}
 19132  
 19133  	return nil
 19134  }
 19135  
 19136  // IPConfigurationBgpPeeringAddress properties of IPConfigurationBgpPeeringAddress.
 19137  type IPConfigurationBgpPeeringAddress struct {
 19138  	// IpconfigurationID - The ID of IP configuration which belongs to gateway.
 19139  	IpconfigurationID *string `json:"ipconfigurationId,omitempty"`
 19140  	// DefaultBgpIPAddresses - READ-ONLY; The list of default BGP peering addresses which belong to IP configuration.
 19141  	DefaultBgpIPAddresses *[]string `json:"defaultBgpIpAddresses,omitempty"`
 19142  	// CustomBgpIPAddresses - The list of custom BGP peering addresses which belong to IP configuration.
 19143  	CustomBgpIPAddresses *[]string `json:"customBgpIpAddresses,omitempty"`
 19144  	// TunnelIPAddresses - READ-ONLY; The list of tunnel public IP addresses which belong to IP configuration.
 19145  	TunnelIPAddresses *[]string `json:"tunnelIpAddresses,omitempty"`
 19146  }
 19147  
 19148  // MarshalJSON is the custom marshaler for IPConfigurationBgpPeeringAddress.
 19149  func (icbpa IPConfigurationBgpPeeringAddress) MarshalJSON() ([]byte, error) {
 19150  	objectMap := make(map[string]interface{})
 19151  	if icbpa.IpconfigurationID != nil {
 19152  		objectMap["ipconfigurationId"] = icbpa.IpconfigurationID
 19153  	}
 19154  	if icbpa.CustomBgpIPAddresses != nil {
 19155  		objectMap["customBgpIpAddresses"] = icbpa.CustomBgpIPAddresses
 19156  	}
 19157  	return json.Marshal(objectMap)
 19158  }
 19159  
 19160  // IPConfigurationProfile IP configuration profile child resource.
 19161  type IPConfigurationProfile struct {
 19162  	// IPConfigurationProfilePropertiesFormat - Properties of the IP configuration profile.
 19163  	*IPConfigurationProfilePropertiesFormat `json:"properties,omitempty"`
 19164  	// Name - The name of the resource. This name can be used to access the resource.
 19165  	Name *string `json:"name,omitempty"`
 19166  	// Type - READ-ONLY; Sub Resource type.
 19167  	Type *string `json:"type,omitempty"`
 19168  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 19169  	Etag *string `json:"etag,omitempty"`
 19170  	// ID - Resource ID.
 19171  	ID *string `json:"id,omitempty"`
 19172  }
 19173  
 19174  // MarshalJSON is the custom marshaler for IPConfigurationProfile.
 19175  func (icp IPConfigurationProfile) MarshalJSON() ([]byte, error) {
 19176  	objectMap := make(map[string]interface{})
 19177  	if icp.IPConfigurationProfilePropertiesFormat != nil {
 19178  		objectMap["properties"] = icp.IPConfigurationProfilePropertiesFormat
 19179  	}
 19180  	if icp.Name != nil {
 19181  		objectMap["name"] = icp.Name
 19182  	}
 19183  	if icp.ID != nil {
 19184  		objectMap["id"] = icp.ID
 19185  	}
 19186  	return json.Marshal(objectMap)
 19187  }
 19188  
 19189  // UnmarshalJSON is the custom unmarshaler for IPConfigurationProfile struct.
 19190  func (icp *IPConfigurationProfile) UnmarshalJSON(body []byte) error {
 19191  	var m map[string]*json.RawMessage
 19192  	err := json.Unmarshal(body, &m)
 19193  	if err != nil {
 19194  		return err
 19195  	}
 19196  	for k, v := range m {
 19197  		switch k {
 19198  		case "properties":
 19199  			if v != nil {
 19200  				var IPConfigurationProfilePropertiesFormat IPConfigurationProfilePropertiesFormat
 19201  				err = json.Unmarshal(*v, &IPConfigurationProfilePropertiesFormat)
 19202  				if err != nil {
 19203  					return err
 19204  				}
 19205  				icp.IPConfigurationProfilePropertiesFormat = &IPConfigurationProfilePropertiesFormat
 19206  			}
 19207  		case "name":
 19208  			if v != nil {
 19209  				var name string
 19210  				err = json.Unmarshal(*v, &name)
 19211  				if err != nil {
 19212  					return err
 19213  				}
 19214  				icp.Name = &name
 19215  			}
 19216  		case "type":
 19217  			if v != nil {
 19218  				var typeVar string
 19219  				err = json.Unmarshal(*v, &typeVar)
 19220  				if err != nil {
 19221  					return err
 19222  				}
 19223  				icp.Type = &typeVar
 19224  			}
 19225  		case "etag":
 19226  			if v != nil {
 19227  				var etag string
 19228  				err = json.Unmarshal(*v, &etag)
 19229  				if err != nil {
 19230  					return err
 19231  				}
 19232  				icp.Etag = &etag
 19233  			}
 19234  		case "id":
 19235  			if v != nil {
 19236  				var ID string
 19237  				err = json.Unmarshal(*v, &ID)
 19238  				if err != nil {
 19239  					return err
 19240  				}
 19241  				icp.ID = &ID
 19242  			}
 19243  		}
 19244  	}
 19245  
 19246  	return nil
 19247  }
 19248  
 19249  // IPConfigurationProfilePropertiesFormat IP configuration profile properties.
 19250  type IPConfigurationProfilePropertiesFormat struct {
 19251  	// Subnet - The reference to the subnet resource to create a container network interface ip configuration.
 19252  	Subnet *Subnet `json:"subnet,omitempty"`
 19253  	// ProvisioningState - READ-ONLY; The provisioning state of the IP configuration profile resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 19254  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 19255  }
 19256  
 19257  // MarshalJSON is the custom marshaler for IPConfigurationProfilePropertiesFormat.
 19258  func (icppf IPConfigurationProfilePropertiesFormat) MarshalJSON() ([]byte, error) {
 19259  	objectMap := make(map[string]interface{})
 19260  	if icppf.Subnet != nil {
 19261  		objectMap["subnet"] = icppf.Subnet
 19262  	}
 19263  	return json.Marshal(objectMap)
 19264  }
 19265  
 19266  // IPConfigurationPropertiesFormat properties of IP configuration.
 19267  type IPConfigurationPropertiesFormat struct {
 19268  	// PrivateIPAddress - The private IP address of the IP configuration.
 19269  	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
 19270  	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
 19271  	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
 19272  	// Subnet - The reference to the subnet resource.
 19273  	Subnet *Subnet `json:"subnet,omitempty"`
 19274  	// PublicIPAddress - The reference to the public IP resource.
 19275  	PublicIPAddress *PublicIPAddress `json:"publicIPAddress,omitempty"`
 19276  	// ProvisioningState - READ-ONLY; The provisioning state of the IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 19277  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 19278  }
 19279  
 19280  // MarshalJSON is the custom marshaler for IPConfigurationPropertiesFormat.
 19281  func (icpf IPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
 19282  	objectMap := make(map[string]interface{})
 19283  	if icpf.PrivateIPAddress != nil {
 19284  		objectMap["privateIPAddress"] = icpf.PrivateIPAddress
 19285  	}
 19286  	if icpf.PrivateIPAllocationMethod != "" {
 19287  		objectMap["privateIPAllocationMethod"] = icpf.PrivateIPAllocationMethod
 19288  	}
 19289  	if icpf.Subnet != nil {
 19290  		objectMap["subnet"] = icpf.Subnet
 19291  	}
 19292  	if icpf.PublicIPAddress != nil {
 19293  		objectMap["publicIPAddress"] = icpf.PublicIPAddress
 19294  	}
 19295  	return json.Marshal(objectMap)
 19296  }
 19297  
 19298  // IPGroup the IpGroups resource information.
 19299  type IPGroup struct {
 19300  	autorest.Response `json:"-"`
 19301  	// IPGroupPropertiesFormat - Properties of the IpGroups.
 19302  	*IPGroupPropertiesFormat `json:"properties,omitempty"`
 19303  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 19304  	Etag *string `json:"etag,omitempty"`
 19305  	// ID - Resource ID.
 19306  	ID *string `json:"id,omitempty"`
 19307  	// Name - READ-ONLY; Resource name.
 19308  	Name *string `json:"name,omitempty"`
 19309  	// Type - READ-ONLY; Resource type.
 19310  	Type *string `json:"type,omitempty"`
 19311  	// Location - Resource location.
 19312  	Location *string `json:"location,omitempty"`
 19313  	// Tags - Resource tags.
 19314  	Tags map[string]*string `json:"tags"`
 19315  }
 19316  
 19317  // MarshalJSON is the custom marshaler for IPGroup.
 19318  func (ig IPGroup) MarshalJSON() ([]byte, error) {
 19319  	objectMap := make(map[string]interface{})
 19320  	if ig.IPGroupPropertiesFormat != nil {
 19321  		objectMap["properties"] = ig.IPGroupPropertiesFormat
 19322  	}
 19323  	if ig.ID != nil {
 19324  		objectMap["id"] = ig.ID
 19325  	}
 19326  	if ig.Location != nil {
 19327  		objectMap["location"] = ig.Location
 19328  	}
 19329  	if ig.Tags != nil {
 19330  		objectMap["tags"] = ig.Tags
 19331  	}
 19332  	return json.Marshal(objectMap)
 19333  }
 19334  
 19335  // UnmarshalJSON is the custom unmarshaler for IPGroup struct.
 19336  func (ig *IPGroup) UnmarshalJSON(body []byte) error {
 19337  	var m map[string]*json.RawMessage
 19338  	err := json.Unmarshal(body, &m)
 19339  	if err != nil {
 19340  		return err
 19341  	}
 19342  	for k, v := range m {
 19343  		switch k {
 19344  		case "properties":
 19345  			if v != nil {
 19346  				var IPGroupPropertiesFormat IPGroupPropertiesFormat
 19347  				err = json.Unmarshal(*v, &IPGroupPropertiesFormat)
 19348  				if err != nil {
 19349  					return err
 19350  				}
 19351  				ig.IPGroupPropertiesFormat = &IPGroupPropertiesFormat
 19352  			}
 19353  		case "etag":
 19354  			if v != nil {
 19355  				var etag string
 19356  				err = json.Unmarshal(*v, &etag)
 19357  				if err != nil {
 19358  					return err
 19359  				}
 19360  				ig.Etag = &etag
 19361  			}
 19362  		case "id":
 19363  			if v != nil {
 19364  				var ID string
 19365  				err = json.Unmarshal(*v, &ID)
 19366  				if err != nil {
 19367  					return err
 19368  				}
 19369  				ig.ID = &ID
 19370  			}
 19371  		case "name":
 19372  			if v != nil {
 19373  				var name string
 19374  				err = json.Unmarshal(*v, &name)
 19375  				if err != nil {
 19376  					return err
 19377  				}
 19378  				ig.Name = &name
 19379  			}
 19380  		case "type":
 19381  			if v != nil {
 19382  				var typeVar string
 19383  				err = json.Unmarshal(*v, &typeVar)
 19384  				if err != nil {
 19385  					return err
 19386  				}
 19387  				ig.Type = &typeVar
 19388  			}
 19389  		case "location":
 19390  			if v != nil {
 19391  				var location string
 19392  				err = json.Unmarshal(*v, &location)
 19393  				if err != nil {
 19394  					return err
 19395  				}
 19396  				ig.Location = &location
 19397  			}
 19398  		case "tags":
 19399  			if v != nil {
 19400  				var tags map[string]*string
 19401  				err = json.Unmarshal(*v, &tags)
 19402  				if err != nil {
 19403  					return err
 19404  				}
 19405  				ig.Tags = tags
 19406  			}
 19407  		}
 19408  	}
 19409  
 19410  	return nil
 19411  }
 19412  
 19413  // IPGroupListResult response for the ListIpGroups API service call.
 19414  type IPGroupListResult struct {
 19415  	autorest.Response `json:"-"`
 19416  	// Value - The list of IpGroups information resources.
 19417  	Value *[]IPGroup `json:"value,omitempty"`
 19418  	// NextLink - URL to get the next set of results.
 19419  	NextLink *string `json:"nextLink,omitempty"`
 19420  }
 19421  
 19422  // IPGroupListResultIterator provides access to a complete listing of IPGroup values.
 19423  type IPGroupListResultIterator struct {
 19424  	i    int
 19425  	page IPGroupListResultPage
 19426  }
 19427  
 19428  // NextWithContext advances to the next value.  If there was an error making
 19429  // the request the iterator does not advance and the error is returned.
 19430  func (iter *IPGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
 19431  	if tracing.IsEnabled() {
 19432  		ctx = tracing.StartSpan(ctx, fqdn+"/IPGroupListResultIterator.NextWithContext")
 19433  		defer func() {
 19434  			sc := -1
 19435  			if iter.Response().Response.Response != nil {
 19436  				sc = iter.Response().Response.Response.StatusCode
 19437  			}
 19438  			tracing.EndSpan(ctx, sc, err)
 19439  		}()
 19440  	}
 19441  	iter.i++
 19442  	if iter.i < len(iter.page.Values()) {
 19443  		return nil
 19444  	}
 19445  	err = iter.page.NextWithContext(ctx)
 19446  	if err != nil {
 19447  		iter.i--
 19448  		return err
 19449  	}
 19450  	iter.i = 0
 19451  	return nil
 19452  }
 19453  
 19454  // Next advances to the next value.  If there was an error making
 19455  // the request the iterator does not advance and the error is returned.
 19456  // Deprecated: Use NextWithContext() instead.
 19457  func (iter *IPGroupListResultIterator) Next() error {
 19458  	return iter.NextWithContext(context.Background())
 19459  }
 19460  
 19461  // NotDone returns true if the enumeration should be started or is not yet complete.
 19462  func (iter IPGroupListResultIterator) NotDone() bool {
 19463  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 19464  }
 19465  
 19466  // Response returns the raw server response from the last page request.
 19467  func (iter IPGroupListResultIterator) Response() IPGroupListResult {
 19468  	return iter.page.Response()
 19469  }
 19470  
 19471  // Value returns the current value or a zero-initialized value if the
 19472  // iterator has advanced beyond the end of the collection.
 19473  func (iter IPGroupListResultIterator) Value() IPGroup {
 19474  	if !iter.page.NotDone() {
 19475  		return IPGroup{}
 19476  	}
 19477  	return iter.page.Values()[iter.i]
 19478  }
 19479  
 19480  // Creates a new instance of the IPGroupListResultIterator type.
 19481  func NewIPGroupListResultIterator(page IPGroupListResultPage) IPGroupListResultIterator {
 19482  	return IPGroupListResultIterator{page: page}
 19483  }
 19484  
 19485  // IsEmpty returns true if the ListResult contains no values.
 19486  func (iglr IPGroupListResult) IsEmpty() bool {
 19487  	return iglr.Value == nil || len(*iglr.Value) == 0
 19488  }
 19489  
 19490  // hasNextLink returns true if the NextLink is not empty.
 19491  func (iglr IPGroupListResult) hasNextLink() bool {
 19492  	return iglr.NextLink != nil && len(*iglr.NextLink) != 0
 19493  }
 19494  
 19495  // iPGroupListResultPreparer prepares a request to retrieve the next set of results.
 19496  // It returns nil if no more results exist.
 19497  func (iglr IPGroupListResult) iPGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
 19498  	if !iglr.hasNextLink() {
 19499  		return nil, nil
 19500  	}
 19501  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 19502  		autorest.AsJSON(),
 19503  		autorest.AsGet(),
 19504  		autorest.WithBaseURL(to.String(iglr.NextLink)))
 19505  }
 19506  
 19507  // IPGroupListResultPage contains a page of IPGroup values.
 19508  type IPGroupListResultPage struct {
 19509  	fn   func(context.Context, IPGroupListResult) (IPGroupListResult, error)
 19510  	iglr IPGroupListResult
 19511  }
 19512  
 19513  // NextWithContext advances to the next page of values.  If there was an error making
 19514  // the request the page does not advance and the error is returned.
 19515  func (page *IPGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
 19516  	if tracing.IsEnabled() {
 19517  		ctx = tracing.StartSpan(ctx, fqdn+"/IPGroupListResultPage.NextWithContext")
 19518  		defer func() {
 19519  			sc := -1
 19520  			if page.Response().Response.Response != nil {
 19521  				sc = page.Response().Response.Response.StatusCode
 19522  			}
 19523  			tracing.EndSpan(ctx, sc, err)
 19524  		}()
 19525  	}
 19526  	for {
 19527  		next, err := page.fn(ctx, page.iglr)
 19528  		if err != nil {
 19529  			return err
 19530  		}
 19531  		page.iglr = next
 19532  		if !next.hasNextLink() || !next.IsEmpty() {
 19533  			break
 19534  		}
 19535  	}
 19536  	return nil
 19537  }
 19538  
 19539  // Next advances to the next page of values.  If there was an error making
 19540  // the request the page does not advance and the error is returned.
 19541  // Deprecated: Use NextWithContext() instead.
 19542  func (page *IPGroupListResultPage) Next() error {
 19543  	return page.NextWithContext(context.Background())
 19544  }
 19545  
 19546  // NotDone returns true if the page enumeration should be started or is not yet complete.
 19547  func (page IPGroupListResultPage) NotDone() bool {
 19548  	return !page.iglr.IsEmpty()
 19549  }
 19550  
 19551  // Response returns the raw server response from the last page request.
 19552  func (page IPGroupListResultPage) Response() IPGroupListResult {
 19553  	return page.iglr
 19554  }
 19555  
 19556  // Values returns the slice of values for the current page or nil if there are no values.
 19557  func (page IPGroupListResultPage) Values() []IPGroup {
 19558  	if page.iglr.IsEmpty() {
 19559  		return nil
 19560  	}
 19561  	return *page.iglr.Value
 19562  }
 19563  
 19564  // Creates a new instance of the IPGroupListResultPage type.
 19565  func NewIPGroupListResultPage(cur IPGroupListResult, getNextPage func(context.Context, IPGroupListResult) (IPGroupListResult, error)) IPGroupListResultPage {
 19566  	return IPGroupListResultPage{
 19567  		fn:   getNextPage,
 19568  		iglr: cur,
 19569  	}
 19570  }
 19571  
 19572  // IPGroupPropertiesFormat the IpGroups property information.
 19573  type IPGroupPropertiesFormat struct {
 19574  	// ProvisioningState - READ-ONLY; The provisioning state of the IpGroups resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 19575  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 19576  	// IPAddresses - IpAddresses/IpAddressPrefixes in the IpGroups resource.
 19577  	IPAddresses *[]string `json:"ipAddresses,omitempty"`
 19578  	// Firewalls - READ-ONLY; List of references to Azure resources that this IpGroups is associated with.
 19579  	Firewalls *[]SubResource `json:"firewalls,omitempty"`
 19580  }
 19581  
 19582  // MarshalJSON is the custom marshaler for IPGroupPropertiesFormat.
 19583  func (igpf IPGroupPropertiesFormat) MarshalJSON() ([]byte, error) {
 19584  	objectMap := make(map[string]interface{})
 19585  	if igpf.IPAddresses != nil {
 19586  		objectMap["ipAddresses"] = igpf.IPAddresses
 19587  	}
 19588  	return json.Marshal(objectMap)
 19589  }
 19590  
 19591  // IPGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
 19592  // operation.
 19593  type IPGroupsCreateOrUpdateFuture struct {
 19594  	azure.FutureAPI
 19595  	// Result returns the result of the asynchronous operation.
 19596  	// If the operation has not completed it will return an error.
 19597  	Result func(IPGroupsClient) (IPGroup, error)
 19598  }
 19599  
 19600  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 19601  func (future *IPGroupsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 19602  	var azFuture azure.Future
 19603  	if err := json.Unmarshal(body, &azFuture); err != nil {
 19604  		return err
 19605  	}
 19606  	future.FutureAPI = &azFuture
 19607  	future.Result = future.result
 19608  	return nil
 19609  }
 19610  
 19611  // result is the default implementation for IPGroupsCreateOrUpdateFuture.Result.
 19612  func (future *IPGroupsCreateOrUpdateFuture) result(client IPGroupsClient) (ig IPGroup, err error) {
 19613  	var done bool
 19614  	done, err = future.DoneWithContext(context.Background(), client)
 19615  	if err != nil {
 19616  		err = autorest.NewErrorWithError(err, "network.IPGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 19617  		return
 19618  	}
 19619  	if !done {
 19620  		ig.Response.Response = future.Response()
 19621  		err = azure.NewAsyncOpIncompleteError("network.IPGroupsCreateOrUpdateFuture")
 19622  		return
 19623  	}
 19624  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 19625  	if ig.Response.Response, err = future.GetResult(sender); err == nil && ig.Response.Response.StatusCode != http.StatusNoContent {
 19626  		ig, err = client.CreateOrUpdateResponder(ig.Response.Response)
 19627  		if err != nil {
 19628  			err = autorest.NewErrorWithError(err, "network.IPGroupsCreateOrUpdateFuture", "Result", ig.Response.Response, "Failure responding to request")
 19629  		}
 19630  	}
 19631  	return
 19632  }
 19633  
 19634  // IPGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 19635  // operation.
 19636  type IPGroupsDeleteFuture struct {
 19637  	azure.FutureAPI
 19638  	// Result returns the result of the asynchronous operation.
 19639  	// If the operation has not completed it will return an error.
 19640  	Result func(IPGroupsClient) (autorest.Response, error)
 19641  }
 19642  
 19643  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 19644  func (future *IPGroupsDeleteFuture) UnmarshalJSON(body []byte) error {
 19645  	var azFuture azure.Future
 19646  	if err := json.Unmarshal(body, &azFuture); err != nil {
 19647  		return err
 19648  	}
 19649  	future.FutureAPI = &azFuture
 19650  	future.Result = future.result
 19651  	return nil
 19652  }
 19653  
 19654  // result is the default implementation for IPGroupsDeleteFuture.Result.
 19655  func (future *IPGroupsDeleteFuture) result(client IPGroupsClient) (ar autorest.Response, err error) {
 19656  	var done bool
 19657  	done, err = future.DoneWithContext(context.Background(), client)
 19658  	if err != nil {
 19659  		err = autorest.NewErrorWithError(err, "network.IPGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
 19660  		return
 19661  	}
 19662  	if !done {
 19663  		ar.Response = future.Response()
 19664  		err = azure.NewAsyncOpIncompleteError("network.IPGroupsDeleteFuture")
 19665  		return
 19666  	}
 19667  	ar.Response = future.Response()
 19668  	return
 19669  }
 19670  
 19671  // IpsecPolicy an IPSec Policy configuration for a virtual network gateway connection.
 19672  type IpsecPolicy struct {
 19673  	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for a site to site VPN tunnel.
 19674  	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
 19675  	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for a site to site VPN tunnel.
 19676  	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
 19677  	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
 19678  	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
 19679  	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
 19680  	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
 19681  	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
 19682  	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
 19683  	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
 19684  	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
 19685  	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
 19686  	DhGroup DhGroup `json:"dhGroup,omitempty"`
 19687  	// PfsGroup - The Pfs Group used in IKE Phase 2 for new child SA. Possible values include: 'PfsGroupNone', 'PfsGroupPFS1', 'PfsGroupPFS2', 'PfsGroupPFS2048', 'PfsGroupECP256', 'PfsGroupECP384', 'PfsGroupPFS24', 'PfsGroupPFS14', 'PfsGroupPFSMM'
 19688  	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
 19689  }
 19690  
 19691  // IPTag contains the IpTag associated with the object.
 19692  type IPTag struct {
 19693  	// IPTagType - The IP tag type. Example: FirstPartyUsage.
 19694  	IPTagType *string `json:"ipTagType,omitempty"`
 19695  	// Tag - The value of the IP tag associated with the public IP. Example: SQL.
 19696  	Tag *string `json:"tag,omitempty"`
 19697  }
 19698  
 19699  // Ipv6CircuitConnectionConfig iPv6 Circuit Connection properties for global reach.
 19700  type Ipv6CircuitConnectionConfig struct {
 19701  	// AddressPrefix - /125 IP address space to carve out customer addresses for global reach.
 19702  	AddressPrefix *string `json:"addressPrefix,omitempty"`
 19703  	// CircuitConnectionStatus - READ-ONLY; Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
 19704  	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
 19705  }
 19706  
 19707  // MarshalJSON is the custom marshaler for Ipv6CircuitConnectionConfig.
 19708  func (i6ccc Ipv6CircuitConnectionConfig) MarshalJSON() ([]byte, error) {
 19709  	objectMap := make(map[string]interface{})
 19710  	if i6ccc.AddressPrefix != nil {
 19711  		objectMap["addressPrefix"] = i6ccc.AddressPrefix
 19712  	}
 19713  	return json.Marshal(objectMap)
 19714  }
 19715  
 19716  // Ipv6ExpressRouteCircuitPeeringConfig contains IPv6 peering config.
 19717  type Ipv6ExpressRouteCircuitPeeringConfig struct {
 19718  	// PrimaryPeerAddressPrefix - The primary address prefix.
 19719  	PrimaryPeerAddressPrefix *string `json:"primaryPeerAddressPrefix,omitempty"`
 19720  	// SecondaryPeerAddressPrefix - The secondary address prefix.
 19721  	SecondaryPeerAddressPrefix *string `json:"secondaryPeerAddressPrefix,omitempty"`
 19722  	// MicrosoftPeeringConfig - The Microsoft peering configuration.
 19723  	MicrosoftPeeringConfig *ExpressRouteCircuitPeeringConfig `json:"microsoftPeeringConfig,omitempty"`
 19724  	// RouteFilter - The reference to the RouteFilter resource.
 19725  	RouteFilter *SubResource `json:"routeFilter,omitempty"`
 19726  	// State - The state of peering. Possible values include: 'ExpressRouteCircuitPeeringStateDisabled', 'ExpressRouteCircuitPeeringStateEnabled'
 19727  	State ExpressRouteCircuitPeeringState `json:"state,omitempty"`
 19728  }
 19729  
 19730  // ListHubRouteTablesResult list of RouteTables and a URL nextLink to get the next set of results.
 19731  type ListHubRouteTablesResult struct {
 19732  	autorest.Response `json:"-"`
 19733  	// Value - List of RouteTables.
 19734  	Value *[]HubRouteTable `json:"value,omitempty"`
 19735  	// NextLink - URL to get the next set of operation list results if there are any.
 19736  	NextLink *string `json:"nextLink,omitempty"`
 19737  }
 19738  
 19739  // ListHubRouteTablesResultIterator provides access to a complete listing of HubRouteTable values.
 19740  type ListHubRouteTablesResultIterator struct {
 19741  	i    int
 19742  	page ListHubRouteTablesResultPage
 19743  }
 19744  
 19745  // NextWithContext advances to the next value.  If there was an error making
 19746  // the request the iterator does not advance and the error is returned.
 19747  func (iter *ListHubRouteTablesResultIterator) NextWithContext(ctx context.Context) (err error) {
 19748  	if tracing.IsEnabled() {
 19749  		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubRouteTablesResultIterator.NextWithContext")
 19750  		defer func() {
 19751  			sc := -1
 19752  			if iter.Response().Response.Response != nil {
 19753  				sc = iter.Response().Response.Response.StatusCode
 19754  			}
 19755  			tracing.EndSpan(ctx, sc, err)
 19756  		}()
 19757  	}
 19758  	iter.i++
 19759  	if iter.i < len(iter.page.Values()) {
 19760  		return nil
 19761  	}
 19762  	err = iter.page.NextWithContext(ctx)
 19763  	if err != nil {
 19764  		iter.i--
 19765  		return err
 19766  	}
 19767  	iter.i = 0
 19768  	return nil
 19769  }
 19770  
 19771  // Next advances to the next value.  If there was an error making
 19772  // the request the iterator does not advance and the error is returned.
 19773  // Deprecated: Use NextWithContext() instead.
 19774  func (iter *ListHubRouteTablesResultIterator) Next() error {
 19775  	return iter.NextWithContext(context.Background())
 19776  }
 19777  
 19778  // NotDone returns true if the enumeration should be started or is not yet complete.
 19779  func (iter ListHubRouteTablesResultIterator) NotDone() bool {
 19780  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 19781  }
 19782  
 19783  // Response returns the raw server response from the last page request.
 19784  func (iter ListHubRouteTablesResultIterator) Response() ListHubRouteTablesResult {
 19785  	return iter.page.Response()
 19786  }
 19787  
 19788  // Value returns the current value or a zero-initialized value if the
 19789  // iterator has advanced beyond the end of the collection.
 19790  func (iter ListHubRouteTablesResultIterator) Value() HubRouteTable {
 19791  	if !iter.page.NotDone() {
 19792  		return HubRouteTable{}
 19793  	}
 19794  	return iter.page.Values()[iter.i]
 19795  }
 19796  
 19797  // Creates a new instance of the ListHubRouteTablesResultIterator type.
 19798  func NewListHubRouteTablesResultIterator(page ListHubRouteTablesResultPage) ListHubRouteTablesResultIterator {
 19799  	return ListHubRouteTablesResultIterator{page: page}
 19800  }
 19801  
 19802  // IsEmpty returns true if the ListResult contains no values.
 19803  func (lhrtr ListHubRouteTablesResult) IsEmpty() bool {
 19804  	return lhrtr.Value == nil || len(*lhrtr.Value) == 0
 19805  }
 19806  
 19807  // hasNextLink returns true if the NextLink is not empty.
 19808  func (lhrtr ListHubRouteTablesResult) hasNextLink() bool {
 19809  	return lhrtr.NextLink != nil && len(*lhrtr.NextLink) != 0
 19810  }
 19811  
 19812  // listHubRouteTablesResultPreparer prepares a request to retrieve the next set of results.
 19813  // It returns nil if no more results exist.
 19814  func (lhrtr ListHubRouteTablesResult) listHubRouteTablesResultPreparer(ctx context.Context) (*http.Request, error) {
 19815  	if !lhrtr.hasNextLink() {
 19816  		return nil, nil
 19817  	}
 19818  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 19819  		autorest.AsJSON(),
 19820  		autorest.AsGet(),
 19821  		autorest.WithBaseURL(to.String(lhrtr.NextLink)))
 19822  }
 19823  
 19824  // ListHubRouteTablesResultPage contains a page of HubRouteTable values.
 19825  type ListHubRouteTablesResultPage struct {
 19826  	fn    func(context.Context, ListHubRouteTablesResult) (ListHubRouteTablesResult, error)
 19827  	lhrtr ListHubRouteTablesResult
 19828  }
 19829  
 19830  // NextWithContext advances to the next page of values.  If there was an error making
 19831  // the request the page does not advance and the error is returned.
 19832  func (page *ListHubRouteTablesResultPage) NextWithContext(ctx context.Context) (err error) {
 19833  	if tracing.IsEnabled() {
 19834  		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubRouteTablesResultPage.NextWithContext")
 19835  		defer func() {
 19836  			sc := -1
 19837  			if page.Response().Response.Response != nil {
 19838  				sc = page.Response().Response.Response.StatusCode
 19839  			}
 19840  			tracing.EndSpan(ctx, sc, err)
 19841  		}()
 19842  	}
 19843  	for {
 19844  		next, err := page.fn(ctx, page.lhrtr)
 19845  		if err != nil {
 19846  			return err
 19847  		}
 19848  		page.lhrtr = next
 19849  		if !next.hasNextLink() || !next.IsEmpty() {
 19850  			break
 19851  		}
 19852  	}
 19853  	return nil
 19854  }
 19855  
 19856  // Next advances to the next page of values.  If there was an error making
 19857  // the request the page does not advance and the error is returned.
 19858  // Deprecated: Use NextWithContext() instead.
 19859  func (page *ListHubRouteTablesResultPage) Next() error {
 19860  	return page.NextWithContext(context.Background())
 19861  }
 19862  
 19863  // NotDone returns true if the page enumeration should be started or is not yet complete.
 19864  func (page ListHubRouteTablesResultPage) NotDone() bool {
 19865  	return !page.lhrtr.IsEmpty()
 19866  }
 19867  
 19868  // Response returns the raw server response from the last page request.
 19869  func (page ListHubRouteTablesResultPage) Response() ListHubRouteTablesResult {
 19870  	return page.lhrtr
 19871  }
 19872  
 19873  // Values returns the slice of values for the current page or nil if there are no values.
 19874  func (page ListHubRouteTablesResultPage) Values() []HubRouteTable {
 19875  	if page.lhrtr.IsEmpty() {
 19876  		return nil
 19877  	}
 19878  	return *page.lhrtr.Value
 19879  }
 19880  
 19881  // Creates a new instance of the ListHubRouteTablesResultPage type.
 19882  func NewListHubRouteTablesResultPage(cur ListHubRouteTablesResult, getNextPage func(context.Context, ListHubRouteTablesResult) (ListHubRouteTablesResult, error)) ListHubRouteTablesResultPage {
 19883  	return ListHubRouteTablesResultPage{
 19884  		fn:    getNextPage,
 19885  		lhrtr: cur,
 19886  	}
 19887  }
 19888  
 19889  // ListHubVirtualNetworkConnectionsResult list of HubVirtualNetworkConnections and a URL nextLink to get
 19890  // the next set of results.
 19891  type ListHubVirtualNetworkConnectionsResult struct {
 19892  	autorest.Response `json:"-"`
 19893  	// Value - List of HubVirtualNetworkConnections.
 19894  	Value *[]HubVirtualNetworkConnection `json:"value,omitempty"`
 19895  	// NextLink - URL to get the next set of operation list results if there are any.
 19896  	NextLink *string `json:"nextLink,omitempty"`
 19897  }
 19898  
 19899  // ListHubVirtualNetworkConnectionsResultIterator provides access to a complete listing of
 19900  // HubVirtualNetworkConnection values.
 19901  type ListHubVirtualNetworkConnectionsResultIterator struct {
 19902  	i    int
 19903  	page ListHubVirtualNetworkConnectionsResultPage
 19904  }
 19905  
 19906  // NextWithContext advances to the next value.  If there was an error making
 19907  // the request the iterator does not advance and the error is returned.
 19908  func (iter *ListHubVirtualNetworkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
 19909  	if tracing.IsEnabled() {
 19910  		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultIterator.NextWithContext")
 19911  		defer func() {
 19912  			sc := -1
 19913  			if iter.Response().Response.Response != nil {
 19914  				sc = iter.Response().Response.Response.StatusCode
 19915  			}
 19916  			tracing.EndSpan(ctx, sc, err)
 19917  		}()
 19918  	}
 19919  	iter.i++
 19920  	if iter.i < len(iter.page.Values()) {
 19921  		return nil
 19922  	}
 19923  	err = iter.page.NextWithContext(ctx)
 19924  	if err != nil {
 19925  		iter.i--
 19926  		return err
 19927  	}
 19928  	iter.i = 0
 19929  	return nil
 19930  }
 19931  
 19932  // Next advances to the next value.  If there was an error making
 19933  // the request the iterator does not advance and the error is returned.
 19934  // Deprecated: Use NextWithContext() instead.
 19935  func (iter *ListHubVirtualNetworkConnectionsResultIterator) Next() error {
 19936  	return iter.NextWithContext(context.Background())
 19937  }
 19938  
 19939  // NotDone returns true if the enumeration should be started or is not yet complete.
 19940  func (iter ListHubVirtualNetworkConnectionsResultIterator) NotDone() bool {
 19941  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 19942  }
 19943  
 19944  // Response returns the raw server response from the last page request.
 19945  func (iter ListHubVirtualNetworkConnectionsResultIterator) Response() ListHubVirtualNetworkConnectionsResult {
 19946  	return iter.page.Response()
 19947  }
 19948  
 19949  // Value returns the current value or a zero-initialized value if the
 19950  // iterator has advanced beyond the end of the collection.
 19951  func (iter ListHubVirtualNetworkConnectionsResultIterator) Value() HubVirtualNetworkConnection {
 19952  	if !iter.page.NotDone() {
 19953  		return HubVirtualNetworkConnection{}
 19954  	}
 19955  	return iter.page.Values()[iter.i]
 19956  }
 19957  
 19958  // Creates a new instance of the ListHubVirtualNetworkConnectionsResultIterator type.
 19959  func NewListHubVirtualNetworkConnectionsResultIterator(page ListHubVirtualNetworkConnectionsResultPage) ListHubVirtualNetworkConnectionsResultIterator {
 19960  	return ListHubVirtualNetworkConnectionsResultIterator{page: page}
 19961  }
 19962  
 19963  // IsEmpty returns true if the ListResult contains no values.
 19964  func (lhvncr ListHubVirtualNetworkConnectionsResult) IsEmpty() bool {
 19965  	return lhvncr.Value == nil || len(*lhvncr.Value) == 0
 19966  }
 19967  
 19968  // hasNextLink returns true if the NextLink is not empty.
 19969  func (lhvncr ListHubVirtualNetworkConnectionsResult) hasNextLink() bool {
 19970  	return lhvncr.NextLink != nil && len(*lhvncr.NextLink) != 0
 19971  }
 19972  
 19973  // listHubVirtualNetworkConnectionsResultPreparer prepares a request to retrieve the next set of results.
 19974  // It returns nil if no more results exist.
 19975  func (lhvncr ListHubVirtualNetworkConnectionsResult) listHubVirtualNetworkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
 19976  	if !lhvncr.hasNextLink() {
 19977  		return nil, nil
 19978  	}
 19979  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 19980  		autorest.AsJSON(),
 19981  		autorest.AsGet(),
 19982  		autorest.WithBaseURL(to.String(lhvncr.NextLink)))
 19983  }
 19984  
 19985  // ListHubVirtualNetworkConnectionsResultPage contains a page of HubVirtualNetworkConnection values.
 19986  type ListHubVirtualNetworkConnectionsResultPage struct {
 19987  	fn     func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)
 19988  	lhvncr ListHubVirtualNetworkConnectionsResult
 19989  }
 19990  
 19991  // NextWithContext advances to the next page of values.  If there was an error making
 19992  // the request the page does not advance and the error is returned.
 19993  func (page *ListHubVirtualNetworkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
 19994  	if tracing.IsEnabled() {
 19995  		ctx = tracing.StartSpan(ctx, fqdn+"/ListHubVirtualNetworkConnectionsResultPage.NextWithContext")
 19996  		defer func() {
 19997  			sc := -1
 19998  			if page.Response().Response.Response != nil {
 19999  				sc = page.Response().Response.Response.StatusCode
 20000  			}
 20001  			tracing.EndSpan(ctx, sc, err)
 20002  		}()
 20003  	}
 20004  	for {
 20005  		next, err := page.fn(ctx, page.lhvncr)
 20006  		if err != nil {
 20007  			return err
 20008  		}
 20009  		page.lhvncr = next
 20010  		if !next.hasNextLink() || !next.IsEmpty() {
 20011  			break
 20012  		}
 20013  	}
 20014  	return nil
 20015  }
 20016  
 20017  // Next advances to the next page of values.  If there was an error making
 20018  // the request the page does not advance and the error is returned.
 20019  // Deprecated: Use NextWithContext() instead.
 20020  func (page *ListHubVirtualNetworkConnectionsResultPage) Next() error {
 20021  	return page.NextWithContext(context.Background())
 20022  }
 20023  
 20024  // NotDone returns true if the page enumeration should be started or is not yet complete.
 20025  func (page ListHubVirtualNetworkConnectionsResultPage) NotDone() bool {
 20026  	return !page.lhvncr.IsEmpty()
 20027  }
 20028  
 20029  // Response returns the raw server response from the last page request.
 20030  func (page ListHubVirtualNetworkConnectionsResultPage) Response() ListHubVirtualNetworkConnectionsResult {
 20031  	return page.lhvncr
 20032  }
 20033  
 20034  // Values returns the slice of values for the current page or nil if there are no values.
 20035  func (page ListHubVirtualNetworkConnectionsResultPage) Values() []HubVirtualNetworkConnection {
 20036  	if page.lhvncr.IsEmpty() {
 20037  		return nil
 20038  	}
 20039  	return *page.lhvncr.Value
 20040  }
 20041  
 20042  // Creates a new instance of the ListHubVirtualNetworkConnectionsResultPage type.
 20043  func NewListHubVirtualNetworkConnectionsResultPage(cur ListHubVirtualNetworkConnectionsResult, getNextPage func(context.Context, ListHubVirtualNetworkConnectionsResult) (ListHubVirtualNetworkConnectionsResult, error)) ListHubVirtualNetworkConnectionsResultPage {
 20044  	return ListHubVirtualNetworkConnectionsResultPage{
 20045  		fn:     getNextPage,
 20046  		lhvncr: cur,
 20047  	}
 20048  }
 20049  
 20050  // ListP2SVpnGatewaysResult result of the request to list P2SVpnGateways. It contains a list of
 20051  // P2SVpnGateways and a URL nextLink to get the next set of results.
 20052  type ListP2SVpnGatewaysResult struct {
 20053  	autorest.Response `json:"-"`
 20054  	// Value - List of P2SVpnGateways.
 20055  	Value *[]P2SVpnGateway `json:"value,omitempty"`
 20056  	// NextLink - URL to get the next set of operation list results if there are any.
 20057  	NextLink *string `json:"nextLink,omitempty"`
 20058  }
 20059  
 20060  // ListP2SVpnGatewaysResultIterator provides access to a complete listing of P2SVpnGateway values.
 20061  type ListP2SVpnGatewaysResultIterator struct {
 20062  	i    int
 20063  	page ListP2SVpnGatewaysResultPage
 20064  }
 20065  
 20066  // NextWithContext advances to the next value.  If there was an error making
 20067  // the request the iterator does not advance and the error is returned.
 20068  func (iter *ListP2SVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
 20069  	if tracing.IsEnabled() {
 20070  		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultIterator.NextWithContext")
 20071  		defer func() {
 20072  			sc := -1
 20073  			if iter.Response().Response.Response != nil {
 20074  				sc = iter.Response().Response.Response.StatusCode
 20075  			}
 20076  			tracing.EndSpan(ctx, sc, err)
 20077  		}()
 20078  	}
 20079  	iter.i++
 20080  	if iter.i < len(iter.page.Values()) {
 20081  		return nil
 20082  	}
 20083  	err = iter.page.NextWithContext(ctx)
 20084  	if err != nil {
 20085  		iter.i--
 20086  		return err
 20087  	}
 20088  	iter.i = 0
 20089  	return nil
 20090  }
 20091  
 20092  // Next advances to the next value.  If there was an error making
 20093  // the request the iterator does not advance and the error is returned.
 20094  // Deprecated: Use NextWithContext() instead.
 20095  func (iter *ListP2SVpnGatewaysResultIterator) Next() error {
 20096  	return iter.NextWithContext(context.Background())
 20097  }
 20098  
 20099  // NotDone returns true if the enumeration should be started or is not yet complete.
 20100  func (iter ListP2SVpnGatewaysResultIterator) NotDone() bool {
 20101  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 20102  }
 20103  
 20104  // Response returns the raw server response from the last page request.
 20105  func (iter ListP2SVpnGatewaysResultIterator) Response() ListP2SVpnGatewaysResult {
 20106  	return iter.page.Response()
 20107  }
 20108  
 20109  // Value returns the current value or a zero-initialized value if the
 20110  // iterator has advanced beyond the end of the collection.
 20111  func (iter ListP2SVpnGatewaysResultIterator) Value() P2SVpnGateway {
 20112  	if !iter.page.NotDone() {
 20113  		return P2SVpnGateway{}
 20114  	}
 20115  	return iter.page.Values()[iter.i]
 20116  }
 20117  
 20118  // Creates a new instance of the ListP2SVpnGatewaysResultIterator type.
 20119  func NewListP2SVpnGatewaysResultIterator(page ListP2SVpnGatewaysResultPage) ListP2SVpnGatewaysResultIterator {
 20120  	return ListP2SVpnGatewaysResultIterator{page: page}
 20121  }
 20122  
 20123  // IsEmpty returns true if the ListResult contains no values.
 20124  func (lpvgr ListP2SVpnGatewaysResult) IsEmpty() bool {
 20125  	return lpvgr.Value == nil || len(*lpvgr.Value) == 0
 20126  }
 20127  
 20128  // hasNextLink returns true if the NextLink is not empty.
 20129  func (lpvgr ListP2SVpnGatewaysResult) hasNextLink() bool {
 20130  	return lpvgr.NextLink != nil && len(*lpvgr.NextLink) != 0
 20131  }
 20132  
 20133  // listP2SVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
 20134  // It returns nil if no more results exist.
 20135  func (lpvgr ListP2SVpnGatewaysResult) listP2SVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
 20136  	if !lpvgr.hasNextLink() {
 20137  		return nil, nil
 20138  	}
 20139  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 20140  		autorest.AsJSON(),
 20141  		autorest.AsGet(),
 20142  		autorest.WithBaseURL(to.String(lpvgr.NextLink)))
 20143  }
 20144  
 20145  // ListP2SVpnGatewaysResultPage contains a page of P2SVpnGateway values.
 20146  type ListP2SVpnGatewaysResultPage struct {
 20147  	fn    func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)
 20148  	lpvgr ListP2SVpnGatewaysResult
 20149  }
 20150  
 20151  // NextWithContext advances to the next page of values.  If there was an error making
 20152  // the request the page does not advance and the error is returned.
 20153  func (page *ListP2SVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
 20154  	if tracing.IsEnabled() {
 20155  		ctx = tracing.StartSpan(ctx, fqdn+"/ListP2SVpnGatewaysResultPage.NextWithContext")
 20156  		defer func() {
 20157  			sc := -1
 20158  			if page.Response().Response.Response != nil {
 20159  				sc = page.Response().Response.Response.StatusCode
 20160  			}
 20161  			tracing.EndSpan(ctx, sc, err)
 20162  		}()
 20163  	}
 20164  	for {
 20165  		next, err := page.fn(ctx, page.lpvgr)
 20166  		if err != nil {
 20167  			return err
 20168  		}
 20169  		page.lpvgr = next
 20170  		if !next.hasNextLink() || !next.IsEmpty() {
 20171  			break
 20172  		}
 20173  	}
 20174  	return nil
 20175  }
 20176  
 20177  // Next advances to the next page of values.  If there was an error making
 20178  // the request the page does not advance and the error is returned.
 20179  // Deprecated: Use NextWithContext() instead.
 20180  func (page *ListP2SVpnGatewaysResultPage) Next() error {
 20181  	return page.NextWithContext(context.Background())
 20182  }
 20183  
 20184  // NotDone returns true if the page enumeration should be started or is not yet complete.
 20185  func (page ListP2SVpnGatewaysResultPage) NotDone() bool {
 20186  	return !page.lpvgr.IsEmpty()
 20187  }
 20188  
 20189  // Response returns the raw server response from the last page request.
 20190  func (page ListP2SVpnGatewaysResultPage) Response() ListP2SVpnGatewaysResult {
 20191  	return page.lpvgr
 20192  }
 20193  
 20194  // Values returns the slice of values for the current page or nil if there are no values.
 20195  func (page ListP2SVpnGatewaysResultPage) Values() []P2SVpnGateway {
 20196  	if page.lpvgr.IsEmpty() {
 20197  		return nil
 20198  	}
 20199  	return *page.lpvgr.Value
 20200  }
 20201  
 20202  // Creates a new instance of the ListP2SVpnGatewaysResultPage type.
 20203  func NewListP2SVpnGatewaysResultPage(cur ListP2SVpnGatewaysResult, getNextPage func(context.Context, ListP2SVpnGatewaysResult) (ListP2SVpnGatewaysResult, error)) ListP2SVpnGatewaysResultPage {
 20204  	return ListP2SVpnGatewaysResultPage{
 20205  		fn:    getNextPage,
 20206  		lpvgr: cur,
 20207  	}
 20208  }
 20209  
 20210  // ListString ...
 20211  type ListString struct {
 20212  	autorest.Response `json:"-"`
 20213  	Value             *[]string `json:"value,omitempty"`
 20214  }
 20215  
 20216  // ListVirtualHubRouteTableV2sResult list of VirtualHubRouteTableV2s and a URL nextLink to get the next set
 20217  // of results.
 20218  type ListVirtualHubRouteTableV2sResult struct {
 20219  	autorest.Response `json:"-"`
 20220  	// Value - List of VirtualHubRouteTableV2s.
 20221  	Value *[]VirtualHubRouteTableV2 `json:"value,omitempty"`
 20222  	// NextLink - URL to get the next set of operation list results if there are any.
 20223  	NextLink *string `json:"nextLink,omitempty"`
 20224  }
 20225  
 20226  // ListVirtualHubRouteTableV2sResultIterator provides access to a complete listing of
 20227  // VirtualHubRouteTableV2 values.
 20228  type ListVirtualHubRouteTableV2sResultIterator struct {
 20229  	i    int
 20230  	page ListVirtualHubRouteTableV2sResultPage
 20231  }
 20232  
 20233  // NextWithContext advances to the next value.  If there was an error making
 20234  // the request the iterator does not advance and the error is returned.
 20235  func (iter *ListVirtualHubRouteTableV2sResultIterator) NextWithContext(ctx context.Context) (err error) {
 20236  	if tracing.IsEnabled() {
 20237  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubRouteTableV2sResultIterator.NextWithContext")
 20238  		defer func() {
 20239  			sc := -1
 20240  			if iter.Response().Response.Response != nil {
 20241  				sc = iter.Response().Response.Response.StatusCode
 20242  			}
 20243  			tracing.EndSpan(ctx, sc, err)
 20244  		}()
 20245  	}
 20246  	iter.i++
 20247  	if iter.i < len(iter.page.Values()) {
 20248  		return nil
 20249  	}
 20250  	err = iter.page.NextWithContext(ctx)
 20251  	if err != nil {
 20252  		iter.i--
 20253  		return err
 20254  	}
 20255  	iter.i = 0
 20256  	return nil
 20257  }
 20258  
 20259  // Next advances to the next value.  If there was an error making
 20260  // the request the iterator does not advance and the error is returned.
 20261  // Deprecated: Use NextWithContext() instead.
 20262  func (iter *ListVirtualHubRouteTableV2sResultIterator) Next() error {
 20263  	return iter.NextWithContext(context.Background())
 20264  }
 20265  
 20266  // NotDone returns true if the enumeration should be started or is not yet complete.
 20267  func (iter ListVirtualHubRouteTableV2sResultIterator) NotDone() bool {
 20268  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 20269  }
 20270  
 20271  // Response returns the raw server response from the last page request.
 20272  func (iter ListVirtualHubRouteTableV2sResultIterator) Response() ListVirtualHubRouteTableV2sResult {
 20273  	return iter.page.Response()
 20274  }
 20275  
 20276  // Value returns the current value or a zero-initialized value if the
 20277  // iterator has advanced beyond the end of the collection.
 20278  func (iter ListVirtualHubRouteTableV2sResultIterator) Value() VirtualHubRouteTableV2 {
 20279  	if !iter.page.NotDone() {
 20280  		return VirtualHubRouteTableV2{}
 20281  	}
 20282  	return iter.page.Values()[iter.i]
 20283  }
 20284  
 20285  // Creates a new instance of the ListVirtualHubRouteTableV2sResultIterator type.
 20286  func NewListVirtualHubRouteTableV2sResultIterator(page ListVirtualHubRouteTableV2sResultPage) ListVirtualHubRouteTableV2sResultIterator {
 20287  	return ListVirtualHubRouteTableV2sResultIterator{page: page}
 20288  }
 20289  
 20290  // IsEmpty returns true if the ListResult contains no values.
 20291  func (lvhrtvr ListVirtualHubRouteTableV2sResult) IsEmpty() bool {
 20292  	return lvhrtvr.Value == nil || len(*lvhrtvr.Value) == 0
 20293  }
 20294  
 20295  // hasNextLink returns true if the NextLink is not empty.
 20296  func (lvhrtvr ListVirtualHubRouteTableV2sResult) hasNextLink() bool {
 20297  	return lvhrtvr.NextLink != nil && len(*lvhrtvr.NextLink) != 0
 20298  }
 20299  
 20300  // listVirtualHubRouteTableV2sResultPreparer prepares a request to retrieve the next set of results.
 20301  // It returns nil if no more results exist.
 20302  func (lvhrtvr ListVirtualHubRouteTableV2sResult) listVirtualHubRouteTableV2sResultPreparer(ctx context.Context) (*http.Request, error) {
 20303  	if !lvhrtvr.hasNextLink() {
 20304  		return nil, nil
 20305  	}
 20306  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 20307  		autorest.AsJSON(),
 20308  		autorest.AsGet(),
 20309  		autorest.WithBaseURL(to.String(lvhrtvr.NextLink)))
 20310  }
 20311  
 20312  // ListVirtualHubRouteTableV2sResultPage contains a page of VirtualHubRouteTableV2 values.
 20313  type ListVirtualHubRouteTableV2sResultPage struct {
 20314  	fn      func(context.Context, ListVirtualHubRouteTableV2sResult) (ListVirtualHubRouteTableV2sResult, error)
 20315  	lvhrtvr ListVirtualHubRouteTableV2sResult
 20316  }
 20317  
 20318  // NextWithContext advances to the next page of values.  If there was an error making
 20319  // the request the page does not advance and the error is returned.
 20320  func (page *ListVirtualHubRouteTableV2sResultPage) NextWithContext(ctx context.Context) (err error) {
 20321  	if tracing.IsEnabled() {
 20322  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubRouteTableV2sResultPage.NextWithContext")
 20323  		defer func() {
 20324  			sc := -1
 20325  			if page.Response().Response.Response != nil {
 20326  				sc = page.Response().Response.Response.StatusCode
 20327  			}
 20328  			tracing.EndSpan(ctx, sc, err)
 20329  		}()
 20330  	}
 20331  	for {
 20332  		next, err := page.fn(ctx, page.lvhrtvr)
 20333  		if err != nil {
 20334  			return err
 20335  		}
 20336  		page.lvhrtvr = next
 20337  		if !next.hasNextLink() || !next.IsEmpty() {
 20338  			break
 20339  		}
 20340  	}
 20341  	return nil
 20342  }
 20343  
 20344  // Next advances to the next page of values.  If there was an error making
 20345  // the request the page does not advance and the error is returned.
 20346  // Deprecated: Use NextWithContext() instead.
 20347  func (page *ListVirtualHubRouteTableV2sResultPage) Next() error {
 20348  	return page.NextWithContext(context.Background())
 20349  }
 20350  
 20351  // NotDone returns true if the page enumeration should be started or is not yet complete.
 20352  func (page ListVirtualHubRouteTableV2sResultPage) NotDone() bool {
 20353  	return !page.lvhrtvr.IsEmpty()
 20354  }
 20355  
 20356  // Response returns the raw server response from the last page request.
 20357  func (page ListVirtualHubRouteTableV2sResultPage) Response() ListVirtualHubRouteTableV2sResult {
 20358  	return page.lvhrtvr
 20359  }
 20360  
 20361  // Values returns the slice of values for the current page or nil if there are no values.
 20362  func (page ListVirtualHubRouteTableV2sResultPage) Values() []VirtualHubRouteTableV2 {
 20363  	if page.lvhrtvr.IsEmpty() {
 20364  		return nil
 20365  	}
 20366  	return *page.lvhrtvr.Value
 20367  }
 20368  
 20369  // Creates a new instance of the ListVirtualHubRouteTableV2sResultPage type.
 20370  func NewListVirtualHubRouteTableV2sResultPage(cur ListVirtualHubRouteTableV2sResult, getNextPage func(context.Context, ListVirtualHubRouteTableV2sResult) (ListVirtualHubRouteTableV2sResult, error)) ListVirtualHubRouteTableV2sResultPage {
 20371  	return ListVirtualHubRouteTableV2sResultPage{
 20372  		fn:      getNextPage,
 20373  		lvhrtvr: cur,
 20374  	}
 20375  }
 20376  
 20377  // ListVirtualHubsResult result of the request to list VirtualHubs. It contains a list of VirtualHubs and a
 20378  // URL nextLink to get the next set of results.
 20379  type ListVirtualHubsResult struct {
 20380  	autorest.Response `json:"-"`
 20381  	// Value - List of VirtualHubs.
 20382  	Value *[]VirtualHub `json:"value,omitempty"`
 20383  	// NextLink - URL to get the next set of operation list results if there are any.
 20384  	NextLink *string `json:"nextLink,omitempty"`
 20385  }
 20386  
 20387  // ListVirtualHubsResultIterator provides access to a complete listing of VirtualHub values.
 20388  type ListVirtualHubsResultIterator struct {
 20389  	i    int
 20390  	page ListVirtualHubsResultPage
 20391  }
 20392  
 20393  // NextWithContext advances to the next value.  If there was an error making
 20394  // the request the iterator does not advance and the error is returned.
 20395  func (iter *ListVirtualHubsResultIterator) NextWithContext(ctx context.Context) (err error) {
 20396  	if tracing.IsEnabled() {
 20397  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultIterator.NextWithContext")
 20398  		defer func() {
 20399  			sc := -1
 20400  			if iter.Response().Response.Response != nil {
 20401  				sc = iter.Response().Response.Response.StatusCode
 20402  			}
 20403  			tracing.EndSpan(ctx, sc, err)
 20404  		}()
 20405  	}
 20406  	iter.i++
 20407  	if iter.i < len(iter.page.Values()) {
 20408  		return nil
 20409  	}
 20410  	err = iter.page.NextWithContext(ctx)
 20411  	if err != nil {
 20412  		iter.i--
 20413  		return err
 20414  	}
 20415  	iter.i = 0
 20416  	return nil
 20417  }
 20418  
 20419  // Next advances to the next value.  If there was an error making
 20420  // the request the iterator does not advance and the error is returned.
 20421  // Deprecated: Use NextWithContext() instead.
 20422  func (iter *ListVirtualHubsResultIterator) Next() error {
 20423  	return iter.NextWithContext(context.Background())
 20424  }
 20425  
 20426  // NotDone returns true if the enumeration should be started or is not yet complete.
 20427  func (iter ListVirtualHubsResultIterator) NotDone() bool {
 20428  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 20429  }
 20430  
 20431  // Response returns the raw server response from the last page request.
 20432  func (iter ListVirtualHubsResultIterator) Response() ListVirtualHubsResult {
 20433  	return iter.page.Response()
 20434  }
 20435  
 20436  // Value returns the current value or a zero-initialized value if the
 20437  // iterator has advanced beyond the end of the collection.
 20438  func (iter ListVirtualHubsResultIterator) Value() VirtualHub {
 20439  	if !iter.page.NotDone() {
 20440  		return VirtualHub{}
 20441  	}
 20442  	return iter.page.Values()[iter.i]
 20443  }
 20444  
 20445  // Creates a new instance of the ListVirtualHubsResultIterator type.
 20446  func NewListVirtualHubsResultIterator(page ListVirtualHubsResultPage) ListVirtualHubsResultIterator {
 20447  	return ListVirtualHubsResultIterator{page: page}
 20448  }
 20449  
 20450  // IsEmpty returns true if the ListResult contains no values.
 20451  func (lvhr ListVirtualHubsResult) IsEmpty() bool {
 20452  	return lvhr.Value == nil || len(*lvhr.Value) == 0
 20453  }
 20454  
 20455  // hasNextLink returns true if the NextLink is not empty.
 20456  func (lvhr ListVirtualHubsResult) hasNextLink() bool {
 20457  	return lvhr.NextLink != nil && len(*lvhr.NextLink) != 0
 20458  }
 20459  
 20460  // listVirtualHubsResultPreparer prepares a request to retrieve the next set of results.
 20461  // It returns nil if no more results exist.
 20462  func (lvhr ListVirtualHubsResult) listVirtualHubsResultPreparer(ctx context.Context) (*http.Request, error) {
 20463  	if !lvhr.hasNextLink() {
 20464  		return nil, nil
 20465  	}
 20466  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 20467  		autorest.AsJSON(),
 20468  		autorest.AsGet(),
 20469  		autorest.WithBaseURL(to.String(lvhr.NextLink)))
 20470  }
 20471  
 20472  // ListVirtualHubsResultPage contains a page of VirtualHub values.
 20473  type ListVirtualHubsResultPage struct {
 20474  	fn   func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)
 20475  	lvhr ListVirtualHubsResult
 20476  }
 20477  
 20478  // NextWithContext advances to the next page of values.  If there was an error making
 20479  // the request the page does not advance and the error is returned.
 20480  func (page *ListVirtualHubsResultPage) NextWithContext(ctx context.Context) (err error) {
 20481  	if tracing.IsEnabled() {
 20482  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualHubsResultPage.NextWithContext")
 20483  		defer func() {
 20484  			sc := -1
 20485  			if page.Response().Response.Response != nil {
 20486  				sc = page.Response().Response.Response.StatusCode
 20487  			}
 20488  			tracing.EndSpan(ctx, sc, err)
 20489  		}()
 20490  	}
 20491  	for {
 20492  		next, err := page.fn(ctx, page.lvhr)
 20493  		if err != nil {
 20494  			return err
 20495  		}
 20496  		page.lvhr = next
 20497  		if !next.hasNextLink() || !next.IsEmpty() {
 20498  			break
 20499  		}
 20500  	}
 20501  	return nil
 20502  }
 20503  
 20504  // Next advances to the next page of values.  If there was an error making
 20505  // the request the page does not advance and the error is returned.
 20506  // Deprecated: Use NextWithContext() instead.
 20507  func (page *ListVirtualHubsResultPage) Next() error {
 20508  	return page.NextWithContext(context.Background())
 20509  }
 20510  
 20511  // NotDone returns true if the page enumeration should be started or is not yet complete.
 20512  func (page ListVirtualHubsResultPage) NotDone() bool {
 20513  	return !page.lvhr.IsEmpty()
 20514  }
 20515  
 20516  // Response returns the raw server response from the last page request.
 20517  func (page ListVirtualHubsResultPage) Response() ListVirtualHubsResult {
 20518  	return page.lvhr
 20519  }
 20520  
 20521  // Values returns the slice of values for the current page or nil if there are no values.
 20522  func (page ListVirtualHubsResultPage) Values() []VirtualHub {
 20523  	if page.lvhr.IsEmpty() {
 20524  		return nil
 20525  	}
 20526  	return *page.lvhr.Value
 20527  }
 20528  
 20529  // Creates a new instance of the ListVirtualHubsResultPage type.
 20530  func NewListVirtualHubsResultPage(cur ListVirtualHubsResult, getNextPage func(context.Context, ListVirtualHubsResult) (ListVirtualHubsResult, error)) ListVirtualHubsResultPage {
 20531  	return ListVirtualHubsResultPage{
 20532  		fn:   getNextPage,
 20533  		lvhr: cur,
 20534  	}
 20535  }
 20536  
 20537  // ListVirtualWANsResult result of the request to list VirtualWANs. It contains a list of VirtualWANs and a
 20538  // URL nextLink to get the next set of results.
 20539  type ListVirtualWANsResult struct {
 20540  	autorest.Response `json:"-"`
 20541  	// Value - List of VirtualWANs.
 20542  	Value *[]VirtualWAN `json:"value,omitempty"`
 20543  	// NextLink - URL to get the next set of operation list results if there are any.
 20544  	NextLink *string `json:"nextLink,omitempty"`
 20545  }
 20546  
 20547  // ListVirtualWANsResultIterator provides access to a complete listing of VirtualWAN values.
 20548  type ListVirtualWANsResultIterator struct {
 20549  	i    int
 20550  	page ListVirtualWANsResultPage
 20551  }
 20552  
 20553  // NextWithContext advances to the next value.  If there was an error making
 20554  // the request the iterator does not advance and the error is returned.
 20555  func (iter *ListVirtualWANsResultIterator) NextWithContext(ctx context.Context) (err error) {
 20556  	if tracing.IsEnabled() {
 20557  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultIterator.NextWithContext")
 20558  		defer func() {
 20559  			sc := -1
 20560  			if iter.Response().Response.Response != nil {
 20561  				sc = iter.Response().Response.Response.StatusCode
 20562  			}
 20563  			tracing.EndSpan(ctx, sc, err)
 20564  		}()
 20565  	}
 20566  	iter.i++
 20567  	if iter.i < len(iter.page.Values()) {
 20568  		return nil
 20569  	}
 20570  	err = iter.page.NextWithContext(ctx)
 20571  	if err != nil {
 20572  		iter.i--
 20573  		return err
 20574  	}
 20575  	iter.i = 0
 20576  	return nil
 20577  }
 20578  
 20579  // Next advances to the next value.  If there was an error making
 20580  // the request the iterator does not advance and the error is returned.
 20581  // Deprecated: Use NextWithContext() instead.
 20582  func (iter *ListVirtualWANsResultIterator) Next() error {
 20583  	return iter.NextWithContext(context.Background())
 20584  }
 20585  
 20586  // NotDone returns true if the enumeration should be started or is not yet complete.
 20587  func (iter ListVirtualWANsResultIterator) NotDone() bool {
 20588  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 20589  }
 20590  
 20591  // Response returns the raw server response from the last page request.
 20592  func (iter ListVirtualWANsResultIterator) Response() ListVirtualWANsResult {
 20593  	return iter.page.Response()
 20594  }
 20595  
 20596  // Value returns the current value or a zero-initialized value if the
 20597  // iterator has advanced beyond the end of the collection.
 20598  func (iter ListVirtualWANsResultIterator) Value() VirtualWAN {
 20599  	if !iter.page.NotDone() {
 20600  		return VirtualWAN{}
 20601  	}
 20602  	return iter.page.Values()[iter.i]
 20603  }
 20604  
 20605  // Creates a new instance of the ListVirtualWANsResultIterator type.
 20606  func NewListVirtualWANsResultIterator(page ListVirtualWANsResultPage) ListVirtualWANsResultIterator {
 20607  	return ListVirtualWANsResultIterator{page: page}
 20608  }
 20609  
 20610  // IsEmpty returns true if the ListResult contains no values.
 20611  func (lvwnr ListVirtualWANsResult) IsEmpty() bool {
 20612  	return lvwnr.Value == nil || len(*lvwnr.Value) == 0
 20613  }
 20614  
 20615  // hasNextLink returns true if the NextLink is not empty.
 20616  func (lvwnr ListVirtualWANsResult) hasNextLink() bool {
 20617  	return lvwnr.NextLink != nil && len(*lvwnr.NextLink) != 0
 20618  }
 20619  
 20620  // listVirtualWANsResultPreparer prepares a request to retrieve the next set of results.
 20621  // It returns nil if no more results exist.
 20622  func (lvwnr ListVirtualWANsResult) listVirtualWANsResultPreparer(ctx context.Context) (*http.Request, error) {
 20623  	if !lvwnr.hasNextLink() {
 20624  		return nil, nil
 20625  	}
 20626  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 20627  		autorest.AsJSON(),
 20628  		autorest.AsGet(),
 20629  		autorest.WithBaseURL(to.String(lvwnr.NextLink)))
 20630  }
 20631  
 20632  // ListVirtualWANsResultPage contains a page of VirtualWAN values.
 20633  type ListVirtualWANsResultPage struct {
 20634  	fn    func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)
 20635  	lvwnr ListVirtualWANsResult
 20636  }
 20637  
 20638  // NextWithContext advances to the next page of values.  If there was an error making
 20639  // the request the page does not advance and the error is returned.
 20640  func (page *ListVirtualWANsResultPage) NextWithContext(ctx context.Context) (err error) {
 20641  	if tracing.IsEnabled() {
 20642  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVirtualWANsResultPage.NextWithContext")
 20643  		defer func() {
 20644  			sc := -1
 20645  			if page.Response().Response.Response != nil {
 20646  				sc = page.Response().Response.Response.StatusCode
 20647  			}
 20648  			tracing.EndSpan(ctx, sc, err)
 20649  		}()
 20650  	}
 20651  	for {
 20652  		next, err := page.fn(ctx, page.lvwnr)
 20653  		if err != nil {
 20654  			return err
 20655  		}
 20656  		page.lvwnr = next
 20657  		if !next.hasNextLink() || !next.IsEmpty() {
 20658  			break
 20659  		}
 20660  	}
 20661  	return nil
 20662  }
 20663  
 20664  // Next advances to the next page of values.  If there was an error making
 20665  // the request the page does not advance and the error is returned.
 20666  // Deprecated: Use NextWithContext() instead.
 20667  func (page *ListVirtualWANsResultPage) Next() error {
 20668  	return page.NextWithContext(context.Background())
 20669  }
 20670  
 20671  // NotDone returns true if the page enumeration should be started or is not yet complete.
 20672  func (page ListVirtualWANsResultPage) NotDone() bool {
 20673  	return !page.lvwnr.IsEmpty()
 20674  }
 20675  
 20676  // Response returns the raw server response from the last page request.
 20677  func (page ListVirtualWANsResultPage) Response() ListVirtualWANsResult {
 20678  	return page.lvwnr
 20679  }
 20680  
 20681  // Values returns the slice of values for the current page or nil if there are no values.
 20682  func (page ListVirtualWANsResultPage) Values() []VirtualWAN {
 20683  	if page.lvwnr.IsEmpty() {
 20684  		return nil
 20685  	}
 20686  	return *page.lvwnr.Value
 20687  }
 20688  
 20689  // Creates a new instance of the ListVirtualWANsResultPage type.
 20690  func NewListVirtualWANsResultPage(cur ListVirtualWANsResult, getNextPage func(context.Context, ListVirtualWANsResult) (ListVirtualWANsResult, error)) ListVirtualWANsResultPage {
 20691  	return ListVirtualWANsResultPage{
 20692  		fn:    getNextPage,
 20693  		lvwnr: cur,
 20694  	}
 20695  }
 20696  
 20697  // ListVpnConnectionsResult result of the request to list all vpn connections to a virtual wan vpn gateway.
 20698  // It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
 20699  type ListVpnConnectionsResult struct {
 20700  	autorest.Response `json:"-"`
 20701  	// Value - List of Vpn Connections.
 20702  	Value *[]VpnConnection `json:"value,omitempty"`
 20703  	// NextLink - URL to get the next set of operation list results if there are any.
 20704  	NextLink *string `json:"nextLink,omitempty"`
 20705  }
 20706  
 20707  // ListVpnConnectionsResultIterator provides access to a complete listing of VpnConnection values.
 20708  type ListVpnConnectionsResultIterator struct {
 20709  	i    int
 20710  	page ListVpnConnectionsResultPage
 20711  }
 20712  
 20713  // NextWithContext advances to the next value.  If there was an error making
 20714  // the request the iterator does not advance and the error is returned.
 20715  func (iter *ListVpnConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
 20716  	if tracing.IsEnabled() {
 20717  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultIterator.NextWithContext")
 20718  		defer func() {
 20719  			sc := -1
 20720  			if iter.Response().Response.Response != nil {
 20721  				sc = iter.Response().Response.Response.StatusCode
 20722  			}
 20723  			tracing.EndSpan(ctx, sc, err)
 20724  		}()
 20725  	}
 20726  	iter.i++
 20727  	if iter.i < len(iter.page.Values()) {
 20728  		return nil
 20729  	}
 20730  	err = iter.page.NextWithContext(ctx)
 20731  	if err != nil {
 20732  		iter.i--
 20733  		return err
 20734  	}
 20735  	iter.i = 0
 20736  	return nil
 20737  }
 20738  
 20739  // Next advances to the next value.  If there was an error making
 20740  // the request the iterator does not advance and the error is returned.
 20741  // Deprecated: Use NextWithContext() instead.
 20742  func (iter *ListVpnConnectionsResultIterator) Next() error {
 20743  	return iter.NextWithContext(context.Background())
 20744  }
 20745  
 20746  // NotDone returns true if the enumeration should be started or is not yet complete.
 20747  func (iter ListVpnConnectionsResultIterator) NotDone() bool {
 20748  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 20749  }
 20750  
 20751  // Response returns the raw server response from the last page request.
 20752  func (iter ListVpnConnectionsResultIterator) Response() ListVpnConnectionsResult {
 20753  	return iter.page.Response()
 20754  }
 20755  
 20756  // Value returns the current value or a zero-initialized value if the
 20757  // iterator has advanced beyond the end of the collection.
 20758  func (iter ListVpnConnectionsResultIterator) Value() VpnConnection {
 20759  	if !iter.page.NotDone() {
 20760  		return VpnConnection{}
 20761  	}
 20762  	return iter.page.Values()[iter.i]
 20763  }
 20764  
 20765  // Creates a new instance of the ListVpnConnectionsResultIterator type.
 20766  func NewListVpnConnectionsResultIterator(page ListVpnConnectionsResultPage) ListVpnConnectionsResultIterator {
 20767  	return ListVpnConnectionsResultIterator{page: page}
 20768  }
 20769  
 20770  // IsEmpty returns true if the ListResult contains no values.
 20771  func (lvcr ListVpnConnectionsResult) IsEmpty() bool {
 20772  	return lvcr.Value == nil || len(*lvcr.Value) == 0
 20773  }
 20774  
 20775  // hasNextLink returns true if the NextLink is not empty.
 20776  func (lvcr ListVpnConnectionsResult) hasNextLink() bool {
 20777  	return lvcr.NextLink != nil && len(*lvcr.NextLink) != 0
 20778  }
 20779  
 20780  // listVpnConnectionsResultPreparer prepares a request to retrieve the next set of results.
 20781  // It returns nil if no more results exist.
 20782  func (lvcr ListVpnConnectionsResult) listVpnConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
 20783  	if !lvcr.hasNextLink() {
 20784  		return nil, nil
 20785  	}
 20786  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 20787  		autorest.AsJSON(),
 20788  		autorest.AsGet(),
 20789  		autorest.WithBaseURL(to.String(lvcr.NextLink)))
 20790  }
 20791  
 20792  // ListVpnConnectionsResultPage contains a page of VpnConnection values.
 20793  type ListVpnConnectionsResultPage struct {
 20794  	fn   func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)
 20795  	lvcr ListVpnConnectionsResult
 20796  }
 20797  
 20798  // NextWithContext advances to the next page of values.  If there was an error making
 20799  // the request the page does not advance and the error is returned.
 20800  func (page *ListVpnConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
 20801  	if tracing.IsEnabled() {
 20802  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnConnectionsResultPage.NextWithContext")
 20803  		defer func() {
 20804  			sc := -1
 20805  			if page.Response().Response.Response != nil {
 20806  				sc = page.Response().Response.Response.StatusCode
 20807  			}
 20808  			tracing.EndSpan(ctx, sc, err)
 20809  		}()
 20810  	}
 20811  	for {
 20812  		next, err := page.fn(ctx, page.lvcr)
 20813  		if err != nil {
 20814  			return err
 20815  		}
 20816  		page.lvcr = next
 20817  		if !next.hasNextLink() || !next.IsEmpty() {
 20818  			break
 20819  		}
 20820  	}
 20821  	return nil
 20822  }
 20823  
 20824  // Next advances to the next page of values.  If there was an error making
 20825  // the request the page does not advance and the error is returned.
 20826  // Deprecated: Use NextWithContext() instead.
 20827  func (page *ListVpnConnectionsResultPage) Next() error {
 20828  	return page.NextWithContext(context.Background())
 20829  }
 20830  
 20831  // NotDone returns true if the page enumeration should be started or is not yet complete.
 20832  func (page ListVpnConnectionsResultPage) NotDone() bool {
 20833  	return !page.lvcr.IsEmpty()
 20834  }
 20835  
 20836  // Response returns the raw server response from the last page request.
 20837  func (page ListVpnConnectionsResultPage) Response() ListVpnConnectionsResult {
 20838  	return page.lvcr
 20839  }
 20840  
 20841  // Values returns the slice of values for the current page or nil if there are no values.
 20842  func (page ListVpnConnectionsResultPage) Values() []VpnConnection {
 20843  	if page.lvcr.IsEmpty() {
 20844  		return nil
 20845  	}
 20846  	return *page.lvcr.Value
 20847  }
 20848  
 20849  // Creates a new instance of the ListVpnConnectionsResultPage type.
 20850  func NewListVpnConnectionsResultPage(cur ListVpnConnectionsResult, getNextPage func(context.Context, ListVpnConnectionsResult) (ListVpnConnectionsResult, error)) ListVpnConnectionsResultPage {
 20851  	return ListVpnConnectionsResultPage{
 20852  		fn:   getNextPage,
 20853  		lvcr: cur,
 20854  	}
 20855  }
 20856  
 20857  // ListVpnGatewaysResult result of the request to list VpnGateways. It contains a list of VpnGateways and a
 20858  // URL nextLink to get the next set of results.
 20859  type ListVpnGatewaysResult struct {
 20860  	autorest.Response `json:"-"`
 20861  	// Value - List of VpnGateways.
 20862  	Value *[]VpnGateway `json:"value,omitempty"`
 20863  	// NextLink - URL to get the next set of operation list results if there are any.
 20864  	NextLink *string `json:"nextLink,omitempty"`
 20865  }
 20866  
 20867  // ListVpnGatewaysResultIterator provides access to a complete listing of VpnGateway values.
 20868  type ListVpnGatewaysResultIterator struct {
 20869  	i    int
 20870  	page ListVpnGatewaysResultPage
 20871  }
 20872  
 20873  // NextWithContext advances to the next value.  If there was an error making
 20874  // the request the iterator does not advance and the error is returned.
 20875  func (iter *ListVpnGatewaysResultIterator) NextWithContext(ctx context.Context) (err error) {
 20876  	if tracing.IsEnabled() {
 20877  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultIterator.NextWithContext")
 20878  		defer func() {
 20879  			sc := -1
 20880  			if iter.Response().Response.Response != nil {
 20881  				sc = iter.Response().Response.Response.StatusCode
 20882  			}
 20883  			tracing.EndSpan(ctx, sc, err)
 20884  		}()
 20885  	}
 20886  	iter.i++
 20887  	if iter.i < len(iter.page.Values()) {
 20888  		return nil
 20889  	}
 20890  	err = iter.page.NextWithContext(ctx)
 20891  	if err != nil {
 20892  		iter.i--
 20893  		return err
 20894  	}
 20895  	iter.i = 0
 20896  	return nil
 20897  }
 20898  
 20899  // Next advances to the next value.  If there was an error making
 20900  // the request the iterator does not advance and the error is returned.
 20901  // Deprecated: Use NextWithContext() instead.
 20902  func (iter *ListVpnGatewaysResultIterator) Next() error {
 20903  	return iter.NextWithContext(context.Background())
 20904  }
 20905  
 20906  // NotDone returns true if the enumeration should be started or is not yet complete.
 20907  func (iter ListVpnGatewaysResultIterator) NotDone() bool {
 20908  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 20909  }
 20910  
 20911  // Response returns the raw server response from the last page request.
 20912  func (iter ListVpnGatewaysResultIterator) Response() ListVpnGatewaysResult {
 20913  	return iter.page.Response()
 20914  }
 20915  
 20916  // Value returns the current value or a zero-initialized value if the
 20917  // iterator has advanced beyond the end of the collection.
 20918  func (iter ListVpnGatewaysResultIterator) Value() VpnGateway {
 20919  	if !iter.page.NotDone() {
 20920  		return VpnGateway{}
 20921  	}
 20922  	return iter.page.Values()[iter.i]
 20923  }
 20924  
 20925  // Creates a new instance of the ListVpnGatewaysResultIterator type.
 20926  func NewListVpnGatewaysResultIterator(page ListVpnGatewaysResultPage) ListVpnGatewaysResultIterator {
 20927  	return ListVpnGatewaysResultIterator{page: page}
 20928  }
 20929  
 20930  // IsEmpty returns true if the ListResult contains no values.
 20931  func (lvgr ListVpnGatewaysResult) IsEmpty() bool {
 20932  	return lvgr.Value == nil || len(*lvgr.Value) == 0
 20933  }
 20934  
 20935  // hasNextLink returns true if the NextLink is not empty.
 20936  func (lvgr ListVpnGatewaysResult) hasNextLink() bool {
 20937  	return lvgr.NextLink != nil && len(*lvgr.NextLink) != 0
 20938  }
 20939  
 20940  // listVpnGatewaysResultPreparer prepares a request to retrieve the next set of results.
 20941  // It returns nil if no more results exist.
 20942  func (lvgr ListVpnGatewaysResult) listVpnGatewaysResultPreparer(ctx context.Context) (*http.Request, error) {
 20943  	if !lvgr.hasNextLink() {
 20944  		return nil, nil
 20945  	}
 20946  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 20947  		autorest.AsJSON(),
 20948  		autorest.AsGet(),
 20949  		autorest.WithBaseURL(to.String(lvgr.NextLink)))
 20950  }
 20951  
 20952  // ListVpnGatewaysResultPage contains a page of VpnGateway values.
 20953  type ListVpnGatewaysResultPage struct {
 20954  	fn   func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)
 20955  	lvgr ListVpnGatewaysResult
 20956  }
 20957  
 20958  // NextWithContext advances to the next page of values.  If there was an error making
 20959  // the request the page does not advance and the error is returned.
 20960  func (page *ListVpnGatewaysResultPage) NextWithContext(ctx context.Context) (err error) {
 20961  	if tracing.IsEnabled() {
 20962  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnGatewaysResultPage.NextWithContext")
 20963  		defer func() {
 20964  			sc := -1
 20965  			if page.Response().Response.Response != nil {
 20966  				sc = page.Response().Response.Response.StatusCode
 20967  			}
 20968  			tracing.EndSpan(ctx, sc, err)
 20969  		}()
 20970  	}
 20971  	for {
 20972  		next, err := page.fn(ctx, page.lvgr)
 20973  		if err != nil {
 20974  			return err
 20975  		}
 20976  		page.lvgr = next
 20977  		if !next.hasNextLink() || !next.IsEmpty() {
 20978  			break
 20979  		}
 20980  	}
 20981  	return nil
 20982  }
 20983  
 20984  // Next advances to the next page of values.  If there was an error making
 20985  // the request the page does not advance and the error is returned.
 20986  // Deprecated: Use NextWithContext() instead.
 20987  func (page *ListVpnGatewaysResultPage) Next() error {
 20988  	return page.NextWithContext(context.Background())
 20989  }
 20990  
 20991  // NotDone returns true if the page enumeration should be started or is not yet complete.
 20992  func (page ListVpnGatewaysResultPage) NotDone() bool {
 20993  	return !page.lvgr.IsEmpty()
 20994  }
 20995  
 20996  // Response returns the raw server response from the last page request.
 20997  func (page ListVpnGatewaysResultPage) Response() ListVpnGatewaysResult {
 20998  	return page.lvgr
 20999  }
 21000  
 21001  // Values returns the slice of values for the current page or nil if there are no values.
 21002  func (page ListVpnGatewaysResultPage) Values() []VpnGateway {
 21003  	if page.lvgr.IsEmpty() {
 21004  		return nil
 21005  	}
 21006  	return *page.lvgr.Value
 21007  }
 21008  
 21009  // Creates a new instance of the ListVpnGatewaysResultPage type.
 21010  func NewListVpnGatewaysResultPage(cur ListVpnGatewaysResult, getNextPage func(context.Context, ListVpnGatewaysResult) (ListVpnGatewaysResult, error)) ListVpnGatewaysResultPage {
 21011  	return ListVpnGatewaysResultPage{
 21012  		fn:   getNextPage,
 21013  		lvgr: cur,
 21014  	}
 21015  }
 21016  
 21017  // ListVpnServerConfigurationsResult result of the request to list all VpnServerConfigurations. It contains
 21018  // a list of VpnServerConfigurations and a URL nextLink to get the next set of results.
 21019  type ListVpnServerConfigurationsResult struct {
 21020  	autorest.Response `json:"-"`
 21021  	// Value - List of VpnServerConfigurations.
 21022  	Value *[]VpnServerConfiguration `json:"value,omitempty"`
 21023  	// NextLink - URL to get the next set of operation list results if there are any.
 21024  	NextLink *string `json:"nextLink,omitempty"`
 21025  }
 21026  
 21027  // ListVpnServerConfigurationsResultIterator provides access to a complete listing of
 21028  // VpnServerConfiguration values.
 21029  type ListVpnServerConfigurationsResultIterator struct {
 21030  	i    int
 21031  	page ListVpnServerConfigurationsResultPage
 21032  }
 21033  
 21034  // NextWithContext advances to the next value.  If there was an error making
 21035  // the request the iterator does not advance and the error is returned.
 21036  func (iter *ListVpnServerConfigurationsResultIterator) NextWithContext(ctx context.Context) (err error) {
 21037  	if tracing.IsEnabled() {
 21038  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnServerConfigurationsResultIterator.NextWithContext")
 21039  		defer func() {
 21040  			sc := -1
 21041  			if iter.Response().Response.Response != nil {
 21042  				sc = iter.Response().Response.Response.StatusCode
 21043  			}
 21044  			tracing.EndSpan(ctx, sc, err)
 21045  		}()
 21046  	}
 21047  	iter.i++
 21048  	if iter.i < len(iter.page.Values()) {
 21049  		return nil
 21050  	}
 21051  	err = iter.page.NextWithContext(ctx)
 21052  	if err != nil {
 21053  		iter.i--
 21054  		return err
 21055  	}
 21056  	iter.i = 0
 21057  	return nil
 21058  }
 21059  
 21060  // Next advances to the next value.  If there was an error making
 21061  // the request the iterator does not advance and the error is returned.
 21062  // Deprecated: Use NextWithContext() instead.
 21063  func (iter *ListVpnServerConfigurationsResultIterator) Next() error {
 21064  	return iter.NextWithContext(context.Background())
 21065  }
 21066  
 21067  // NotDone returns true if the enumeration should be started or is not yet complete.
 21068  func (iter ListVpnServerConfigurationsResultIterator) NotDone() bool {
 21069  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 21070  }
 21071  
 21072  // Response returns the raw server response from the last page request.
 21073  func (iter ListVpnServerConfigurationsResultIterator) Response() ListVpnServerConfigurationsResult {
 21074  	return iter.page.Response()
 21075  }
 21076  
 21077  // Value returns the current value or a zero-initialized value if the
 21078  // iterator has advanced beyond the end of the collection.
 21079  func (iter ListVpnServerConfigurationsResultIterator) Value() VpnServerConfiguration {
 21080  	if !iter.page.NotDone() {
 21081  		return VpnServerConfiguration{}
 21082  	}
 21083  	return iter.page.Values()[iter.i]
 21084  }
 21085  
 21086  // Creates a new instance of the ListVpnServerConfigurationsResultIterator type.
 21087  func NewListVpnServerConfigurationsResultIterator(page ListVpnServerConfigurationsResultPage) ListVpnServerConfigurationsResultIterator {
 21088  	return ListVpnServerConfigurationsResultIterator{page: page}
 21089  }
 21090  
 21091  // IsEmpty returns true if the ListResult contains no values.
 21092  func (lvscr ListVpnServerConfigurationsResult) IsEmpty() bool {
 21093  	return lvscr.Value == nil || len(*lvscr.Value) == 0
 21094  }
 21095  
 21096  // hasNextLink returns true if the NextLink is not empty.
 21097  func (lvscr ListVpnServerConfigurationsResult) hasNextLink() bool {
 21098  	return lvscr.NextLink != nil && len(*lvscr.NextLink) != 0
 21099  }
 21100  
 21101  // listVpnServerConfigurationsResultPreparer prepares a request to retrieve the next set of results.
 21102  // It returns nil if no more results exist.
 21103  func (lvscr ListVpnServerConfigurationsResult) listVpnServerConfigurationsResultPreparer(ctx context.Context) (*http.Request, error) {
 21104  	if !lvscr.hasNextLink() {
 21105  		return nil, nil
 21106  	}
 21107  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 21108  		autorest.AsJSON(),
 21109  		autorest.AsGet(),
 21110  		autorest.WithBaseURL(to.String(lvscr.NextLink)))
 21111  }
 21112  
 21113  // ListVpnServerConfigurationsResultPage contains a page of VpnServerConfiguration values.
 21114  type ListVpnServerConfigurationsResultPage struct {
 21115  	fn    func(context.Context, ListVpnServerConfigurationsResult) (ListVpnServerConfigurationsResult, error)
 21116  	lvscr ListVpnServerConfigurationsResult
 21117  }
 21118  
 21119  // NextWithContext advances to the next page of values.  If there was an error making
 21120  // the request the page does not advance and the error is returned.
 21121  func (page *ListVpnServerConfigurationsResultPage) NextWithContext(ctx context.Context) (err error) {
 21122  	if tracing.IsEnabled() {
 21123  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnServerConfigurationsResultPage.NextWithContext")
 21124  		defer func() {
 21125  			sc := -1
 21126  			if page.Response().Response.Response != nil {
 21127  				sc = page.Response().Response.Response.StatusCode
 21128  			}
 21129  			tracing.EndSpan(ctx, sc, err)
 21130  		}()
 21131  	}
 21132  	for {
 21133  		next, err := page.fn(ctx, page.lvscr)
 21134  		if err != nil {
 21135  			return err
 21136  		}
 21137  		page.lvscr = next
 21138  		if !next.hasNextLink() || !next.IsEmpty() {
 21139  			break
 21140  		}
 21141  	}
 21142  	return nil
 21143  }
 21144  
 21145  // Next advances to the next page of values.  If there was an error making
 21146  // the request the page does not advance and the error is returned.
 21147  // Deprecated: Use NextWithContext() instead.
 21148  func (page *ListVpnServerConfigurationsResultPage) Next() error {
 21149  	return page.NextWithContext(context.Background())
 21150  }
 21151  
 21152  // NotDone returns true if the page enumeration should be started or is not yet complete.
 21153  func (page ListVpnServerConfigurationsResultPage) NotDone() bool {
 21154  	return !page.lvscr.IsEmpty()
 21155  }
 21156  
 21157  // Response returns the raw server response from the last page request.
 21158  func (page ListVpnServerConfigurationsResultPage) Response() ListVpnServerConfigurationsResult {
 21159  	return page.lvscr
 21160  }
 21161  
 21162  // Values returns the slice of values for the current page or nil if there are no values.
 21163  func (page ListVpnServerConfigurationsResultPage) Values() []VpnServerConfiguration {
 21164  	if page.lvscr.IsEmpty() {
 21165  		return nil
 21166  	}
 21167  	return *page.lvscr.Value
 21168  }
 21169  
 21170  // Creates a new instance of the ListVpnServerConfigurationsResultPage type.
 21171  func NewListVpnServerConfigurationsResultPage(cur ListVpnServerConfigurationsResult, getNextPage func(context.Context, ListVpnServerConfigurationsResult) (ListVpnServerConfigurationsResult, error)) ListVpnServerConfigurationsResultPage {
 21172  	return ListVpnServerConfigurationsResultPage{
 21173  		fn:    getNextPage,
 21174  		lvscr: cur,
 21175  	}
 21176  }
 21177  
 21178  // ListVpnSiteLinkConnectionsResult result of the request to list all vpn connections to a virtual wan vpn
 21179  // gateway. It contains a list of Vpn Connections and a URL nextLink to get the next set of results.
 21180  type ListVpnSiteLinkConnectionsResult struct {
 21181  	autorest.Response `json:"-"`
 21182  	// Value - List of VpnSiteLinkConnections.
 21183  	Value *[]VpnSiteLinkConnection `json:"value,omitempty"`
 21184  	// NextLink - URL to get the next set of operation list results if there are any.
 21185  	NextLink *string `json:"nextLink,omitempty"`
 21186  }
 21187  
 21188  // ListVpnSiteLinkConnectionsResultIterator provides access to a complete listing of VpnSiteLinkConnection
 21189  // values.
 21190  type ListVpnSiteLinkConnectionsResultIterator struct {
 21191  	i    int
 21192  	page ListVpnSiteLinkConnectionsResultPage
 21193  }
 21194  
 21195  // NextWithContext advances to the next value.  If there was an error making
 21196  // the request the iterator does not advance and the error is returned.
 21197  func (iter *ListVpnSiteLinkConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
 21198  	if tracing.IsEnabled() {
 21199  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinkConnectionsResultIterator.NextWithContext")
 21200  		defer func() {
 21201  			sc := -1
 21202  			if iter.Response().Response.Response != nil {
 21203  				sc = iter.Response().Response.Response.StatusCode
 21204  			}
 21205  			tracing.EndSpan(ctx, sc, err)
 21206  		}()
 21207  	}
 21208  	iter.i++
 21209  	if iter.i < len(iter.page.Values()) {
 21210  		return nil
 21211  	}
 21212  	err = iter.page.NextWithContext(ctx)
 21213  	if err != nil {
 21214  		iter.i--
 21215  		return err
 21216  	}
 21217  	iter.i = 0
 21218  	return nil
 21219  }
 21220  
 21221  // Next advances to the next value.  If there was an error making
 21222  // the request the iterator does not advance and the error is returned.
 21223  // Deprecated: Use NextWithContext() instead.
 21224  func (iter *ListVpnSiteLinkConnectionsResultIterator) Next() error {
 21225  	return iter.NextWithContext(context.Background())
 21226  }
 21227  
 21228  // NotDone returns true if the enumeration should be started or is not yet complete.
 21229  func (iter ListVpnSiteLinkConnectionsResultIterator) NotDone() bool {
 21230  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 21231  }
 21232  
 21233  // Response returns the raw server response from the last page request.
 21234  func (iter ListVpnSiteLinkConnectionsResultIterator) Response() ListVpnSiteLinkConnectionsResult {
 21235  	return iter.page.Response()
 21236  }
 21237  
 21238  // Value returns the current value or a zero-initialized value if the
 21239  // iterator has advanced beyond the end of the collection.
 21240  func (iter ListVpnSiteLinkConnectionsResultIterator) Value() VpnSiteLinkConnection {
 21241  	if !iter.page.NotDone() {
 21242  		return VpnSiteLinkConnection{}
 21243  	}
 21244  	return iter.page.Values()[iter.i]
 21245  }
 21246  
 21247  // Creates a new instance of the ListVpnSiteLinkConnectionsResultIterator type.
 21248  func NewListVpnSiteLinkConnectionsResultIterator(page ListVpnSiteLinkConnectionsResultPage) ListVpnSiteLinkConnectionsResultIterator {
 21249  	return ListVpnSiteLinkConnectionsResultIterator{page: page}
 21250  }
 21251  
 21252  // IsEmpty returns true if the ListResult contains no values.
 21253  func (lvslcr ListVpnSiteLinkConnectionsResult) IsEmpty() bool {
 21254  	return lvslcr.Value == nil || len(*lvslcr.Value) == 0
 21255  }
 21256  
 21257  // hasNextLink returns true if the NextLink is not empty.
 21258  func (lvslcr ListVpnSiteLinkConnectionsResult) hasNextLink() bool {
 21259  	return lvslcr.NextLink != nil && len(*lvslcr.NextLink) != 0
 21260  }
 21261  
 21262  // listVpnSiteLinkConnectionsResultPreparer prepares a request to retrieve the next set of results.
 21263  // It returns nil if no more results exist.
 21264  func (lvslcr ListVpnSiteLinkConnectionsResult) listVpnSiteLinkConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
 21265  	if !lvslcr.hasNextLink() {
 21266  		return nil, nil
 21267  	}
 21268  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 21269  		autorest.AsJSON(),
 21270  		autorest.AsGet(),
 21271  		autorest.WithBaseURL(to.String(lvslcr.NextLink)))
 21272  }
 21273  
 21274  // ListVpnSiteLinkConnectionsResultPage contains a page of VpnSiteLinkConnection values.
 21275  type ListVpnSiteLinkConnectionsResultPage struct {
 21276  	fn     func(context.Context, ListVpnSiteLinkConnectionsResult) (ListVpnSiteLinkConnectionsResult, error)
 21277  	lvslcr ListVpnSiteLinkConnectionsResult
 21278  }
 21279  
 21280  // NextWithContext advances to the next page of values.  If there was an error making
 21281  // the request the page does not advance and the error is returned.
 21282  func (page *ListVpnSiteLinkConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
 21283  	if tracing.IsEnabled() {
 21284  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinkConnectionsResultPage.NextWithContext")
 21285  		defer func() {
 21286  			sc := -1
 21287  			if page.Response().Response.Response != nil {
 21288  				sc = page.Response().Response.Response.StatusCode
 21289  			}
 21290  			tracing.EndSpan(ctx, sc, err)
 21291  		}()
 21292  	}
 21293  	for {
 21294  		next, err := page.fn(ctx, page.lvslcr)
 21295  		if err != nil {
 21296  			return err
 21297  		}
 21298  		page.lvslcr = next
 21299  		if !next.hasNextLink() || !next.IsEmpty() {
 21300  			break
 21301  		}
 21302  	}
 21303  	return nil
 21304  }
 21305  
 21306  // Next advances to the next page of values.  If there was an error making
 21307  // the request the page does not advance and the error is returned.
 21308  // Deprecated: Use NextWithContext() instead.
 21309  func (page *ListVpnSiteLinkConnectionsResultPage) Next() error {
 21310  	return page.NextWithContext(context.Background())
 21311  }
 21312  
 21313  // NotDone returns true if the page enumeration should be started or is not yet complete.
 21314  func (page ListVpnSiteLinkConnectionsResultPage) NotDone() bool {
 21315  	return !page.lvslcr.IsEmpty()
 21316  }
 21317  
 21318  // Response returns the raw server response from the last page request.
 21319  func (page ListVpnSiteLinkConnectionsResultPage) Response() ListVpnSiteLinkConnectionsResult {
 21320  	return page.lvslcr
 21321  }
 21322  
 21323  // Values returns the slice of values for the current page or nil if there are no values.
 21324  func (page ListVpnSiteLinkConnectionsResultPage) Values() []VpnSiteLinkConnection {
 21325  	if page.lvslcr.IsEmpty() {
 21326  		return nil
 21327  	}
 21328  	return *page.lvslcr.Value
 21329  }
 21330  
 21331  // Creates a new instance of the ListVpnSiteLinkConnectionsResultPage type.
 21332  func NewListVpnSiteLinkConnectionsResultPage(cur ListVpnSiteLinkConnectionsResult, getNextPage func(context.Context, ListVpnSiteLinkConnectionsResult) (ListVpnSiteLinkConnectionsResult, error)) ListVpnSiteLinkConnectionsResultPage {
 21333  	return ListVpnSiteLinkConnectionsResultPage{
 21334  		fn:     getNextPage,
 21335  		lvslcr: cur,
 21336  	}
 21337  }
 21338  
 21339  // ListVpnSiteLinksResult result of the request to list VpnSiteLinks. It contains a list of VpnSiteLinks
 21340  // and a URL nextLink to get the next set of results.
 21341  type ListVpnSiteLinksResult struct {
 21342  	autorest.Response `json:"-"`
 21343  	// Value - List of VpnSitesLinks.
 21344  	Value *[]VpnSiteLink `json:"value,omitempty"`
 21345  	// NextLink - URL to get the next set of operation list results if there are any.
 21346  	NextLink *string `json:"nextLink,omitempty"`
 21347  }
 21348  
 21349  // ListVpnSiteLinksResultIterator provides access to a complete listing of VpnSiteLink values.
 21350  type ListVpnSiteLinksResultIterator struct {
 21351  	i    int
 21352  	page ListVpnSiteLinksResultPage
 21353  }
 21354  
 21355  // NextWithContext advances to the next value.  If there was an error making
 21356  // the request the iterator does not advance and the error is returned.
 21357  func (iter *ListVpnSiteLinksResultIterator) NextWithContext(ctx context.Context) (err error) {
 21358  	if tracing.IsEnabled() {
 21359  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinksResultIterator.NextWithContext")
 21360  		defer func() {
 21361  			sc := -1
 21362  			if iter.Response().Response.Response != nil {
 21363  				sc = iter.Response().Response.Response.StatusCode
 21364  			}
 21365  			tracing.EndSpan(ctx, sc, err)
 21366  		}()
 21367  	}
 21368  	iter.i++
 21369  	if iter.i < len(iter.page.Values()) {
 21370  		return nil
 21371  	}
 21372  	err = iter.page.NextWithContext(ctx)
 21373  	if err != nil {
 21374  		iter.i--
 21375  		return err
 21376  	}
 21377  	iter.i = 0
 21378  	return nil
 21379  }
 21380  
 21381  // Next advances to the next value.  If there was an error making
 21382  // the request the iterator does not advance and the error is returned.
 21383  // Deprecated: Use NextWithContext() instead.
 21384  func (iter *ListVpnSiteLinksResultIterator) Next() error {
 21385  	return iter.NextWithContext(context.Background())
 21386  }
 21387  
 21388  // NotDone returns true if the enumeration should be started or is not yet complete.
 21389  func (iter ListVpnSiteLinksResultIterator) NotDone() bool {
 21390  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 21391  }
 21392  
 21393  // Response returns the raw server response from the last page request.
 21394  func (iter ListVpnSiteLinksResultIterator) Response() ListVpnSiteLinksResult {
 21395  	return iter.page.Response()
 21396  }
 21397  
 21398  // Value returns the current value or a zero-initialized value if the
 21399  // iterator has advanced beyond the end of the collection.
 21400  func (iter ListVpnSiteLinksResultIterator) Value() VpnSiteLink {
 21401  	if !iter.page.NotDone() {
 21402  		return VpnSiteLink{}
 21403  	}
 21404  	return iter.page.Values()[iter.i]
 21405  }
 21406  
 21407  // Creates a new instance of the ListVpnSiteLinksResultIterator type.
 21408  func NewListVpnSiteLinksResultIterator(page ListVpnSiteLinksResultPage) ListVpnSiteLinksResultIterator {
 21409  	return ListVpnSiteLinksResultIterator{page: page}
 21410  }
 21411  
 21412  // IsEmpty returns true if the ListResult contains no values.
 21413  func (lvslr ListVpnSiteLinksResult) IsEmpty() bool {
 21414  	return lvslr.Value == nil || len(*lvslr.Value) == 0
 21415  }
 21416  
 21417  // hasNextLink returns true if the NextLink is not empty.
 21418  func (lvslr ListVpnSiteLinksResult) hasNextLink() bool {
 21419  	return lvslr.NextLink != nil && len(*lvslr.NextLink) != 0
 21420  }
 21421  
 21422  // listVpnSiteLinksResultPreparer prepares a request to retrieve the next set of results.
 21423  // It returns nil if no more results exist.
 21424  func (lvslr ListVpnSiteLinksResult) listVpnSiteLinksResultPreparer(ctx context.Context) (*http.Request, error) {
 21425  	if !lvslr.hasNextLink() {
 21426  		return nil, nil
 21427  	}
 21428  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 21429  		autorest.AsJSON(),
 21430  		autorest.AsGet(),
 21431  		autorest.WithBaseURL(to.String(lvslr.NextLink)))
 21432  }
 21433  
 21434  // ListVpnSiteLinksResultPage contains a page of VpnSiteLink values.
 21435  type ListVpnSiteLinksResultPage struct {
 21436  	fn    func(context.Context, ListVpnSiteLinksResult) (ListVpnSiteLinksResult, error)
 21437  	lvslr ListVpnSiteLinksResult
 21438  }
 21439  
 21440  // NextWithContext advances to the next page of values.  If there was an error making
 21441  // the request the page does not advance and the error is returned.
 21442  func (page *ListVpnSiteLinksResultPage) NextWithContext(ctx context.Context) (err error) {
 21443  	if tracing.IsEnabled() {
 21444  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSiteLinksResultPage.NextWithContext")
 21445  		defer func() {
 21446  			sc := -1
 21447  			if page.Response().Response.Response != nil {
 21448  				sc = page.Response().Response.Response.StatusCode
 21449  			}
 21450  			tracing.EndSpan(ctx, sc, err)
 21451  		}()
 21452  	}
 21453  	for {
 21454  		next, err := page.fn(ctx, page.lvslr)
 21455  		if err != nil {
 21456  			return err
 21457  		}
 21458  		page.lvslr = next
 21459  		if !next.hasNextLink() || !next.IsEmpty() {
 21460  			break
 21461  		}
 21462  	}
 21463  	return nil
 21464  }
 21465  
 21466  // Next advances to the next page of values.  If there was an error making
 21467  // the request the page does not advance and the error is returned.
 21468  // Deprecated: Use NextWithContext() instead.
 21469  func (page *ListVpnSiteLinksResultPage) Next() error {
 21470  	return page.NextWithContext(context.Background())
 21471  }
 21472  
 21473  // NotDone returns true if the page enumeration should be started or is not yet complete.
 21474  func (page ListVpnSiteLinksResultPage) NotDone() bool {
 21475  	return !page.lvslr.IsEmpty()
 21476  }
 21477  
 21478  // Response returns the raw server response from the last page request.
 21479  func (page ListVpnSiteLinksResultPage) Response() ListVpnSiteLinksResult {
 21480  	return page.lvslr
 21481  }
 21482  
 21483  // Values returns the slice of values for the current page or nil if there are no values.
 21484  func (page ListVpnSiteLinksResultPage) Values() []VpnSiteLink {
 21485  	if page.lvslr.IsEmpty() {
 21486  		return nil
 21487  	}
 21488  	return *page.lvslr.Value
 21489  }
 21490  
 21491  // Creates a new instance of the ListVpnSiteLinksResultPage type.
 21492  func NewListVpnSiteLinksResultPage(cur ListVpnSiteLinksResult, getNextPage func(context.Context, ListVpnSiteLinksResult) (ListVpnSiteLinksResult, error)) ListVpnSiteLinksResultPage {
 21493  	return ListVpnSiteLinksResultPage{
 21494  		fn:    getNextPage,
 21495  		lvslr: cur,
 21496  	}
 21497  }
 21498  
 21499  // ListVpnSitesResult result of the request to list VpnSites. It contains a list of VpnSites and a URL
 21500  // nextLink to get the next set of results.
 21501  type ListVpnSitesResult struct {
 21502  	autorest.Response `json:"-"`
 21503  	// Value - List of VpnSites.
 21504  	Value *[]VpnSite `json:"value,omitempty"`
 21505  	// NextLink - URL to get the next set of operation list results if there are any.
 21506  	NextLink *string `json:"nextLink,omitempty"`
 21507  }
 21508  
 21509  // ListVpnSitesResultIterator provides access to a complete listing of VpnSite values.
 21510  type ListVpnSitesResultIterator struct {
 21511  	i    int
 21512  	page ListVpnSitesResultPage
 21513  }
 21514  
 21515  // NextWithContext advances to the next value.  If there was an error making
 21516  // the request the iterator does not advance and the error is returned.
 21517  func (iter *ListVpnSitesResultIterator) NextWithContext(ctx context.Context) (err error) {
 21518  	if tracing.IsEnabled() {
 21519  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultIterator.NextWithContext")
 21520  		defer func() {
 21521  			sc := -1
 21522  			if iter.Response().Response.Response != nil {
 21523  				sc = iter.Response().Response.Response.StatusCode
 21524  			}
 21525  			tracing.EndSpan(ctx, sc, err)
 21526  		}()
 21527  	}
 21528  	iter.i++
 21529  	if iter.i < len(iter.page.Values()) {
 21530  		return nil
 21531  	}
 21532  	err = iter.page.NextWithContext(ctx)
 21533  	if err != nil {
 21534  		iter.i--
 21535  		return err
 21536  	}
 21537  	iter.i = 0
 21538  	return nil
 21539  }
 21540  
 21541  // Next advances to the next value.  If there was an error making
 21542  // the request the iterator does not advance and the error is returned.
 21543  // Deprecated: Use NextWithContext() instead.
 21544  func (iter *ListVpnSitesResultIterator) Next() error {
 21545  	return iter.NextWithContext(context.Background())
 21546  }
 21547  
 21548  // NotDone returns true if the enumeration should be started or is not yet complete.
 21549  func (iter ListVpnSitesResultIterator) NotDone() bool {
 21550  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 21551  }
 21552  
 21553  // Response returns the raw server response from the last page request.
 21554  func (iter ListVpnSitesResultIterator) Response() ListVpnSitesResult {
 21555  	return iter.page.Response()
 21556  }
 21557  
 21558  // Value returns the current value or a zero-initialized value if the
 21559  // iterator has advanced beyond the end of the collection.
 21560  func (iter ListVpnSitesResultIterator) Value() VpnSite {
 21561  	if !iter.page.NotDone() {
 21562  		return VpnSite{}
 21563  	}
 21564  	return iter.page.Values()[iter.i]
 21565  }
 21566  
 21567  // Creates a new instance of the ListVpnSitesResultIterator type.
 21568  func NewListVpnSitesResultIterator(page ListVpnSitesResultPage) ListVpnSitesResultIterator {
 21569  	return ListVpnSitesResultIterator{page: page}
 21570  }
 21571  
 21572  // IsEmpty returns true if the ListResult contains no values.
 21573  func (lvsr ListVpnSitesResult) IsEmpty() bool {
 21574  	return lvsr.Value == nil || len(*lvsr.Value) == 0
 21575  }
 21576  
 21577  // hasNextLink returns true if the NextLink is not empty.
 21578  func (lvsr ListVpnSitesResult) hasNextLink() bool {
 21579  	return lvsr.NextLink != nil && len(*lvsr.NextLink) != 0
 21580  }
 21581  
 21582  // listVpnSitesResultPreparer prepares a request to retrieve the next set of results.
 21583  // It returns nil if no more results exist.
 21584  func (lvsr ListVpnSitesResult) listVpnSitesResultPreparer(ctx context.Context) (*http.Request, error) {
 21585  	if !lvsr.hasNextLink() {
 21586  		return nil, nil
 21587  	}
 21588  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 21589  		autorest.AsJSON(),
 21590  		autorest.AsGet(),
 21591  		autorest.WithBaseURL(to.String(lvsr.NextLink)))
 21592  }
 21593  
 21594  // ListVpnSitesResultPage contains a page of VpnSite values.
 21595  type ListVpnSitesResultPage struct {
 21596  	fn   func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)
 21597  	lvsr ListVpnSitesResult
 21598  }
 21599  
 21600  // NextWithContext advances to the next page of values.  If there was an error making
 21601  // the request the page does not advance and the error is returned.
 21602  func (page *ListVpnSitesResultPage) NextWithContext(ctx context.Context) (err error) {
 21603  	if tracing.IsEnabled() {
 21604  		ctx = tracing.StartSpan(ctx, fqdn+"/ListVpnSitesResultPage.NextWithContext")
 21605  		defer func() {
 21606  			sc := -1
 21607  			if page.Response().Response.Response != nil {
 21608  				sc = page.Response().Response.Response.StatusCode
 21609  			}
 21610  			tracing.EndSpan(ctx, sc, err)
 21611  		}()
 21612  	}
 21613  	for {
 21614  		next, err := page.fn(ctx, page.lvsr)
 21615  		if err != nil {
 21616  			return err
 21617  		}
 21618  		page.lvsr = next
 21619  		if !next.hasNextLink() || !next.IsEmpty() {
 21620  			break
 21621  		}
 21622  	}
 21623  	return nil
 21624  }
 21625  
 21626  // Next advances to the next page of values.  If there was an error making
 21627  // the request the page does not advance and the error is returned.
 21628  // Deprecated: Use NextWithContext() instead.
 21629  func (page *ListVpnSitesResultPage) Next() error {
 21630  	return page.NextWithContext(context.Background())
 21631  }
 21632  
 21633  // NotDone returns true if the page enumeration should be started or is not yet complete.
 21634  func (page ListVpnSitesResultPage) NotDone() bool {
 21635  	return !page.lvsr.IsEmpty()
 21636  }
 21637  
 21638  // Response returns the raw server response from the last page request.
 21639  func (page ListVpnSitesResultPage) Response() ListVpnSitesResult {
 21640  	return page.lvsr
 21641  }
 21642  
 21643  // Values returns the slice of values for the current page or nil if there are no values.
 21644  func (page ListVpnSitesResultPage) Values() []VpnSite {
 21645  	if page.lvsr.IsEmpty() {
 21646  		return nil
 21647  	}
 21648  	return *page.lvsr.Value
 21649  }
 21650  
 21651  // Creates a new instance of the ListVpnSitesResultPage type.
 21652  func NewListVpnSitesResultPage(cur ListVpnSitesResult, getNextPage func(context.Context, ListVpnSitesResult) (ListVpnSitesResult, error)) ListVpnSitesResultPage {
 21653  	return ListVpnSitesResultPage{
 21654  		fn:   getNextPage,
 21655  		lvsr: cur,
 21656  	}
 21657  }
 21658  
 21659  // LoadBalancer loadBalancer resource.
 21660  type LoadBalancer struct {
 21661  	autorest.Response `json:"-"`
 21662  	// Sku - The load balancer SKU.
 21663  	Sku *LoadBalancerSku `json:"sku,omitempty"`
 21664  	// LoadBalancerPropertiesFormat - Properties of load balancer.
 21665  	*LoadBalancerPropertiesFormat `json:"properties,omitempty"`
 21666  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 21667  	Etag *string `json:"etag,omitempty"`
 21668  	// ID - Resource ID.
 21669  	ID *string `json:"id,omitempty"`
 21670  	// Name - READ-ONLY; Resource name.
 21671  	Name *string `json:"name,omitempty"`
 21672  	// Type - READ-ONLY; Resource type.
 21673  	Type *string `json:"type,omitempty"`
 21674  	// Location - Resource location.
 21675  	Location *string `json:"location,omitempty"`
 21676  	// Tags - Resource tags.
 21677  	Tags map[string]*string `json:"tags"`
 21678  }
 21679  
 21680  // MarshalJSON is the custom marshaler for LoadBalancer.
 21681  func (lb LoadBalancer) MarshalJSON() ([]byte, error) {
 21682  	objectMap := make(map[string]interface{})
 21683  	if lb.Sku != nil {
 21684  		objectMap["sku"] = lb.Sku
 21685  	}
 21686  	if lb.LoadBalancerPropertiesFormat != nil {
 21687  		objectMap["properties"] = lb.LoadBalancerPropertiesFormat
 21688  	}
 21689  	if lb.ID != nil {
 21690  		objectMap["id"] = lb.ID
 21691  	}
 21692  	if lb.Location != nil {
 21693  		objectMap["location"] = lb.Location
 21694  	}
 21695  	if lb.Tags != nil {
 21696  		objectMap["tags"] = lb.Tags
 21697  	}
 21698  	return json.Marshal(objectMap)
 21699  }
 21700  
 21701  // UnmarshalJSON is the custom unmarshaler for LoadBalancer struct.
 21702  func (lb *LoadBalancer) UnmarshalJSON(body []byte) error {
 21703  	var m map[string]*json.RawMessage
 21704  	err := json.Unmarshal(body, &m)
 21705  	if err != nil {
 21706  		return err
 21707  	}
 21708  	for k, v := range m {
 21709  		switch k {
 21710  		case "sku":
 21711  			if v != nil {
 21712  				var sku LoadBalancerSku
 21713  				err = json.Unmarshal(*v, &sku)
 21714  				if err != nil {
 21715  					return err
 21716  				}
 21717  				lb.Sku = &sku
 21718  			}
 21719  		case "properties":
 21720  			if v != nil {
 21721  				var loadBalancerPropertiesFormat LoadBalancerPropertiesFormat
 21722  				err = json.Unmarshal(*v, &loadBalancerPropertiesFormat)
 21723  				if err != nil {
 21724  					return err
 21725  				}
 21726  				lb.LoadBalancerPropertiesFormat = &loadBalancerPropertiesFormat
 21727  			}
 21728  		case "etag":
 21729  			if v != nil {
 21730  				var etag string
 21731  				err = json.Unmarshal(*v, &etag)
 21732  				if err != nil {
 21733  					return err
 21734  				}
 21735  				lb.Etag = &etag
 21736  			}
 21737  		case "id":
 21738  			if v != nil {
 21739  				var ID string
 21740  				err = json.Unmarshal(*v, &ID)
 21741  				if err != nil {
 21742  					return err
 21743  				}
 21744  				lb.ID = &ID
 21745  			}
 21746  		case "name":
 21747  			if v != nil {
 21748  				var name string
 21749  				err = json.Unmarshal(*v, &name)
 21750  				if err != nil {
 21751  					return err
 21752  				}
 21753  				lb.Name = &name
 21754  			}
 21755  		case "type":
 21756  			if v != nil {
 21757  				var typeVar string
 21758  				err = json.Unmarshal(*v, &typeVar)
 21759  				if err != nil {
 21760  					return err
 21761  				}
 21762  				lb.Type = &typeVar
 21763  			}
 21764  		case "location":
 21765  			if v != nil {
 21766  				var location string
 21767  				err = json.Unmarshal(*v, &location)
 21768  				if err != nil {
 21769  					return err
 21770  				}
 21771  				lb.Location = &location
 21772  			}
 21773  		case "tags":
 21774  			if v != nil {
 21775  				var tags map[string]*string
 21776  				err = json.Unmarshal(*v, &tags)
 21777  				if err != nil {
 21778  					return err
 21779  				}
 21780  				lb.Tags = tags
 21781  			}
 21782  		}
 21783  	}
 21784  
 21785  	return nil
 21786  }
 21787  
 21788  // LoadBalancerBackendAddress load balancer backend addresses.
 21789  type LoadBalancerBackendAddress struct {
 21790  	// LoadBalancerBackendAddressPropertiesFormat - Properties of load balancer backend address pool.
 21791  	*LoadBalancerBackendAddressPropertiesFormat `json:"properties,omitempty"`
 21792  	// Name - Name of the backend address.
 21793  	Name *string `json:"name,omitempty"`
 21794  }
 21795  
 21796  // MarshalJSON is the custom marshaler for LoadBalancerBackendAddress.
 21797  func (lbba LoadBalancerBackendAddress) MarshalJSON() ([]byte, error) {
 21798  	objectMap := make(map[string]interface{})
 21799  	if lbba.LoadBalancerBackendAddressPropertiesFormat != nil {
 21800  		objectMap["properties"] = lbba.LoadBalancerBackendAddressPropertiesFormat
 21801  	}
 21802  	if lbba.Name != nil {
 21803  		objectMap["name"] = lbba.Name
 21804  	}
 21805  	return json.Marshal(objectMap)
 21806  }
 21807  
 21808  // UnmarshalJSON is the custom unmarshaler for LoadBalancerBackendAddress struct.
 21809  func (lbba *LoadBalancerBackendAddress) UnmarshalJSON(body []byte) error {
 21810  	var m map[string]*json.RawMessage
 21811  	err := json.Unmarshal(body, &m)
 21812  	if err != nil {
 21813  		return err
 21814  	}
 21815  	for k, v := range m {
 21816  		switch k {
 21817  		case "properties":
 21818  			if v != nil {
 21819  				var loadBalancerBackendAddressPropertiesFormat LoadBalancerBackendAddressPropertiesFormat
 21820  				err = json.Unmarshal(*v, &loadBalancerBackendAddressPropertiesFormat)
 21821  				if err != nil {
 21822  					return err
 21823  				}
 21824  				lbba.LoadBalancerBackendAddressPropertiesFormat = &loadBalancerBackendAddressPropertiesFormat
 21825  			}
 21826  		case "name":
 21827  			if v != nil {
 21828  				var name string
 21829  				err = json.Unmarshal(*v, &name)
 21830  				if err != nil {
 21831  					return err
 21832  				}
 21833  				lbba.Name = &name
 21834  			}
 21835  		}
 21836  	}
 21837  
 21838  	return nil
 21839  }
 21840  
 21841  // LoadBalancerBackendAddressPoolListResult response for ListBackendAddressPool API service call.
 21842  type LoadBalancerBackendAddressPoolListResult struct {
 21843  	autorest.Response `json:"-"`
 21844  	// Value - A list of backend address pools in a load balancer.
 21845  	Value *[]BackendAddressPool `json:"value,omitempty"`
 21846  	// NextLink - READ-ONLY; The URL to get the next set of results.
 21847  	NextLink *string `json:"nextLink,omitempty"`
 21848  }
 21849  
 21850  // MarshalJSON is the custom marshaler for LoadBalancerBackendAddressPoolListResult.
 21851  func (lbbaplr LoadBalancerBackendAddressPoolListResult) MarshalJSON() ([]byte, error) {
 21852  	objectMap := make(map[string]interface{})
 21853  	if lbbaplr.Value != nil {
 21854  		objectMap["value"] = lbbaplr.Value
 21855  	}
 21856  	return json.Marshal(objectMap)
 21857  }
 21858  
 21859  // LoadBalancerBackendAddressPoolListResultIterator provides access to a complete listing of
 21860  // BackendAddressPool values.
 21861  type LoadBalancerBackendAddressPoolListResultIterator struct {
 21862  	i    int
 21863  	page LoadBalancerBackendAddressPoolListResultPage
 21864  }
 21865  
 21866  // NextWithContext advances to the next value.  If there was an error making
 21867  // the request the iterator does not advance and the error is returned.
 21868  func (iter *LoadBalancerBackendAddressPoolListResultIterator) NextWithContext(ctx context.Context) (err error) {
 21869  	if tracing.IsEnabled() {
 21870  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultIterator.NextWithContext")
 21871  		defer func() {
 21872  			sc := -1
 21873  			if iter.Response().Response.Response != nil {
 21874  				sc = iter.Response().Response.Response.StatusCode
 21875  			}
 21876  			tracing.EndSpan(ctx, sc, err)
 21877  		}()
 21878  	}
 21879  	iter.i++
 21880  	if iter.i < len(iter.page.Values()) {
 21881  		return nil
 21882  	}
 21883  	err = iter.page.NextWithContext(ctx)
 21884  	if err != nil {
 21885  		iter.i--
 21886  		return err
 21887  	}
 21888  	iter.i = 0
 21889  	return nil
 21890  }
 21891  
 21892  // Next advances to the next value.  If there was an error making
 21893  // the request the iterator does not advance and the error is returned.
 21894  // Deprecated: Use NextWithContext() instead.
 21895  func (iter *LoadBalancerBackendAddressPoolListResultIterator) Next() error {
 21896  	return iter.NextWithContext(context.Background())
 21897  }
 21898  
 21899  // NotDone returns true if the enumeration should be started or is not yet complete.
 21900  func (iter LoadBalancerBackendAddressPoolListResultIterator) NotDone() bool {
 21901  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 21902  }
 21903  
 21904  // Response returns the raw server response from the last page request.
 21905  func (iter LoadBalancerBackendAddressPoolListResultIterator) Response() LoadBalancerBackendAddressPoolListResult {
 21906  	return iter.page.Response()
 21907  }
 21908  
 21909  // Value returns the current value or a zero-initialized value if the
 21910  // iterator has advanced beyond the end of the collection.
 21911  func (iter LoadBalancerBackendAddressPoolListResultIterator) Value() BackendAddressPool {
 21912  	if !iter.page.NotDone() {
 21913  		return BackendAddressPool{}
 21914  	}
 21915  	return iter.page.Values()[iter.i]
 21916  }
 21917  
 21918  // Creates a new instance of the LoadBalancerBackendAddressPoolListResultIterator type.
 21919  func NewLoadBalancerBackendAddressPoolListResultIterator(page LoadBalancerBackendAddressPoolListResultPage) LoadBalancerBackendAddressPoolListResultIterator {
 21920  	return LoadBalancerBackendAddressPoolListResultIterator{page: page}
 21921  }
 21922  
 21923  // IsEmpty returns true if the ListResult contains no values.
 21924  func (lbbaplr LoadBalancerBackendAddressPoolListResult) IsEmpty() bool {
 21925  	return lbbaplr.Value == nil || len(*lbbaplr.Value) == 0
 21926  }
 21927  
 21928  // hasNextLink returns true if the NextLink is not empty.
 21929  func (lbbaplr LoadBalancerBackendAddressPoolListResult) hasNextLink() bool {
 21930  	return lbbaplr.NextLink != nil && len(*lbbaplr.NextLink) != 0
 21931  }
 21932  
 21933  // loadBalancerBackendAddressPoolListResultPreparer prepares a request to retrieve the next set of results.
 21934  // It returns nil if no more results exist.
 21935  func (lbbaplr LoadBalancerBackendAddressPoolListResult) loadBalancerBackendAddressPoolListResultPreparer(ctx context.Context) (*http.Request, error) {
 21936  	if !lbbaplr.hasNextLink() {
 21937  		return nil, nil
 21938  	}
 21939  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 21940  		autorest.AsJSON(),
 21941  		autorest.AsGet(),
 21942  		autorest.WithBaseURL(to.String(lbbaplr.NextLink)))
 21943  }
 21944  
 21945  // LoadBalancerBackendAddressPoolListResultPage contains a page of BackendAddressPool values.
 21946  type LoadBalancerBackendAddressPoolListResultPage struct {
 21947  	fn      func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)
 21948  	lbbaplr LoadBalancerBackendAddressPoolListResult
 21949  }
 21950  
 21951  // NextWithContext advances to the next page of values.  If there was an error making
 21952  // the request the page does not advance and the error is returned.
 21953  func (page *LoadBalancerBackendAddressPoolListResultPage) NextWithContext(ctx context.Context) (err error) {
 21954  	if tracing.IsEnabled() {
 21955  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerBackendAddressPoolListResultPage.NextWithContext")
 21956  		defer func() {
 21957  			sc := -1
 21958  			if page.Response().Response.Response != nil {
 21959  				sc = page.Response().Response.Response.StatusCode
 21960  			}
 21961  			tracing.EndSpan(ctx, sc, err)
 21962  		}()
 21963  	}
 21964  	for {
 21965  		next, err := page.fn(ctx, page.lbbaplr)
 21966  		if err != nil {
 21967  			return err
 21968  		}
 21969  		page.lbbaplr = next
 21970  		if !next.hasNextLink() || !next.IsEmpty() {
 21971  			break
 21972  		}
 21973  	}
 21974  	return nil
 21975  }
 21976  
 21977  // Next advances to the next page of values.  If there was an error making
 21978  // the request the page does not advance and the error is returned.
 21979  // Deprecated: Use NextWithContext() instead.
 21980  func (page *LoadBalancerBackendAddressPoolListResultPage) Next() error {
 21981  	return page.NextWithContext(context.Background())
 21982  }
 21983  
 21984  // NotDone returns true if the page enumeration should be started or is not yet complete.
 21985  func (page LoadBalancerBackendAddressPoolListResultPage) NotDone() bool {
 21986  	return !page.lbbaplr.IsEmpty()
 21987  }
 21988  
 21989  // Response returns the raw server response from the last page request.
 21990  func (page LoadBalancerBackendAddressPoolListResultPage) Response() LoadBalancerBackendAddressPoolListResult {
 21991  	return page.lbbaplr
 21992  }
 21993  
 21994  // Values returns the slice of values for the current page or nil if there are no values.
 21995  func (page LoadBalancerBackendAddressPoolListResultPage) Values() []BackendAddressPool {
 21996  	if page.lbbaplr.IsEmpty() {
 21997  		return nil
 21998  	}
 21999  	return *page.lbbaplr.Value
 22000  }
 22001  
 22002  // Creates a new instance of the LoadBalancerBackendAddressPoolListResultPage type.
 22003  func NewLoadBalancerBackendAddressPoolListResultPage(cur LoadBalancerBackendAddressPoolListResult, getNextPage func(context.Context, LoadBalancerBackendAddressPoolListResult) (LoadBalancerBackendAddressPoolListResult, error)) LoadBalancerBackendAddressPoolListResultPage {
 22004  	return LoadBalancerBackendAddressPoolListResultPage{
 22005  		fn:      getNextPage,
 22006  		lbbaplr: cur,
 22007  	}
 22008  }
 22009  
 22010  // LoadBalancerBackendAddressPoolsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
 22011  // results of a long-running operation.
 22012  type LoadBalancerBackendAddressPoolsCreateOrUpdateFuture struct {
 22013  	azure.FutureAPI
 22014  	// Result returns the result of the asynchronous operation.
 22015  	// If the operation has not completed it will return an error.
 22016  	Result func(LoadBalancerBackendAddressPoolsClient) (BackendAddressPool, error)
 22017  }
 22018  
 22019  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 22020  func (future *LoadBalancerBackendAddressPoolsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 22021  	var azFuture azure.Future
 22022  	if err := json.Unmarshal(body, &azFuture); err != nil {
 22023  		return err
 22024  	}
 22025  	future.FutureAPI = &azFuture
 22026  	future.Result = future.result
 22027  	return nil
 22028  }
 22029  
 22030  // result is the default implementation for LoadBalancerBackendAddressPoolsCreateOrUpdateFuture.Result.
 22031  func (future *LoadBalancerBackendAddressPoolsCreateOrUpdateFuture) result(client LoadBalancerBackendAddressPoolsClient) (bap BackendAddressPool, err error) {
 22032  	var done bool
 22033  	done, err = future.DoneWithContext(context.Background(), client)
 22034  	if err != nil {
 22035  		err = autorest.NewErrorWithError(err, "network.LoadBalancerBackendAddressPoolsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 22036  		return
 22037  	}
 22038  	if !done {
 22039  		bap.Response.Response = future.Response()
 22040  		err = azure.NewAsyncOpIncompleteError("network.LoadBalancerBackendAddressPoolsCreateOrUpdateFuture")
 22041  		return
 22042  	}
 22043  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 22044  	if bap.Response.Response, err = future.GetResult(sender); err == nil && bap.Response.Response.StatusCode != http.StatusNoContent {
 22045  		bap, err = client.CreateOrUpdateResponder(bap.Response.Response)
 22046  		if err != nil {
 22047  			err = autorest.NewErrorWithError(err, "network.LoadBalancerBackendAddressPoolsCreateOrUpdateFuture", "Result", bap.Response.Response, "Failure responding to request")
 22048  		}
 22049  	}
 22050  	return
 22051  }
 22052  
 22053  // LoadBalancerBackendAddressPoolsDeleteFuture an abstraction for monitoring and retrieving the results of
 22054  // a long-running operation.
 22055  type LoadBalancerBackendAddressPoolsDeleteFuture struct {
 22056  	azure.FutureAPI
 22057  	// Result returns the result of the asynchronous operation.
 22058  	// If the operation has not completed it will return an error.
 22059  	Result func(LoadBalancerBackendAddressPoolsClient) (autorest.Response, error)
 22060  }
 22061  
 22062  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 22063  func (future *LoadBalancerBackendAddressPoolsDeleteFuture) UnmarshalJSON(body []byte) error {
 22064  	var azFuture azure.Future
 22065  	if err := json.Unmarshal(body, &azFuture); err != nil {
 22066  		return err
 22067  	}
 22068  	future.FutureAPI = &azFuture
 22069  	future.Result = future.result
 22070  	return nil
 22071  }
 22072  
 22073  // result is the default implementation for LoadBalancerBackendAddressPoolsDeleteFuture.Result.
 22074  func (future *LoadBalancerBackendAddressPoolsDeleteFuture) result(client LoadBalancerBackendAddressPoolsClient) (ar autorest.Response, err error) {
 22075  	var done bool
 22076  	done, err = future.DoneWithContext(context.Background(), client)
 22077  	if err != nil {
 22078  		err = autorest.NewErrorWithError(err, "network.LoadBalancerBackendAddressPoolsDeleteFuture", "Result", future.Response(), "Polling failure")
 22079  		return
 22080  	}
 22081  	if !done {
 22082  		ar.Response = future.Response()
 22083  		err = azure.NewAsyncOpIncompleteError("network.LoadBalancerBackendAddressPoolsDeleteFuture")
 22084  		return
 22085  	}
 22086  	ar.Response = future.Response()
 22087  	return
 22088  }
 22089  
 22090  // LoadBalancerBackendAddressPropertiesFormat properties of the load balancer backend addresses.
 22091  type LoadBalancerBackendAddressPropertiesFormat struct {
 22092  	// VirtualNetwork - Reference to an existing virtual network.
 22093  	VirtualNetwork *SubResource `json:"virtualNetwork,omitempty"`
 22094  	// IPAddress - IP Address belonging to the referenced virtual network.
 22095  	IPAddress *string `json:"ipAddress,omitempty"`
 22096  	// NetworkInterfaceIPConfiguration - READ-ONLY; Reference to IP address defined in network interfaces.
 22097  	NetworkInterfaceIPConfiguration *SubResource `json:"networkInterfaceIPConfiguration,omitempty"`
 22098  }
 22099  
 22100  // MarshalJSON is the custom marshaler for LoadBalancerBackendAddressPropertiesFormat.
 22101  func (lbbapf LoadBalancerBackendAddressPropertiesFormat) MarshalJSON() ([]byte, error) {
 22102  	objectMap := make(map[string]interface{})
 22103  	if lbbapf.VirtualNetwork != nil {
 22104  		objectMap["virtualNetwork"] = lbbapf.VirtualNetwork
 22105  	}
 22106  	if lbbapf.IPAddress != nil {
 22107  		objectMap["ipAddress"] = lbbapf.IPAddress
 22108  	}
 22109  	return json.Marshal(objectMap)
 22110  }
 22111  
 22112  // LoadBalancerFrontendIPConfigurationListResult response for ListFrontendIPConfiguration API service call.
 22113  type LoadBalancerFrontendIPConfigurationListResult struct {
 22114  	autorest.Response `json:"-"`
 22115  	// Value - A list of frontend IP configurations in a load balancer.
 22116  	Value *[]FrontendIPConfiguration `json:"value,omitempty"`
 22117  	// NextLink - READ-ONLY; The URL to get the next set of results.
 22118  	NextLink *string `json:"nextLink,omitempty"`
 22119  }
 22120  
 22121  // MarshalJSON is the custom marshaler for LoadBalancerFrontendIPConfigurationListResult.
 22122  func (lbficlr LoadBalancerFrontendIPConfigurationListResult) MarshalJSON() ([]byte, error) {
 22123  	objectMap := make(map[string]interface{})
 22124  	if lbficlr.Value != nil {
 22125  		objectMap["value"] = lbficlr.Value
 22126  	}
 22127  	return json.Marshal(objectMap)
 22128  }
 22129  
 22130  // LoadBalancerFrontendIPConfigurationListResultIterator provides access to a complete listing of
 22131  // FrontendIPConfiguration values.
 22132  type LoadBalancerFrontendIPConfigurationListResultIterator struct {
 22133  	i    int
 22134  	page LoadBalancerFrontendIPConfigurationListResultPage
 22135  }
 22136  
 22137  // NextWithContext advances to the next value.  If there was an error making
 22138  // the request the iterator does not advance and the error is returned.
 22139  func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) NextWithContext(ctx context.Context) (err error) {
 22140  	if tracing.IsEnabled() {
 22141  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultIterator.NextWithContext")
 22142  		defer func() {
 22143  			sc := -1
 22144  			if iter.Response().Response.Response != nil {
 22145  				sc = iter.Response().Response.Response.StatusCode
 22146  			}
 22147  			tracing.EndSpan(ctx, sc, err)
 22148  		}()
 22149  	}
 22150  	iter.i++
 22151  	if iter.i < len(iter.page.Values()) {
 22152  		return nil
 22153  	}
 22154  	err = iter.page.NextWithContext(ctx)
 22155  	if err != nil {
 22156  		iter.i--
 22157  		return err
 22158  	}
 22159  	iter.i = 0
 22160  	return nil
 22161  }
 22162  
 22163  // Next advances to the next value.  If there was an error making
 22164  // the request the iterator does not advance and the error is returned.
 22165  // Deprecated: Use NextWithContext() instead.
 22166  func (iter *LoadBalancerFrontendIPConfigurationListResultIterator) Next() error {
 22167  	return iter.NextWithContext(context.Background())
 22168  }
 22169  
 22170  // NotDone returns true if the enumeration should be started or is not yet complete.
 22171  func (iter LoadBalancerFrontendIPConfigurationListResultIterator) NotDone() bool {
 22172  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 22173  }
 22174  
 22175  // Response returns the raw server response from the last page request.
 22176  func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Response() LoadBalancerFrontendIPConfigurationListResult {
 22177  	return iter.page.Response()
 22178  }
 22179  
 22180  // Value returns the current value or a zero-initialized value if the
 22181  // iterator has advanced beyond the end of the collection.
 22182  func (iter LoadBalancerFrontendIPConfigurationListResultIterator) Value() FrontendIPConfiguration {
 22183  	if !iter.page.NotDone() {
 22184  		return FrontendIPConfiguration{}
 22185  	}
 22186  	return iter.page.Values()[iter.i]
 22187  }
 22188  
 22189  // Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultIterator type.
 22190  func NewLoadBalancerFrontendIPConfigurationListResultIterator(page LoadBalancerFrontendIPConfigurationListResultPage) LoadBalancerFrontendIPConfigurationListResultIterator {
 22191  	return LoadBalancerFrontendIPConfigurationListResultIterator{page: page}
 22192  }
 22193  
 22194  // IsEmpty returns true if the ListResult contains no values.
 22195  func (lbficlr LoadBalancerFrontendIPConfigurationListResult) IsEmpty() bool {
 22196  	return lbficlr.Value == nil || len(*lbficlr.Value) == 0
 22197  }
 22198  
 22199  // hasNextLink returns true if the NextLink is not empty.
 22200  func (lbficlr LoadBalancerFrontendIPConfigurationListResult) hasNextLink() bool {
 22201  	return lbficlr.NextLink != nil && len(*lbficlr.NextLink) != 0
 22202  }
 22203  
 22204  // loadBalancerFrontendIPConfigurationListResultPreparer prepares a request to retrieve the next set of results.
 22205  // It returns nil if no more results exist.
 22206  func (lbficlr LoadBalancerFrontendIPConfigurationListResult) loadBalancerFrontendIPConfigurationListResultPreparer(ctx context.Context) (*http.Request, error) {
 22207  	if !lbficlr.hasNextLink() {
 22208  		return nil, nil
 22209  	}
 22210  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 22211  		autorest.AsJSON(),
 22212  		autorest.AsGet(),
 22213  		autorest.WithBaseURL(to.String(lbficlr.NextLink)))
 22214  }
 22215  
 22216  // LoadBalancerFrontendIPConfigurationListResultPage contains a page of FrontendIPConfiguration values.
 22217  type LoadBalancerFrontendIPConfigurationListResultPage struct {
 22218  	fn      func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)
 22219  	lbficlr LoadBalancerFrontendIPConfigurationListResult
 22220  }
 22221  
 22222  // NextWithContext advances to the next page of values.  If there was an error making
 22223  // the request the page does not advance and the error is returned.
 22224  func (page *LoadBalancerFrontendIPConfigurationListResultPage) NextWithContext(ctx context.Context) (err error) {
 22225  	if tracing.IsEnabled() {
 22226  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerFrontendIPConfigurationListResultPage.NextWithContext")
 22227  		defer func() {
 22228  			sc := -1
 22229  			if page.Response().Response.Response != nil {
 22230  				sc = page.Response().Response.Response.StatusCode
 22231  			}
 22232  			tracing.EndSpan(ctx, sc, err)
 22233  		}()
 22234  	}
 22235  	for {
 22236  		next, err := page.fn(ctx, page.lbficlr)
 22237  		if err != nil {
 22238  			return err
 22239  		}
 22240  		page.lbficlr = next
 22241  		if !next.hasNextLink() || !next.IsEmpty() {
 22242  			break
 22243  		}
 22244  	}
 22245  	return nil
 22246  }
 22247  
 22248  // Next advances to the next page of values.  If there was an error making
 22249  // the request the page does not advance and the error is returned.
 22250  // Deprecated: Use NextWithContext() instead.
 22251  func (page *LoadBalancerFrontendIPConfigurationListResultPage) Next() error {
 22252  	return page.NextWithContext(context.Background())
 22253  }
 22254  
 22255  // NotDone returns true if the page enumeration should be started or is not yet complete.
 22256  func (page LoadBalancerFrontendIPConfigurationListResultPage) NotDone() bool {
 22257  	return !page.lbficlr.IsEmpty()
 22258  }
 22259  
 22260  // Response returns the raw server response from the last page request.
 22261  func (page LoadBalancerFrontendIPConfigurationListResultPage) Response() LoadBalancerFrontendIPConfigurationListResult {
 22262  	return page.lbficlr
 22263  }
 22264  
 22265  // Values returns the slice of values for the current page or nil if there are no values.
 22266  func (page LoadBalancerFrontendIPConfigurationListResultPage) Values() []FrontendIPConfiguration {
 22267  	if page.lbficlr.IsEmpty() {
 22268  		return nil
 22269  	}
 22270  	return *page.lbficlr.Value
 22271  }
 22272  
 22273  // Creates a new instance of the LoadBalancerFrontendIPConfigurationListResultPage type.
 22274  func NewLoadBalancerFrontendIPConfigurationListResultPage(cur LoadBalancerFrontendIPConfigurationListResult, getNextPage func(context.Context, LoadBalancerFrontendIPConfigurationListResult) (LoadBalancerFrontendIPConfigurationListResult, error)) LoadBalancerFrontendIPConfigurationListResultPage {
 22275  	return LoadBalancerFrontendIPConfigurationListResultPage{
 22276  		fn:      getNextPage,
 22277  		lbficlr: cur,
 22278  	}
 22279  }
 22280  
 22281  // LoadBalancerListResult response for ListLoadBalancers API service call.
 22282  type LoadBalancerListResult struct {
 22283  	autorest.Response `json:"-"`
 22284  	// Value - A list of load balancers in a resource group.
 22285  	Value *[]LoadBalancer `json:"value,omitempty"`
 22286  	// NextLink - READ-ONLY; The URL to get the next set of results.
 22287  	NextLink *string `json:"nextLink,omitempty"`
 22288  }
 22289  
 22290  // MarshalJSON is the custom marshaler for LoadBalancerListResult.
 22291  func (lblr LoadBalancerListResult) MarshalJSON() ([]byte, error) {
 22292  	objectMap := make(map[string]interface{})
 22293  	if lblr.Value != nil {
 22294  		objectMap["value"] = lblr.Value
 22295  	}
 22296  	return json.Marshal(objectMap)
 22297  }
 22298  
 22299  // LoadBalancerListResultIterator provides access to a complete listing of LoadBalancer values.
 22300  type LoadBalancerListResultIterator struct {
 22301  	i    int
 22302  	page LoadBalancerListResultPage
 22303  }
 22304  
 22305  // NextWithContext advances to the next value.  If there was an error making
 22306  // the request the iterator does not advance and the error is returned.
 22307  func (iter *LoadBalancerListResultIterator) NextWithContext(ctx context.Context) (err error) {
 22308  	if tracing.IsEnabled() {
 22309  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultIterator.NextWithContext")
 22310  		defer func() {
 22311  			sc := -1
 22312  			if iter.Response().Response.Response != nil {
 22313  				sc = iter.Response().Response.Response.StatusCode
 22314  			}
 22315  			tracing.EndSpan(ctx, sc, err)
 22316  		}()
 22317  	}
 22318  	iter.i++
 22319  	if iter.i < len(iter.page.Values()) {
 22320  		return nil
 22321  	}
 22322  	err = iter.page.NextWithContext(ctx)
 22323  	if err != nil {
 22324  		iter.i--
 22325  		return err
 22326  	}
 22327  	iter.i = 0
 22328  	return nil
 22329  }
 22330  
 22331  // Next advances to the next value.  If there was an error making
 22332  // the request the iterator does not advance and the error is returned.
 22333  // Deprecated: Use NextWithContext() instead.
 22334  func (iter *LoadBalancerListResultIterator) Next() error {
 22335  	return iter.NextWithContext(context.Background())
 22336  }
 22337  
 22338  // NotDone returns true if the enumeration should be started or is not yet complete.
 22339  func (iter LoadBalancerListResultIterator) NotDone() bool {
 22340  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 22341  }
 22342  
 22343  // Response returns the raw server response from the last page request.
 22344  func (iter LoadBalancerListResultIterator) Response() LoadBalancerListResult {
 22345  	return iter.page.Response()
 22346  }
 22347  
 22348  // Value returns the current value or a zero-initialized value if the
 22349  // iterator has advanced beyond the end of the collection.
 22350  func (iter LoadBalancerListResultIterator) Value() LoadBalancer {
 22351  	if !iter.page.NotDone() {
 22352  		return LoadBalancer{}
 22353  	}
 22354  	return iter.page.Values()[iter.i]
 22355  }
 22356  
 22357  // Creates a new instance of the LoadBalancerListResultIterator type.
 22358  func NewLoadBalancerListResultIterator(page LoadBalancerListResultPage) LoadBalancerListResultIterator {
 22359  	return LoadBalancerListResultIterator{page: page}
 22360  }
 22361  
 22362  // IsEmpty returns true if the ListResult contains no values.
 22363  func (lblr LoadBalancerListResult) IsEmpty() bool {
 22364  	return lblr.Value == nil || len(*lblr.Value) == 0
 22365  }
 22366  
 22367  // hasNextLink returns true if the NextLink is not empty.
 22368  func (lblr LoadBalancerListResult) hasNextLink() bool {
 22369  	return lblr.NextLink != nil && len(*lblr.NextLink) != 0
 22370  }
 22371  
 22372  // loadBalancerListResultPreparer prepares a request to retrieve the next set of results.
 22373  // It returns nil if no more results exist.
 22374  func (lblr LoadBalancerListResult) loadBalancerListResultPreparer(ctx context.Context) (*http.Request, error) {
 22375  	if !lblr.hasNextLink() {
 22376  		return nil, nil
 22377  	}
 22378  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 22379  		autorest.AsJSON(),
 22380  		autorest.AsGet(),
 22381  		autorest.WithBaseURL(to.String(lblr.NextLink)))
 22382  }
 22383  
 22384  // LoadBalancerListResultPage contains a page of LoadBalancer values.
 22385  type LoadBalancerListResultPage struct {
 22386  	fn   func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)
 22387  	lblr LoadBalancerListResult
 22388  }
 22389  
 22390  // NextWithContext advances to the next page of values.  If there was an error making
 22391  // the request the page does not advance and the error is returned.
 22392  func (page *LoadBalancerListResultPage) NextWithContext(ctx context.Context) (err error) {
 22393  	if tracing.IsEnabled() {
 22394  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerListResultPage.NextWithContext")
 22395  		defer func() {
 22396  			sc := -1
 22397  			if page.Response().Response.Response != nil {
 22398  				sc = page.Response().Response.Response.StatusCode
 22399  			}
 22400  			tracing.EndSpan(ctx, sc, err)
 22401  		}()
 22402  	}
 22403  	for {
 22404  		next, err := page.fn(ctx, page.lblr)
 22405  		if err != nil {
 22406  			return err
 22407  		}
 22408  		page.lblr = next
 22409  		if !next.hasNextLink() || !next.IsEmpty() {
 22410  			break
 22411  		}
 22412  	}
 22413  	return nil
 22414  }
 22415  
 22416  // Next advances to the next page of values.  If there was an error making
 22417  // the request the page does not advance and the error is returned.
 22418  // Deprecated: Use NextWithContext() instead.
 22419  func (page *LoadBalancerListResultPage) Next() error {
 22420  	return page.NextWithContext(context.Background())
 22421  }
 22422  
 22423  // NotDone returns true if the page enumeration should be started or is not yet complete.
 22424  func (page LoadBalancerListResultPage) NotDone() bool {
 22425  	return !page.lblr.IsEmpty()
 22426  }
 22427  
 22428  // Response returns the raw server response from the last page request.
 22429  func (page LoadBalancerListResultPage) Response() LoadBalancerListResult {
 22430  	return page.lblr
 22431  }
 22432  
 22433  // Values returns the slice of values for the current page or nil if there are no values.
 22434  func (page LoadBalancerListResultPage) Values() []LoadBalancer {
 22435  	if page.lblr.IsEmpty() {
 22436  		return nil
 22437  	}
 22438  	return *page.lblr.Value
 22439  }
 22440  
 22441  // Creates a new instance of the LoadBalancerListResultPage type.
 22442  func NewLoadBalancerListResultPage(cur LoadBalancerListResult, getNextPage func(context.Context, LoadBalancerListResult) (LoadBalancerListResult, error)) LoadBalancerListResultPage {
 22443  	return LoadBalancerListResultPage{
 22444  		fn:   getNextPage,
 22445  		lblr: cur,
 22446  	}
 22447  }
 22448  
 22449  // LoadBalancerLoadBalancingRuleListResult response for ListLoadBalancingRule API service call.
 22450  type LoadBalancerLoadBalancingRuleListResult struct {
 22451  	autorest.Response `json:"-"`
 22452  	// Value - A list of load balancing rules in a load balancer.
 22453  	Value *[]LoadBalancingRule `json:"value,omitempty"`
 22454  	// NextLink - READ-ONLY; The URL to get the next set of results.
 22455  	NextLink *string `json:"nextLink,omitempty"`
 22456  }
 22457  
 22458  // MarshalJSON is the custom marshaler for LoadBalancerLoadBalancingRuleListResult.
 22459  func (lblbrlr LoadBalancerLoadBalancingRuleListResult) MarshalJSON() ([]byte, error) {
 22460  	objectMap := make(map[string]interface{})
 22461  	if lblbrlr.Value != nil {
 22462  		objectMap["value"] = lblbrlr.Value
 22463  	}
 22464  	return json.Marshal(objectMap)
 22465  }
 22466  
 22467  // LoadBalancerLoadBalancingRuleListResultIterator provides access to a complete listing of
 22468  // LoadBalancingRule values.
 22469  type LoadBalancerLoadBalancingRuleListResultIterator struct {
 22470  	i    int
 22471  	page LoadBalancerLoadBalancingRuleListResultPage
 22472  }
 22473  
 22474  // NextWithContext advances to the next value.  If there was an error making
 22475  // the request the iterator does not advance and the error is returned.
 22476  func (iter *LoadBalancerLoadBalancingRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
 22477  	if tracing.IsEnabled() {
 22478  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultIterator.NextWithContext")
 22479  		defer func() {
 22480  			sc := -1
 22481  			if iter.Response().Response.Response != nil {
 22482  				sc = iter.Response().Response.Response.StatusCode
 22483  			}
 22484  			tracing.EndSpan(ctx, sc, err)
 22485  		}()
 22486  	}
 22487  	iter.i++
 22488  	if iter.i < len(iter.page.Values()) {
 22489  		return nil
 22490  	}
 22491  	err = iter.page.NextWithContext(ctx)
 22492  	if err != nil {
 22493  		iter.i--
 22494  		return err
 22495  	}
 22496  	iter.i = 0
 22497  	return nil
 22498  }
 22499  
 22500  // Next advances to the next value.  If there was an error making
 22501  // the request the iterator does not advance and the error is returned.
 22502  // Deprecated: Use NextWithContext() instead.
 22503  func (iter *LoadBalancerLoadBalancingRuleListResultIterator) Next() error {
 22504  	return iter.NextWithContext(context.Background())
 22505  }
 22506  
 22507  // NotDone returns true if the enumeration should be started or is not yet complete.
 22508  func (iter LoadBalancerLoadBalancingRuleListResultIterator) NotDone() bool {
 22509  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 22510  }
 22511  
 22512  // Response returns the raw server response from the last page request.
 22513  func (iter LoadBalancerLoadBalancingRuleListResultIterator) Response() LoadBalancerLoadBalancingRuleListResult {
 22514  	return iter.page.Response()
 22515  }
 22516  
 22517  // Value returns the current value or a zero-initialized value if the
 22518  // iterator has advanced beyond the end of the collection.
 22519  func (iter LoadBalancerLoadBalancingRuleListResultIterator) Value() LoadBalancingRule {
 22520  	if !iter.page.NotDone() {
 22521  		return LoadBalancingRule{}
 22522  	}
 22523  	return iter.page.Values()[iter.i]
 22524  }
 22525  
 22526  // Creates a new instance of the LoadBalancerLoadBalancingRuleListResultIterator type.
 22527  func NewLoadBalancerLoadBalancingRuleListResultIterator(page LoadBalancerLoadBalancingRuleListResultPage) LoadBalancerLoadBalancingRuleListResultIterator {
 22528  	return LoadBalancerLoadBalancingRuleListResultIterator{page: page}
 22529  }
 22530  
 22531  // IsEmpty returns true if the ListResult contains no values.
 22532  func (lblbrlr LoadBalancerLoadBalancingRuleListResult) IsEmpty() bool {
 22533  	return lblbrlr.Value == nil || len(*lblbrlr.Value) == 0
 22534  }
 22535  
 22536  // hasNextLink returns true if the NextLink is not empty.
 22537  func (lblbrlr LoadBalancerLoadBalancingRuleListResult) hasNextLink() bool {
 22538  	return lblbrlr.NextLink != nil && len(*lblbrlr.NextLink) != 0
 22539  }
 22540  
 22541  // loadBalancerLoadBalancingRuleListResultPreparer prepares a request to retrieve the next set of results.
 22542  // It returns nil if no more results exist.
 22543  func (lblbrlr LoadBalancerLoadBalancingRuleListResult) loadBalancerLoadBalancingRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
 22544  	if !lblbrlr.hasNextLink() {
 22545  		return nil, nil
 22546  	}
 22547  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 22548  		autorest.AsJSON(),
 22549  		autorest.AsGet(),
 22550  		autorest.WithBaseURL(to.String(lblbrlr.NextLink)))
 22551  }
 22552  
 22553  // LoadBalancerLoadBalancingRuleListResultPage contains a page of LoadBalancingRule values.
 22554  type LoadBalancerLoadBalancingRuleListResultPage struct {
 22555  	fn      func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)
 22556  	lblbrlr LoadBalancerLoadBalancingRuleListResult
 22557  }
 22558  
 22559  // NextWithContext advances to the next page of values.  If there was an error making
 22560  // the request the page does not advance and the error is returned.
 22561  func (page *LoadBalancerLoadBalancingRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
 22562  	if tracing.IsEnabled() {
 22563  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerLoadBalancingRuleListResultPage.NextWithContext")
 22564  		defer func() {
 22565  			sc := -1
 22566  			if page.Response().Response.Response != nil {
 22567  				sc = page.Response().Response.Response.StatusCode
 22568  			}
 22569  			tracing.EndSpan(ctx, sc, err)
 22570  		}()
 22571  	}
 22572  	for {
 22573  		next, err := page.fn(ctx, page.lblbrlr)
 22574  		if err != nil {
 22575  			return err
 22576  		}
 22577  		page.lblbrlr = next
 22578  		if !next.hasNextLink() || !next.IsEmpty() {
 22579  			break
 22580  		}
 22581  	}
 22582  	return nil
 22583  }
 22584  
 22585  // Next advances to the next page of values.  If there was an error making
 22586  // the request the page does not advance and the error is returned.
 22587  // Deprecated: Use NextWithContext() instead.
 22588  func (page *LoadBalancerLoadBalancingRuleListResultPage) Next() error {
 22589  	return page.NextWithContext(context.Background())
 22590  }
 22591  
 22592  // NotDone returns true if the page enumeration should be started or is not yet complete.
 22593  func (page LoadBalancerLoadBalancingRuleListResultPage) NotDone() bool {
 22594  	return !page.lblbrlr.IsEmpty()
 22595  }
 22596  
 22597  // Response returns the raw server response from the last page request.
 22598  func (page LoadBalancerLoadBalancingRuleListResultPage) Response() LoadBalancerLoadBalancingRuleListResult {
 22599  	return page.lblbrlr
 22600  }
 22601  
 22602  // Values returns the slice of values for the current page or nil if there are no values.
 22603  func (page LoadBalancerLoadBalancingRuleListResultPage) Values() []LoadBalancingRule {
 22604  	if page.lblbrlr.IsEmpty() {
 22605  		return nil
 22606  	}
 22607  	return *page.lblbrlr.Value
 22608  }
 22609  
 22610  // Creates a new instance of the LoadBalancerLoadBalancingRuleListResultPage type.
 22611  func NewLoadBalancerLoadBalancingRuleListResultPage(cur LoadBalancerLoadBalancingRuleListResult, getNextPage func(context.Context, LoadBalancerLoadBalancingRuleListResult) (LoadBalancerLoadBalancingRuleListResult, error)) LoadBalancerLoadBalancingRuleListResultPage {
 22612  	return LoadBalancerLoadBalancingRuleListResultPage{
 22613  		fn:      getNextPage,
 22614  		lblbrlr: cur,
 22615  	}
 22616  }
 22617  
 22618  // LoadBalancerOutboundRuleListResult response for ListOutboundRule API service call.
 22619  type LoadBalancerOutboundRuleListResult struct {
 22620  	autorest.Response `json:"-"`
 22621  	// Value - A list of outbound rules in a load balancer.
 22622  	Value *[]OutboundRule `json:"value,omitempty"`
 22623  	// NextLink - READ-ONLY; The URL to get the next set of results.
 22624  	NextLink *string `json:"nextLink,omitempty"`
 22625  }
 22626  
 22627  // MarshalJSON is the custom marshaler for LoadBalancerOutboundRuleListResult.
 22628  func (lborlr LoadBalancerOutboundRuleListResult) MarshalJSON() ([]byte, error) {
 22629  	objectMap := make(map[string]interface{})
 22630  	if lborlr.Value != nil {
 22631  		objectMap["value"] = lborlr.Value
 22632  	}
 22633  	return json.Marshal(objectMap)
 22634  }
 22635  
 22636  // LoadBalancerOutboundRuleListResultIterator provides access to a complete listing of OutboundRule values.
 22637  type LoadBalancerOutboundRuleListResultIterator struct {
 22638  	i    int
 22639  	page LoadBalancerOutboundRuleListResultPage
 22640  }
 22641  
 22642  // NextWithContext advances to the next value.  If there was an error making
 22643  // the request the iterator does not advance and the error is returned.
 22644  func (iter *LoadBalancerOutboundRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
 22645  	if tracing.IsEnabled() {
 22646  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultIterator.NextWithContext")
 22647  		defer func() {
 22648  			sc := -1
 22649  			if iter.Response().Response.Response != nil {
 22650  				sc = iter.Response().Response.Response.StatusCode
 22651  			}
 22652  			tracing.EndSpan(ctx, sc, err)
 22653  		}()
 22654  	}
 22655  	iter.i++
 22656  	if iter.i < len(iter.page.Values()) {
 22657  		return nil
 22658  	}
 22659  	err = iter.page.NextWithContext(ctx)
 22660  	if err != nil {
 22661  		iter.i--
 22662  		return err
 22663  	}
 22664  	iter.i = 0
 22665  	return nil
 22666  }
 22667  
 22668  // Next advances to the next value.  If there was an error making
 22669  // the request the iterator does not advance and the error is returned.
 22670  // Deprecated: Use NextWithContext() instead.
 22671  func (iter *LoadBalancerOutboundRuleListResultIterator) Next() error {
 22672  	return iter.NextWithContext(context.Background())
 22673  }
 22674  
 22675  // NotDone returns true if the enumeration should be started or is not yet complete.
 22676  func (iter LoadBalancerOutboundRuleListResultIterator) NotDone() bool {
 22677  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 22678  }
 22679  
 22680  // Response returns the raw server response from the last page request.
 22681  func (iter LoadBalancerOutboundRuleListResultIterator) Response() LoadBalancerOutboundRuleListResult {
 22682  	return iter.page.Response()
 22683  }
 22684  
 22685  // Value returns the current value or a zero-initialized value if the
 22686  // iterator has advanced beyond the end of the collection.
 22687  func (iter LoadBalancerOutboundRuleListResultIterator) Value() OutboundRule {
 22688  	if !iter.page.NotDone() {
 22689  		return OutboundRule{}
 22690  	}
 22691  	return iter.page.Values()[iter.i]
 22692  }
 22693  
 22694  // Creates a new instance of the LoadBalancerOutboundRuleListResultIterator type.
 22695  func NewLoadBalancerOutboundRuleListResultIterator(page LoadBalancerOutboundRuleListResultPage) LoadBalancerOutboundRuleListResultIterator {
 22696  	return LoadBalancerOutboundRuleListResultIterator{page: page}
 22697  }
 22698  
 22699  // IsEmpty returns true if the ListResult contains no values.
 22700  func (lborlr LoadBalancerOutboundRuleListResult) IsEmpty() bool {
 22701  	return lborlr.Value == nil || len(*lborlr.Value) == 0
 22702  }
 22703  
 22704  // hasNextLink returns true if the NextLink is not empty.
 22705  func (lborlr LoadBalancerOutboundRuleListResult) hasNextLink() bool {
 22706  	return lborlr.NextLink != nil && len(*lborlr.NextLink) != 0
 22707  }
 22708  
 22709  // loadBalancerOutboundRuleListResultPreparer prepares a request to retrieve the next set of results.
 22710  // It returns nil if no more results exist.
 22711  func (lborlr LoadBalancerOutboundRuleListResult) loadBalancerOutboundRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
 22712  	if !lborlr.hasNextLink() {
 22713  		return nil, nil
 22714  	}
 22715  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 22716  		autorest.AsJSON(),
 22717  		autorest.AsGet(),
 22718  		autorest.WithBaseURL(to.String(lborlr.NextLink)))
 22719  }
 22720  
 22721  // LoadBalancerOutboundRuleListResultPage contains a page of OutboundRule values.
 22722  type LoadBalancerOutboundRuleListResultPage struct {
 22723  	fn     func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)
 22724  	lborlr LoadBalancerOutboundRuleListResult
 22725  }
 22726  
 22727  // NextWithContext advances to the next page of values.  If there was an error making
 22728  // the request the page does not advance and the error is returned.
 22729  func (page *LoadBalancerOutboundRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
 22730  	if tracing.IsEnabled() {
 22731  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerOutboundRuleListResultPage.NextWithContext")
 22732  		defer func() {
 22733  			sc := -1
 22734  			if page.Response().Response.Response != nil {
 22735  				sc = page.Response().Response.Response.StatusCode
 22736  			}
 22737  			tracing.EndSpan(ctx, sc, err)
 22738  		}()
 22739  	}
 22740  	for {
 22741  		next, err := page.fn(ctx, page.lborlr)
 22742  		if err != nil {
 22743  			return err
 22744  		}
 22745  		page.lborlr = next
 22746  		if !next.hasNextLink() || !next.IsEmpty() {
 22747  			break
 22748  		}
 22749  	}
 22750  	return nil
 22751  }
 22752  
 22753  // Next advances to the next page of values.  If there was an error making
 22754  // the request the page does not advance and the error is returned.
 22755  // Deprecated: Use NextWithContext() instead.
 22756  func (page *LoadBalancerOutboundRuleListResultPage) Next() error {
 22757  	return page.NextWithContext(context.Background())
 22758  }
 22759  
 22760  // NotDone returns true if the page enumeration should be started or is not yet complete.
 22761  func (page LoadBalancerOutboundRuleListResultPage) NotDone() bool {
 22762  	return !page.lborlr.IsEmpty()
 22763  }
 22764  
 22765  // Response returns the raw server response from the last page request.
 22766  func (page LoadBalancerOutboundRuleListResultPage) Response() LoadBalancerOutboundRuleListResult {
 22767  	return page.lborlr
 22768  }
 22769  
 22770  // Values returns the slice of values for the current page or nil if there are no values.
 22771  func (page LoadBalancerOutboundRuleListResultPage) Values() []OutboundRule {
 22772  	if page.lborlr.IsEmpty() {
 22773  		return nil
 22774  	}
 22775  	return *page.lborlr.Value
 22776  }
 22777  
 22778  // Creates a new instance of the LoadBalancerOutboundRuleListResultPage type.
 22779  func NewLoadBalancerOutboundRuleListResultPage(cur LoadBalancerOutboundRuleListResult, getNextPage func(context.Context, LoadBalancerOutboundRuleListResult) (LoadBalancerOutboundRuleListResult, error)) LoadBalancerOutboundRuleListResultPage {
 22780  	return LoadBalancerOutboundRuleListResultPage{
 22781  		fn:     getNextPage,
 22782  		lborlr: cur,
 22783  	}
 22784  }
 22785  
 22786  // LoadBalancerProbeListResult response for ListProbe API service call.
 22787  type LoadBalancerProbeListResult struct {
 22788  	autorest.Response `json:"-"`
 22789  	// Value - A list of probes in a load balancer.
 22790  	Value *[]Probe `json:"value,omitempty"`
 22791  	// NextLink - READ-ONLY; The URL to get the next set of results.
 22792  	NextLink *string `json:"nextLink,omitempty"`
 22793  }
 22794  
 22795  // MarshalJSON is the custom marshaler for LoadBalancerProbeListResult.
 22796  func (lbplr LoadBalancerProbeListResult) MarshalJSON() ([]byte, error) {
 22797  	objectMap := make(map[string]interface{})
 22798  	if lbplr.Value != nil {
 22799  		objectMap["value"] = lbplr.Value
 22800  	}
 22801  	return json.Marshal(objectMap)
 22802  }
 22803  
 22804  // LoadBalancerProbeListResultIterator provides access to a complete listing of Probe values.
 22805  type LoadBalancerProbeListResultIterator struct {
 22806  	i    int
 22807  	page LoadBalancerProbeListResultPage
 22808  }
 22809  
 22810  // NextWithContext advances to the next value.  If there was an error making
 22811  // the request the iterator does not advance and the error is returned.
 22812  func (iter *LoadBalancerProbeListResultIterator) NextWithContext(ctx context.Context) (err error) {
 22813  	if tracing.IsEnabled() {
 22814  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultIterator.NextWithContext")
 22815  		defer func() {
 22816  			sc := -1
 22817  			if iter.Response().Response.Response != nil {
 22818  				sc = iter.Response().Response.Response.StatusCode
 22819  			}
 22820  			tracing.EndSpan(ctx, sc, err)
 22821  		}()
 22822  	}
 22823  	iter.i++
 22824  	if iter.i < len(iter.page.Values()) {
 22825  		return nil
 22826  	}
 22827  	err = iter.page.NextWithContext(ctx)
 22828  	if err != nil {
 22829  		iter.i--
 22830  		return err
 22831  	}
 22832  	iter.i = 0
 22833  	return nil
 22834  }
 22835  
 22836  // Next advances to the next value.  If there was an error making
 22837  // the request the iterator does not advance and the error is returned.
 22838  // Deprecated: Use NextWithContext() instead.
 22839  func (iter *LoadBalancerProbeListResultIterator) Next() error {
 22840  	return iter.NextWithContext(context.Background())
 22841  }
 22842  
 22843  // NotDone returns true if the enumeration should be started or is not yet complete.
 22844  func (iter LoadBalancerProbeListResultIterator) NotDone() bool {
 22845  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 22846  }
 22847  
 22848  // Response returns the raw server response from the last page request.
 22849  func (iter LoadBalancerProbeListResultIterator) Response() LoadBalancerProbeListResult {
 22850  	return iter.page.Response()
 22851  }
 22852  
 22853  // Value returns the current value or a zero-initialized value if the
 22854  // iterator has advanced beyond the end of the collection.
 22855  func (iter LoadBalancerProbeListResultIterator) Value() Probe {
 22856  	if !iter.page.NotDone() {
 22857  		return Probe{}
 22858  	}
 22859  	return iter.page.Values()[iter.i]
 22860  }
 22861  
 22862  // Creates a new instance of the LoadBalancerProbeListResultIterator type.
 22863  func NewLoadBalancerProbeListResultIterator(page LoadBalancerProbeListResultPage) LoadBalancerProbeListResultIterator {
 22864  	return LoadBalancerProbeListResultIterator{page: page}
 22865  }
 22866  
 22867  // IsEmpty returns true if the ListResult contains no values.
 22868  func (lbplr LoadBalancerProbeListResult) IsEmpty() bool {
 22869  	return lbplr.Value == nil || len(*lbplr.Value) == 0
 22870  }
 22871  
 22872  // hasNextLink returns true if the NextLink is not empty.
 22873  func (lbplr LoadBalancerProbeListResult) hasNextLink() bool {
 22874  	return lbplr.NextLink != nil && len(*lbplr.NextLink) != 0
 22875  }
 22876  
 22877  // loadBalancerProbeListResultPreparer prepares a request to retrieve the next set of results.
 22878  // It returns nil if no more results exist.
 22879  func (lbplr LoadBalancerProbeListResult) loadBalancerProbeListResultPreparer(ctx context.Context) (*http.Request, error) {
 22880  	if !lbplr.hasNextLink() {
 22881  		return nil, nil
 22882  	}
 22883  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 22884  		autorest.AsJSON(),
 22885  		autorest.AsGet(),
 22886  		autorest.WithBaseURL(to.String(lbplr.NextLink)))
 22887  }
 22888  
 22889  // LoadBalancerProbeListResultPage contains a page of Probe values.
 22890  type LoadBalancerProbeListResultPage struct {
 22891  	fn    func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)
 22892  	lbplr LoadBalancerProbeListResult
 22893  }
 22894  
 22895  // NextWithContext advances to the next page of values.  If there was an error making
 22896  // the request the page does not advance and the error is returned.
 22897  func (page *LoadBalancerProbeListResultPage) NextWithContext(ctx context.Context) (err error) {
 22898  	if tracing.IsEnabled() {
 22899  		ctx = tracing.StartSpan(ctx, fqdn+"/LoadBalancerProbeListResultPage.NextWithContext")
 22900  		defer func() {
 22901  			sc := -1
 22902  			if page.Response().Response.Response != nil {
 22903  				sc = page.Response().Response.Response.StatusCode
 22904  			}
 22905  			tracing.EndSpan(ctx, sc, err)
 22906  		}()
 22907  	}
 22908  	for {
 22909  		next, err := page.fn(ctx, page.lbplr)
 22910  		if err != nil {
 22911  			return err
 22912  		}
 22913  		page.lbplr = next
 22914  		if !next.hasNextLink() || !next.IsEmpty() {
 22915  			break
 22916  		}
 22917  	}
 22918  	return nil
 22919  }
 22920  
 22921  // Next advances to the next page of values.  If there was an error making
 22922  // the request the page does not advance and the error is returned.
 22923  // Deprecated: Use NextWithContext() instead.
 22924  func (page *LoadBalancerProbeListResultPage) Next() error {
 22925  	return page.NextWithContext(context.Background())
 22926  }
 22927  
 22928  // NotDone returns true if the page enumeration should be started or is not yet complete.
 22929  func (page LoadBalancerProbeListResultPage) NotDone() bool {
 22930  	return !page.lbplr.IsEmpty()
 22931  }
 22932  
 22933  // Response returns the raw server response from the last page request.
 22934  func (page LoadBalancerProbeListResultPage) Response() LoadBalancerProbeListResult {
 22935  	return page.lbplr
 22936  }
 22937  
 22938  // Values returns the slice of values for the current page or nil if there are no values.
 22939  func (page LoadBalancerProbeListResultPage) Values() []Probe {
 22940  	if page.lbplr.IsEmpty() {
 22941  		return nil
 22942  	}
 22943  	return *page.lbplr.Value
 22944  }
 22945  
 22946  // Creates a new instance of the LoadBalancerProbeListResultPage type.
 22947  func NewLoadBalancerProbeListResultPage(cur LoadBalancerProbeListResult, getNextPage func(context.Context, LoadBalancerProbeListResult) (LoadBalancerProbeListResult, error)) LoadBalancerProbeListResultPage {
 22948  	return LoadBalancerProbeListResultPage{
 22949  		fn:    getNextPage,
 22950  		lbplr: cur,
 22951  	}
 22952  }
 22953  
 22954  // LoadBalancerPropertiesFormat properties of the load balancer.
 22955  type LoadBalancerPropertiesFormat struct {
 22956  	// FrontendIPConfigurations - Object representing the frontend IPs to be used for the load balancer.
 22957  	FrontendIPConfigurations *[]FrontendIPConfiguration `json:"frontendIPConfigurations,omitempty"`
 22958  	// BackendAddressPools - Collection of backend address pools used by a load balancer.
 22959  	BackendAddressPools *[]BackendAddressPool `json:"backendAddressPools,omitempty"`
 22960  	// LoadBalancingRules - Object collection representing the load balancing rules Gets the provisioning.
 22961  	LoadBalancingRules *[]LoadBalancingRule `json:"loadBalancingRules,omitempty"`
 22962  	// Probes - Collection of probe objects used in the load balancer.
 22963  	Probes *[]Probe `json:"probes,omitempty"`
 22964  	// 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.
 22965  	InboundNatRules *[]InboundNatRule `json:"inboundNatRules,omitempty"`
 22966  	// 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.
 22967  	InboundNatPools *[]InboundNatPool `json:"inboundNatPools,omitempty"`
 22968  	// OutboundRules - The outbound rules.
 22969  	OutboundRules *[]OutboundRule `json:"outboundRules,omitempty"`
 22970  	// ResourceGUID - READ-ONLY; The resource GUID property of the load balancer resource.
 22971  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 22972  	// ProvisioningState - READ-ONLY; The provisioning state of the load balancer resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 22973  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 22974  }
 22975  
 22976  // MarshalJSON is the custom marshaler for LoadBalancerPropertiesFormat.
 22977  func (lbpf LoadBalancerPropertiesFormat) MarshalJSON() ([]byte, error) {
 22978  	objectMap := make(map[string]interface{})
 22979  	if lbpf.FrontendIPConfigurations != nil {
 22980  		objectMap["frontendIPConfigurations"] = lbpf.FrontendIPConfigurations
 22981  	}
 22982  	if lbpf.BackendAddressPools != nil {
 22983  		objectMap["backendAddressPools"] = lbpf.BackendAddressPools
 22984  	}
 22985  	if lbpf.LoadBalancingRules != nil {
 22986  		objectMap["loadBalancingRules"] = lbpf.LoadBalancingRules
 22987  	}
 22988  	if lbpf.Probes != nil {
 22989  		objectMap["probes"] = lbpf.Probes
 22990  	}
 22991  	if lbpf.InboundNatRules != nil {
 22992  		objectMap["inboundNatRules"] = lbpf.InboundNatRules
 22993  	}
 22994  	if lbpf.InboundNatPools != nil {
 22995  		objectMap["inboundNatPools"] = lbpf.InboundNatPools
 22996  	}
 22997  	if lbpf.OutboundRules != nil {
 22998  		objectMap["outboundRules"] = lbpf.OutboundRules
 22999  	}
 23000  	return json.Marshal(objectMap)
 23001  }
 23002  
 23003  // LoadBalancersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 23004  // long-running operation.
 23005  type LoadBalancersCreateOrUpdateFuture struct {
 23006  	azure.FutureAPI
 23007  	// Result returns the result of the asynchronous operation.
 23008  	// If the operation has not completed it will return an error.
 23009  	Result func(LoadBalancersClient) (LoadBalancer, error)
 23010  }
 23011  
 23012  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 23013  func (future *LoadBalancersCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 23014  	var azFuture azure.Future
 23015  	if err := json.Unmarshal(body, &azFuture); err != nil {
 23016  		return err
 23017  	}
 23018  	future.FutureAPI = &azFuture
 23019  	future.Result = future.result
 23020  	return nil
 23021  }
 23022  
 23023  // result is the default implementation for LoadBalancersCreateOrUpdateFuture.Result.
 23024  func (future *LoadBalancersCreateOrUpdateFuture) result(client LoadBalancersClient) (lb LoadBalancer, err error) {
 23025  	var done bool
 23026  	done, err = future.DoneWithContext(context.Background(), client)
 23027  	if err != nil {
 23028  		err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 23029  		return
 23030  	}
 23031  	if !done {
 23032  		lb.Response.Response = future.Response()
 23033  		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersCreateOrUpdateFuture")
 23034  		return
 23035  	}
 23036  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 23037  	if lb.Response.Response, err = future.GetResult(sender); err == nil && lb.Response.Response.StatusCode != http.StatusNoContent {
 23038  		lb, err = client.CreateOrUpdateResponder(lb.Response.Response)
 23039  		if err != nil {
 23040  			err = autorest.NewErrorWithError(err, "network.LoadBalancersCreateOrUpdateFuture", "Result", lb.Response.Response, "Failure responding to request")
 23041  		}
 23042  	}
 23043  	return
 23044  }
 23045  
 23046  // LoadBalancersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 23047  // operation.
 23048  type LoadBalancersDeleteFuture struct {
 23049  	azure.FutureAPI
 23050  	// Result returns the result of the asynchronous operation.
 23051  	// If the operation has not completed it will return an error.
 23052  	Result func(LoadBalancersClient) (autorest.Response, error)
 23053  }
 23054  
 23055  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 23056  func (future *LoadBalancersDeleteFuture) UnmarshalJSON(body []byte) error {
 23057  	var azFuture azure.Future
 23058  	if err := json.Unmarshal(body, &azFuture); err != nil {
 23059  		return err
 23060  	}
 23061  	future.FutureAPI = &azFuture
 23062  	future.Result = future.result
 23063  	return nil
 23064  }
 23065  
 23066  // result is the default implementation for LoadBalancersDeleteFuture.Result.
 23067  func (future *LoadBalancersDeleteFuture) result(client LoadBalancersClient) (ar autorest.Response, err error) {
 23068  	var done bool
 23069  	done, err = future.DoneWithContext(context.Background(), client)
 23070  	if err != nil {
 23071  		err = autorest.NewErrorWithError(err, "network.LoadBalancersDeleteFuture", "Result", future.Response(), "Polling failure")
 23072  		return
 23073  	}
 23074  	if !done {
 23075  		ar.Response = future.Response()
 23076  		err = azure.NewAsyncOpIncompleteError("network.LoadBalancersDeleteFuture")
 23077  		return
 23078  	}
 23079  	ar.Response = future.Response()
 23080  	return
 23081  }
 23082  
 23083  // LoadBalancerSku SKU of a load balancer.
 23084  type LoadBalancerSku struct {
 23085  	// Name - Name of a load balancer SKU. Possible values include: 'LoadBalancerSkuNameBasic', 'LoadBalancerSkuNameStandard'
 23086  	Name LoadBalancerSkuName `json:"name,omitempty"`
 23087  }
 23088  
 23089  // LoadBalancingRule a load balancing rule for a load balancer.
 23090  type LoadBalancingRule struct {
 23091  	autorest.Response `json:"-"`
 23092  	// LoadBalancingRulePropertiesFormat - Properties of load balancer load balancing rule.
 23093  	*LoadBalancingRulePropertiesFormat `json:"properties,omitempty"`
 23094  	// Name - The name of the resource that is unique within the set of load balancing rules used by the load balancer. This name can be used to access the resource.
 23095  	Name *string `json:"name,omitempty"`
 23096  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 23097  	Etag *string `json:"etag,omitempty"`
 23098  	// Type - READ-ONLY; Type of the resource.
 23099  	Type *string `json:"type,omitempty"`
 23100  	// ID - Resource ID.
 23101  	ID *string `json:"id,omitempty"`
 23102  }
 23103  
 23104  // MarshalJSON is the custom marshaler for LoadBalancingRule.
 23105  func (lbr LoadBalancingRule) MarshalJSON() ([]byte, error) {
 23106  	objectMap := make(map[string]interface{})
 23107  	if lbr.LoadBalancingRulePropertiesFormat != nil {
 23108  		objectMap["properties"] = lbr.LoadBalancingRulePropertiesFormat
 23109  	}
 23110  	if lbr.Name != nil {
 23111  		objectMap["name"] = lbr.Name
 23112  	}
 23113  	if lbr.ID != nil {
 23114  		objectMap["id"] = lbr.ID
 23115  	}
 23116  	return json.Marshal(objectMap)
 23117  }
 23118  
 23119  // UnmarshalJSON is the custom unmarshaler for LoadBalancingRule struct.
 23120  func (lbr *LoadBalancingRule) UnmarshalJSON(body []byte) error {
 23121  	var m map[string]*json.RawMessage
 23122  	err := json.Unmarshal(body, &m)
 23123  	if err != nil {
 23124  		return err
 23125  	}
 23126  	for k, v := range m {
 23127  		switch k {
 23128  		case "properties":
 23129  			if v != nil {
 23130  				var loadBalancingRulePropertiesFormat LoadBalancingRulePropertiesFormat
 23131  				err = json.Unmarshal(*v, &loadBalancingRulePropertiesFormat)
 23132  				if err != nil {
 23133  					return err
 23134  				}
 23135  				lbr.LoadBalancingRulePropertiesFormat = &loadBalancingRulePropertiesFormat
 23136  			}
 23137  		case "name":
 23138  			if v != nil {
 23139  				var name string
 23140  				err = json.Unmarshal(*v, &name)
 23141  				if err != nil {
 23142  					return err
 23143  				}
 23144  				lbr.Name = &name
 23145  			}
 23146  		case "etag":
 23147  			if v != nil {
 23148  				var etag string
 23149  				err = json.Unmarshal(*v, &etag)
 23150  				if err != nil {
 23151  					return err
 23152  				}
 23153  				lbr.Etag = &etag
 23154  			}
 23155  		case "type":
 23156  			if v != nil {
 23157  				var typeVar string
 23158  				err = json.Unmarshal(*v, &typeVar)
 23159  				if err != nil {
 23160  					return err
 23161  				}
 23162  				lbr.Type = &typeVar
 23163  			}
 23164  		case "id":
 23165  			if v != nil {
 23166  				var ID string
 23167  				err = json.Unmarshal(*v, &ID)
 23168  				if err != nil {
 23169  					return err
 23170  				}
 23171  				lbr.ID = &ID
 23172  			}
 23173  		}
 23174  	}
 23175  
 23176  	return nil
 23177  }
 23178  
 23179  // LoadBalancingRulePropertiesFormat properties of the load balancer.
 23180  type LoadBalancingRulePropertiesFormat struct {
 23181  	// FrontendIPConfiguration - A reference to frontend IP addresses.
 23182  	FrontendIPConfiguration *SubResource `json:"frontendIPConfiguration,omitempty"`
 23183  	// BackendAddressPool - A reference to a pool of DIPs. Inbound traffic is randomly load balanced across IPs in the backend IPs.
 23184  	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
 23185  	// Probe - The reference to the load balancer probe used by the load balancing rule.
 23186  	Probe *SubResource `json:"probe,omitempty"`
 23187  	// Protocol - The reference to the transport protocol used by the load balancing rule. Possible values include: 'TransportProtocolUDP', 'TransportProtocolTCP', 'TransportProtocolAll'
 23188  	Protocol TransportProtocol `json:"protocol,omitempty"`
 23189  	// LoadDistribution - The load distribution policy for this rule. Possible values include: 'LoadDistributionDefault', 'LoadDistributionSourceIP', 'LoadDistributionSourceIPProtocol'
 23190  	LoadDistribution LoadDistribution `json:"loadDistribution,omitempty"`
 23191  	// 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".
 23192  	FrontendPort *int32 `json:"frontendPort,omitempty"`
 23193  	// BackendPort - The port used for internal connections on the endpoint. Acceptable values are between 0 and 65535. Note that value 0 enables "Any Port".
 23194  	BackendPort *int32 `json:"backendPort,omitempty"`
 23195  	// 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.
 23196  	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
 23197  	// 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.
 23198  	EnableFloatingIP *bool `json:"enableFloatingIP,omitempty"`
 23199  	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
 23200  	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
 23201  	// DisableOutboundSnat - Configures SNAT for the VMs in the backend pool to use the publicIP address specified in the frontend of the load balancing rule.
 23202  	DisableOutboundSnat *bool `json:"disableOutboundSnat,omitempty"`
 23203  	// ProvisioningState - READ-ONLY; The provisioning state of the load balancing rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 23204  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 23205  }
 23206  
 23207  // MarshalJSON is the custom marshaler for LoadBalancingRulePropertiesFormat.
 23208  func (lbrpf LoadBalancingRulePropertiesFormat) MarshalJSON() ([]byte, error) {
 23209  	objectMap := make(map[string]interface{})
 23210  	if lbrpf.FrontendIPConfiguration != nil {
 23211  		objectMap["frontendIPConfiguration"] = lbrpf.FrontendIPConfiguration
 23212  	}
 23213  	if lbrpf.BackendAddressPool != nil {
 23214  		objectMap["backendAddressPool"] = lbrpf.BackendAddressPool
 23215  	}
 23216  	if lbrpf.Probe != nil {
 23217  		objectMap["probe"] = lbrpf.Probe
 23218  	}
 23219  	if lbrpf.Protocol != "" {
 23220  		objectMap["protocol"] = lbrpf.Protocol
 23221  	}
 23222  	if lbrpf.LoadDistribution != "" {
 23223  		objectMap["loadDistribution"] = lbrpf.LoadDistribution
 23224  	}
 23225  	if lbrpf.FrontendPort != nil {
 23226  		objectMap["frontendPort"] = lbrpf.FrontendPort
 23227  	}
 23228  	if lbrpf.BackendPort != nil {
 23229  		objectMap["backendPort"] = lbrpf.BackendPort
 23230  	}
 23231  	if lbrpf.IdleTimeoutInMinutes != nil {
 23232  		objectMap["idleTimeoutInMinutes"] = lbrpf.IdleTimeoutInMinutes
 23233  	}
 23234  	if lbrpf.EnableFloatingIP != nil {
 23235  		objectMap["enableFloatingIP"] = lbrpf.EnableFloatingIP
 23236  	}
 23237  	if lbrpf.EnableTCPReset != nil {
 23238  		objectMap["enableTcpReset"] = lbrpf.EnableTCPReset
 23239  	}
 23240  	if lbrpf.DisableOutboundSnat != nil {
 23241  		objectMap["disableOutboundSnat"] = lbrpf.DisableOutboundSnat
 23242  	}
 23243  	return json.Marshal(objectMap)
 23244  }
 23245  
 23246  // LocalNetworkGateway a common class for general resource information.
 23247  type LocalNetworkGateway struct {
 23248  	autorest.Response `json:"-"`
 23249  	// LocalNetworkGatewayPropertiesFormat - Properties of the local network gateway.
 23250  	*LocalNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
 23251  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 23252  	Etag *string `json:"etag,omitempty"`
 23253  	// ID - Resource ID.
 23254  	ID *string `json:"id,omitempty"`
 23255  	// Name - READ-ONLY; Resource name.
 23256  	Name *string `json:"name,omitempty"`
 23257  	// Type - READ-ONLY; Resource type.
 23258  	Type *string `json:"type,omitempty"`
 23259  	// Location - Resource location.
 23260  	Location *string `json:"location,omitempty"`
 23261  	// Tags - Resource tags.
 23262  	Tags map[string]*string `json:"tags"`
 23263  }
 23264  
 23265  // MarshalJSON is the custom marshaler for LocalNetworkGateway.
 23266  func (lng LocalNetworkGateway) MarshalJSON() ([]byte, error) {
 23267  	objectMap := make(map[string]interface{})
 23268  	if lng.LocalNetworkGatewayPropertiesFormat != nil {
 23269  		objectMap["properties"] = lng.LocalNetworkGatewayPropertiesFormat
 23270  	}
 23271  	if lng.ID != nil {
 23272  		objectMap["id"] = lng.ID
 23273  	}
 23274  	if lng.Location != nil {
 23275  		objectMap["location"] = lng.Location
 23276  	}
 23277  	if lng.Tags != nil {
 23278  		objectMap["tags"] = lng.Tags
 23279  	}
 23280  	return json.Marshal(objectMap)
 23281  }
 23282  
 23283  // UnmarshalJSON is the custom unmarshaler for LocalNetworkGateway struct.
 23284  func (lng *LocalNetworkGateway) UnmarshalJSON(body []byte) error {
 23285  	var m map[string]*json.RawMessage
 23286  	err := json.Unmarshal(body, &m)
 23287  	if err != nil {
 23288  		return err
 23289  	}
 23290  	for k, v := range m {
 23291  		switch k {
 23292  		case "properties":
 23293  			if v != nil {
 23294  				var localNetworkGatewayPropertiesFormat LocalNetworkGatewayPropertiesFormat
 23295  				err = json.Unmarshal(*v, &localNetworkGatewayPropertiesFormat)
 23296  				if err != nil {
 23297  					return err
 23298  				}
 23299  				lng.LocalNetworkGatewayPropertiesFormat = &localNetworkGatewayPropertiesFormat
 23300  			}
 23301  		case "etag":
 23302  			if v != nil {
 23303  				var etag string
 23304  				err = json.Unmarshal(*v, &etag)
 23305  				if err != nil {
 23306  					return err
 23307  				}
 23308  				lng.Etag = &etag
 23309  			}
 23310  		case "id":
 23311  			if v != nil {
 23312  				var ID string
 23313  				err = json.Unmarshal(*v, &ID)
 23314  				if err != nil {
 23315  					return err
 23316  				}
 23317  				lng.ID = &ID
 23318  			}
 23319  		case "name":
 23320  			if v != nil {
 23321  				var name string
 23322  				err = json.Unmarshal(*v, &name)
 23323  				if err != nil {
 23324  					return err
 23325  				}
 23326  				lng.Name = &name
 23327  			}
 23328  		case "type":
 23329  			if v != nil {
 23330  				var typeVar string
 23331  				err = json.Unmarshal(*v, &typeVar)
 23332  				if err != nil {
 23333  					return err
 23334  				}
 23335  				lng.Type = &typeVar
 23336  			}
 23337  		case "location":
 23338  			if v != nil {
 23339  				var location string
 23340  				err = json.Unmarshal(*v, &location)
 23341  				if err != nil {
 23342  					return err
 23343  				}
 23344  				lng.Location = &location
 23345  			}
 23346  		case "tags":
 23347  			if v != nil {
 23348  				var tags map[string]*string
 23349  				err = json.Unmarshal(*v, &tags)
 23350  				if err != nil {
 23351  					return err
 23352  				}
 23353  				lng.Tags = tags
 23354  			}
 23355  		}
 23356  	}
 23357  
 23358  	return nil
 23359  }
 23360  
 23361  // LocalNetworkGatewayListResult response for ListLocalNetworkGateways API service call.
 23362  type LocalNetworkGatewayListResult struct {
 23363  	autorest.Response `json:"-"`
 23364  	// Value - A list of local network gateways that exists in a resource group.
 23365  	Value *[]LocalNetworkGateway `json:"value,omitempty"`
 23366  	// NextLink - READ-ONLY; The URL to get the next set of results.
 23367  	NextLink *string `json:"nextLink,omitempty"`
 23368  }
 23369  
 23370  // MarshalJSON is the custom marshaler for LocalNetworkGatewayListResult.
 23371  func (lnglr LocalNetworkGatewayListResult) MarshalJSON() ([]byte, error) {
 23372  	objectMap := make(map[string]interface{})
 23373  	if lnglr.Value != nil {
 23374  		objectMap["value"] = lnglr.Value
 23375  	}
 23376  	return json.Marshal(objectMap)
 23377  }
 23378  
 23379  // LocalNetworkGatewayListResultIterator provides access to a complete listing of LocalNetworkGateway
 23380  // values.
 23381  type LocalNetworkGatewayListResultIterator struct {
 23382  	i    int
 23383  	page LocalNetworkGatewayListResultPage
 23384  }
 23385  
 23386  // NextWithContext advances to the next value.  If there was an error making
 23387  // the request the iterator does not advance and the error is returned.
 23388  func (iter *LocalNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
 23389  	if tracing.IsEnabled() {
 23390  		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultIterator.NextWithContext")
 23391  		defer func() {
 23392  			sc := -1
 23393  			if iter.Response().Response.Response != nil {
 23394  				sc = iter.Response().Response.Response.StatusCode
 23395  			}
 23396  			tracing.EndSpan(ctx, sc, err)
 23397  		}()
 23398  	}
 23399  	iter.i++
 23400  	if iter.i < len(iter.page.Values()) {
 23401  		return nil
 23402  	}
 23403  	err = iter.page.NextWithContext(ctx)
 23404  	if err != nil {
 23405  		iter.i--
 23406  		return err
 23407  	}
 23408  	iter.i = 0
 23409  	return nil
 23410  }
 23411  
 23412  // Next advances to the next value.  If there was an error making
 23413  // the request the iterator does not advance and the error is returned.
 23414  // Deprecated: Use NextWithContext() instead.
 23415  func (iter *LocalNetworkGatewayListResultIterator) Next() error {
 23416  	return iter.NextWithContext(context.Background())
 23417  }
 23418  
 23419  // NotDone returns true if the enumeration should be started or is not yet complete.
 23420  func (iter LocalNetworkGatewayListResultIterator) NotDone() bool {
 23421  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 23422  }
 23423  
 23424  // Response returns the raw server response from the last page request.
 23425  func (iter LocalNetworkGatewayListResultIterator) Response() LocalNetworkGatewayListResult {
 23426  	return iter.page.Response()
 23427  }
 23428  
 23429  // Value returns the current value or a zero-initialized value if the
 23430  // iterator has advanced beyond the end of the collection.
 23431  func (iter LocalNetworkGatewayListResultIterator) Value() LocalNetworkGateway {
 23432  	if !iter.page.NotDone() {
 23433  		return LocalNetworkGateway{}
 23434  	}
 23435  	return iter.page.Values()[iter.i]
 23436  }
 23437  
 23438  // Creates a new instance of the LocalNetworkGatewayListResultIterator type.
 23439  func NewLocalNetworkGatewayListResultIterator(page LocalNetworkGatewayListResultPage) LocalNetworkGatewayListResultIterator {
 23440  	return LocalNetworkGatewayListResultIterator{page: page}
 23441  }
 23442  
 23443  // IsEmpty returns true if the ListResult contains no values.
 23444  func (lnglr LocalNetworkGatewayListResult) IsEmpty() bool {
 23445  	return lnglr.Value == nil || len(*lnglr.Value) == 0
 23446  }
 23447  
 23448  // hasNextLink returns true if the NextLink is not empty.
 23449  func (lnglr LocalNetworkGatewayListResult) hasNextLink() bool {
 23450  	return lnglr.NextLink != nil && len(*lnglr.NextLink) != 0
 23451  }
 23452  
 23453  // localNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
 23454  // It returns nil if no more results exist.
 23455  func (lnglr LocalNetworkGatewayListResult) localNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
 23456  	if !lnglr.hasNextLink() {
 23457  		return nil, nil
 23458  	}
 23459  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 23460  		autorest.AsJSON(),
 23461  		autorest.AsGet(),
 23462  		autorest.WithBaseURL(to.String(lnglr.NextLink)))
 23463  }
 23464  
 23465  // LocalNetworkGatewayListResultPage contains a page of LocalNetworkGateway values.
 23466  type LocalNetworkGatewayListResultPage struct {
 23467  	fn    func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)
 23468  	lnglr LocalNetworkGatewayListResult
 23469  }
 23470  
 23471  // NextWithContext advances to the next page of values.  If there was an error making
 23472  // the request the page does not advance and the error is returned.
 23473  func (page *LocalNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
 23474  	if tracing.IsEnabled() {
 23475  		ctx = tracing.StartSpan(ctx, fqdn+"/LocalNetworkGatewayListResultPage.NextWithContext")
 23476  		defer func() {
 23477  			sc := -1
 23478  			if page.Response().Response.Response != nil {
 23479  				sc = page.Response().Response.Response.StatusCode
 23480  			}
 23481  			tracing.EndSpan(ctx, sc, err)
 23482  		}()
 23483  	}
 23484  	for {
 23485  		next, err := page.fn(ctx, page.lnglr)
 23486  		if err != nil {
 23487  			return err
 23488  		}
 23489  		page.lnglr = next
 23490  		if !next.hasNextLink() || !next.IsEmpty() {
 23491  			break
 23492  		}
 23493  	}
 23494  	return nil
 23495  }
 23496  
 23497  // Next advances to the next page of values.  If there was an error making
 23498  // the request the page does not advance and the error is returned.
 23499  // Deprecated: Use NextWithContext() instead.
 23500  func (page *LocalNetworkGatewayListResultPage) Next() error {
 23501  	return page.NextWithContext(context.Background())
 23502  }
 23503  
 23504  // NotDone returns true if the page enumeration should be started or is not yet complete.
 23505  func (page LocalNetworkGatewayListResultPage) NotDone() bool {
 23506  	return !page.lnglr.IsEmpty()
 23507  }
 23508  
 23509  // Response returns the raw server response from the last page request.
 23510  func (page LocalNetworkGatewayListResultPage) Response() LocalNetworkGatewayListResult {
 23511  	return page.lnglr
 23512  }
 23513  
 23514  // Values returns the slice of values for the current page or nil if there are no values.
 23515  func (page LocalNetworkGatewayListResultPage) Values() []LocalNetworkGateway {
 23516  	if page.lnglr.IsEmpty() {
 23517  		return nil
 23518  	}
 23519  	return *page.lnglr.Value
 23520  }
 23521  
 23522  // Creates a new instance of the LocalNetworkGatewayListResultPage type.
 23523  func NewLocalNetworkGatewayListResultPage(cur LocalNetworkGatewayListResult, getNextPage func(context.Context, LocalNetworkGatewayListResult) (LocalNetworkGatewayListResult, error)) LocalNetworkGatewayListResultPage {
 23524  	return LocalNetworkGatewayListResultPage{
 23525  		fn:    getNextPage,
 23526  		lnglr: cur,
 23527  	}
 23528  }
 23529  
 23530  // LocalNetworkGatewayPropertiesFormat localNetworkGateway properties.
 23531  type LocalNetworkGatewayPropertiesFormat struct {
 23532  	// LocalNetworkAddressSpace - Local network site address space.
 23533  	LocalNetworkAddressSpace *AddressSpace `json:"localNetworkAddressSpace,omitempty"`
 23534  	// GatewayIPAddress - IP address of local network gateway.
 23535  	GatewayIPAddress *string `json:"gatewayIpAddress,omitempty"`
 23536  	// Fqdn - FQDN of local network gateway.
 23537  	Fqdn *string `json:"fqdn,omitempty"`
 23538  	// BgpSettings - Local network gateway's BGP speaker settings.
 23539  	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
 23540  	// ResourceGUID - READ-ONLY; The resource GUID property of the local network gateway resource.
 23541  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 23542  	// ProvisioningState - READ-ONLY; The provisioning state of the local network gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 23543  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 23544  }
 23545  
 23546  // MarshalJSON is the custom marshaler for LocalNetworkGatewayPropertiesFormat.
 23547  func (lngpf LocalNetworkGatewayPropertiesFormat) MarshalJSON() ([]byte, error) {
 23548  	objectMap := make(map[string]interface{})
 23549  	if lngpf.LocalNetworkAddressSpace != nil {
 23550  		objectMap["localNetworkAddressSpace"] = lngpf.LocalNetworkAddressSpace
 23551  	}
 23552  	if lngpf.GatewayIPAddress != nil {
 23553  		objectMap["gatewayIpAddress"] = lngpf.GatewayIPAddress
 23554  	}
 23555  	if lngpf.Fqdn != nil {
 23556  		objectMap["fqdn"] = lngpf.Fqdn
 23557  	}
 23558  	if lngpf.BgpSettings != nil {
 23559  		objectMap["bgpSettings"] = lngpf.BgpSettings
 23560  	}
 23561  	return json.Marshal(objectMap)
 23562  }
 23563  
 23564  // LocalNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 23565  // long-running operation.
 23566  type LocalNetworkGatewaysCreateOrUpdateFuture struct {
 23567  	azure.FutureAPI
 23568  	// Result returns the result of the asynchronous operation.
 23569  	// If the operation has not completed it will return an error.
 23570  	Result func(LocalNetworkGatewaysClient) (LocalNetworkGateway, error)
 23571  }
 23572  
 23573  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 23574  func (future *LocalNetworkGatewaysCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 23575  	var azFuture azure.Future
 23576  	if err := json.Unmarshal(body, &azFuture); err != nil {
 23577  		return err
 23578  	}
 23579  	future.FutureAPI = &azFuture
 23580  	future.Result = future.result
 23581  	return nil
 23582  }
 23583  
 23584  // result is the default implementation for LocalNetworkGatewaysCreateOrUpdateFuture.Result.
 23585  func (future *LocalNetworkGatewaysCreateOrUpdateFuture) result(client LocalNetworkGatewaysClient) (lng LocalNetworkGateway, err error) {
 23586  	var done bool
 23587  	done, err = future.DoneWithContext(context.Background(), client)
 23588  	if err != nil {
 23589  		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 23590  		return
 23591  	}
 23592  	if !done {
 23593  		lng.Response.Response = future.Response()
 23594  		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysCreateOrUpdateFuture")
 23595  		return
 23596  	}
 23597  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 23598  	if lng.Response.Response, err = future.GetResult(sender); err == nil && lng.Response.Response.StatusCode != http.StatusNoContent {
 23599  		lng, err = client.CreateOrUpdateResponder(lng.Response.Response)
 23600  		if err != nil {
 23601  			err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysCreateOrUpdateFuture", "Result", lng.Response.Response, "Failure responding to request")
 23602  		}
 23603  	}
 23604  	return
 23605  }
 23606  
 23607  // LocalNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
 23608  // long-running operation.
 23609  type LocalNetworkGatewaysDeleteFuture struct {
 23610  	azure.FutureAPI
 23611  	// Result returns the result of the asynchronous operation.
 23612  	// If the operation has not completed it will return an error.
 23613  	Result func(LocalNetworkGatewaysClient) (autorest.Response, error)
 23614  }
 23615  
 23616  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 23617  func (future *LocalNetworkGatewaysDeleteFuture) UnmarshalJSON(body []byte) error {
 23618  	var azFuture azure.Future
 23619  	if err := json.Unmarshal(body, &azFuture); err != nil {
 23620  		return err
 23621  	}
 23622  	future.FutureAPI = &azFuture
 23623  	future.Result = future.result
 23624  	return nil
 23625  }
 23626  
 23627  // result is the default implementation for LocalNetworkGatewaysDeleteFuture.Result.
 23628  func (future *LocalNetworkGatewaysDeleteFuture) result(client LocalNetworkGatewaysClient) (ar autorest.Response, err error) {
 23629  	var done bool
 23630  	done, err = future.DoneWithContext(context.Background(), client)
 23631  	if err != nil {
 23632  		err = autorest.NewErrorWithError(err, "network.LocalNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
 23633  		return
 23634  	}
 23635  	if !done {
 23636  		ar.Response = future.Response()
 23637  		err = azure.NewAsyncOpIncompleteError("network.LocalNetworkGatewaysDeleteFuture")
 23638  		return
 23639  	}
 23640  	ar.Response = future.Response()
 23641  	return
 23642  }
 23643  
 23644  // LogSpecification description of logging specification.
 23645  type LogSpecification struct {
 23646  	// Name - The name of the specification.
 23647  	Name *string `json:"name,omitempty"`
 23648  	// DisplayName - The display name of the specification.
 23649  	DisplayName *string `json:"displayName,omitempty"`
 23650  	// BlobDuration - Duration of the blob.
 23651  	BlobDuration *string `json:"blobDuration,omitempty"`
 23652  }
 23653  
 23654  // ManagedRuleGroupOverride defines a managed rule group override setting.
 23655  type ManagedRuleGroupOverride struct {
 23656  	// RuleGroupName - The managed rule group to override.
 23657  	RuleGroupName *string `json:"ruleGroupName,omitempty"`
 23658  	// Rules - List of rules that will be disabled. If none specified, all rules in the group will be disabled.
 23659  	Rules *[]ManagedRuleOverride `json:"rules,omitempty"`
 23660  }
 23661  
 23662  // ManagedRuleOverride defines a managed rule group override setting.
 23663  type ManagedRuleOverride struct {
 23664  	// RuleID - Identifier for the managed rule.
 23665  	RuleID *string `json:"ruleId,omitempty"`
 23666  	// State - The state of the managed rule. Defaults to Disabled if not specified. Possible values include: 'ManagedRuleEnabledStateDisabled'
 23667  	State ManagedRuleEnabledState `json:"state,omitempty"`
 23668  }
 23669  
 23670  // ManagedRulesDefinition allow to exclude some variable satisfy the condition for the WAF check.
 23671  type ManagedRulesDefinition struct {
 23672  	// Exclusions - The Exclusions that are applied on the policy.
 23673  	Exclusions *[]OwaspCrsExclusionEntry `json:"exclusions,omitempty"`
 23674  	// ManagedRuleSets - The managed rule sets that are associated with the policy.
 23675  	ManagedRuleSets *[]ManagedRuleSet `json:"managedRuleSets,omitempty"`
 23676  }
 23677  
 23678  // ManagedRuleSet defines a managed rule set.
 23679  type ManagedRuleSet struct {
 23680  	// RuleSetType - Defines the rule set type to use.
 23681  	RuleSetType *string `json:"ruleSetType,omitempty"`
 23682  	// RuleSetVersion - Defines the version of the rule set to use.
 23683  	RuleSetVersion *string `json:"ruleSetVersion,omitempty"`
 23684  	// RuleGroupOverrides - Defines the rule group overrides to apply to the rule set.
 23685  	RuleGroupOverrides *[]ManagedRuleGroupOverride `json:"ruleGroupOverrides,omitempty"`
 23686  }
 23687  
 23688  // ManagedServiceIdentity identity for the resource.
 23689  type ManagedServiceIdentity struct {
 23690  	// PrincipalID - READ-ONLY; The principal id of the system assigned identity. This property will only be provided for a system assigned identity.
 23691  	PrincipalID *string `json:"principalId,omitempty"`
 23692  	// TenantID - READ-ONLY; The tenant id of the system assigned identity. This property will only be provided for a system assigned identity.
 23693  	TenantID *string `json:"tenantId,omitempty"`
 23694  	// Type - The type of identity used for the resource. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine. Possible values include: 'ResourceIdentityTypeSystemAssigned', 'ResourceIdentityTypeUserAssigned', 'ResourceIdentityTypeSystemAssignedUserAssigned', 'ResourceIdentityTypeNone'
 23695  	Type ResourceIdentityType `json:"type,omitempty"`
 23696  	// UserAssignedIdentities - The list of user identities associated with resource. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
 23697  	UserAssignedIdentities map[string]*ManagedServiceIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"`
 23698  }
 23699  
 23700  // MarshalJSON is the custom marshaler for ManagedServiceIdentity.
 23701  func (msi ManagedServiceIdentity) MarshalJSON() ([]byte, error) {
 23702  	objectMap := make(map[string]interface{})
 23703  	if msi.Type != "" {
 23704  		objectMap["type"] = msi.Type
 23705  	}
 23706  	if msi.UserAssignedIdentities != nil {
 23707  		objectMap["userAssignedIdentities"] = msi.UserAssignedIdentities
 23708  	}
 23709  	return json.Marshal(objectMap)
 23710  }
 23711  
 23712  // ManagedServiceIdentityUserAssignedIdentitiesValue ...
 23713  type ManagedServiceIdentityUserAssignedIdentitiesValue struct {
 23714  	// PrincipalID - READ-ONLY; The principal id of user assigned identity.
 23715  	PrincipalID *string `json:"principalId,omitempty"`
 23716  	// ClientID - READ-ONLY; The client id of user assigned identity.
 23717  	ClientID *string `json:"clientId,omitempty"`
 23718  }
 23719  
 23720  // MarshalJSON is the custom marshaler for ManagedServiceIdentityUserAssignedIdentitiesValue.
 23721  func (msiAiv ManagedServiceIdentityUserAssignedIdentitiesValue) MarshalJSON() ([]byte, error) {
 23722  	objectMap := make(map[string]interface{})
 23723  	return json.Marshal(objectMap)
 23724  }
 23725  
 23726  // MatchCondition define match conditions.
 23727  type MatchCondition struct {
 23728  	// MatchVariables - List of match variables.
 23729  	MatchVariables *[]MatchVariable `json:"matchVariables,omitempty"`
 23730  	// Operator - The operator to be matched. Possible values include: 'WebApplicationFirewallOperatorIPMatch', 'WebApplicationFirewallOperatorEqual', 'WebApplicationFirewallOperatorContains', 'WebApplicationFirewallOperatorLessThan', 'WebApplicationFirewallOperatorGreaterThan', 'WebApplicationFirewallOperatorLessThanOrEqual', 'WebApplicationFirewallOperatorGreaterThanOrEqual', 'WebApplicationFirewallOperatorBeginsWith', 'WebApplicationFirewallOperatorEndsWith', 'WebApplicationFirewallOperatorRegex', 'WebApplicationFirewallOperatorGeoMatch'
 23731  	Operator WebApplicationFirewallOperator `json:"operator,omitempty"`
 23732  	// NegationConditon - Whether this is negate condition or not.
 23733  	NegationConditon *bool `json:"negationConditon,omitempty"`
 23734  	// MatchValues - Match value.
 23735  	MatchValues *[]string `json:"matchValues,omitempty"`
 23736  	// Transforms - List of transforms.
 23737  	Transforms *[]WebApplicationFirewallTransform `json:"transforms,omitempty"`
 23738  }
 23739  
 23740  // MatchedRule matched rule.
 23741  type MatchedRule struct {
 23742  	// RuleName - Name of the matched network security rule.
 23743  	RuleName *string `json:"ruleName,omitempty"`
 23744  	// Action - The network traffic is allowed or denied. Possible values are 'Allow' and 'Deny'.
 23745  	Action *string `json:"action,omitempty"`
 23746  }
 23747  
 23748  // MatchVariable define match variables.
 23749  type MatchVariable struct {
 23750  	// VariableName - Match Variable. Possible values include: 'RemoteAddr', 'RequestMethod', 'QueryString', 'PostArgs', 'RequestURI', 'RequestHeaders', 'RequestBody', 'RequestCookies'
 23751  	VariableName WebApplicationFirewallMatchVariable `json:"variableName,omitempty"`
 23752  	// Selector - The selector of match variable.
 23753  	Selector *string `json:"selector,omitempty"`
 23754  }
 23755  
 23756  // MetricSpecification description of metrics specification.
 23757  type MetricSpecification struct {
 23758  	// Name - The name of the metric.
 23759  	Name *string `json:"name,omitempty"`
 23760  	// DisplayName - The display name of the metric.
 23761  	DisplayName *string `json:"displayName,omitempty"`
 23762  	// DisplayDescription - The description of the metric.
 23763  	DisplayDescription *string `json:"displayDescription,omitempty"`
 23764  	// Unit - Units the metric to be displayed in.
 23765  	Unit *string `json:"unit,omitempty"`
 23766  	// AggregationType - The aggregation type.
 23767  	AggregationType *string `json:"aggregationType,omitempty"`
 23768  	// Availabilities - List of availability.
 23769  	Availabilities *[]Availability `json:"availabilities,omitempty"`
 23770  	// EnableRegionalMdmAccount - Whether regional MDM account enabled.
 23771  	EnableRegionalMdmAccount *bool `json:"enableRegionalMdmAccount,omitempty"`
 23772  	// FillGapWithZero - Whether gaps would be filled with zeros.
 23773  	FillGapWithZero *bool `json:"fillGapWithZero,omitempty"`
 23774  	// MetricFilterPattern - Pattern for the filter of the metric.
 23775  	MetricFilterPattern *string `json:"metricFilterPattern,omitempty"`
 23776  	// Dimensions - List of dimensions.
 23777  	Dimensions *[]Dimension `json:"dimensions,omitempty"`
 23778  	// IsInternal - Whether the metric is internal.
 23779  	IsInternal *bool `json:"isInternal,omitempty"`
 23780  	// SourceMdmAccount - The source MDM account.
 23781  	SourceMdmAccount *string `json:"sourceMdmAccount,omitempty"`
 23782  	// SourceMdmNamespace - The source MDM namespace.
 23783  	SourceMdmNamespace *string `json:"sourceMdmNamespace,omitempty"`
 23784  	// ResourceIDDimensionNameOverride - The resource Id dimension name override.
 23785  	ResourceIDDimensionNameOverride *string `json:"resourceIdDimensionNameOverride,omitempty"`
 23786  }
 23787  
 23788  // NatGateway nat Gateway resource.
 23789  type NatGateway struct {
 23790  	autorest.Response `json:"-"`
 23791  	// Sku - The nat gateway SKU.
 23792  	Sku *NatGatewaySku `json:"sku,omitempty"`
 23793  	// NatGatewayPropertiesFormat - Nat Gateway properties.
 23794  	*NatGatewayPropertiesFormat `json:"properties,omitempty"`
 23795  	// Zones - A list of availability zones denoting the zone in which Nat Gateway should be deployed.
 23796  	Zones *[]string `json:"zones,omitempty"`
 23797  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 23798  	Etag *string `json:"etag,omitempty"`
 23799  	// ID - Resource ID.
 23800  	ID *string `json:"id,omitempty"`
 23801  	// Name - READ-ONLY; Resource name.
 23802  	Name *string `json:"name,omitempty"`
 23803  	// Type - READ-ONLY; Resource type.
 23804  	Type *string `json:"type,omitempty"`
 23805  	// Location - Resource location.
 23806  	Location *string `json:"location,omitempty"`
 23807  	// Tags - Resource tags.
 23808  	Tags map[string]*string `json:"tags"`
 23809  }
 23810  
 23811  // MarshalJSON is the custom marshaler for NatGateway.
 23812  func (ng NatGateway) MarshalJSON() ([]byte, error) {
 23813  	objectMap := make(map[string]interface{})
 23814  	if ng.Sku != nil {
 23815  		objectMap["sku"] = ng.Sku
 23816  	}
 23817  	if ng.NatGatewayPropertiesFormat != nil {
 23818  		objectMap["properties"] = ng.NatGatewayPropertiesFormat
 23819  	}
 23820  	if ng.Zones != nil {
 23821  		objectMap["zones"] = ng.Zones
 23822  	}
 23823  	if ng.ID != nil {
 23824  		objectMap["id"] = ng.ID
 23825  	}
 23826  	if ng.Location != nil {
 23827  		objectMap["location"] = ng.Location
 23828  	}
 23829  	if ng.Tags != nil {
 23830  		objectMap["tags"] = ng.Tags
 23831  	}
 23832  	return json.Marshal(objectMap)
 23833  }
 23834  
 23835  // UnmarshalJSON is the custom unmarshaler for NatGateway struct.
 23836  func (ng *NatGateway) UnmarshalJSON(body []byte) error {
 23837  	var m map[string]*json.RawMessage
 23838  	err := json.Unmarshal(body, &m)
 23839  	if err != nil {
 23840  		return err
 23841  	}
 23842  	for k, v := range m {
 23843  		switch k {
 23844  		case "sku":
 23845  			if v != nil {
 23846  				var sku NatGatewaySku
 23847  				err = json.Unmarshal(*v, &sku)
 23848  				if err != nil {
 23849  					return err
 23850  				}
 23851  				ng.Sku = &sku
 23852  			}
 23853  		case "properties":
 23854  			if v != nil {
 23855  				var natGatewayPropertiesFormat NatGatewayPropertiesFormat
 23856  				err = json.Unmarshal(*v, &natGatewayPropertiesFormat)
 23857  				if err != nil {
 23858  					return err
 23859  				}
 23860  				ng.NatGatewayPropertiesFormat = &natGatewayPropertiesFormat
 23861  			}
 23862  		case "zones":
 23863  			if v != nil {
 23864  				var zones []string
 23865  				err = json.Unmarshal(*v, &zones)
 23866  				if err != nil {
 23867  					return err
 23868  				}
 23869  				ng.Zones = &zones
 23870  			}
 23871  		case "etag":
 23872  			if v != nil {
 23873  				var etag string
 23874  				err = json.Unmarshal(*v, &etag)
 23875  				if err != nil {
 23876  					return err
 23877  				}
 23878  				ng.Etag = &etag
 23879  			}
 23880  		case "id":
 23881  			if v != nil {
 23882  				var ID string
 23883  				err = json.Unmarshal(*v, &ID)
 23884  				if err != nil {
 23885  					return err
 23886  				}
 23887  				ng.ID = &ID
 23888  			}
 23889  		case "name":
 23890  			if v != nil {
 23891  				var name string
 23892  				err = json.Unmarshal(*v, &name)
 23893  				if err != nil {
 23894  					return err
 23895  				}
 23896  				ng.Name = &name
 23897  			}
 23898  		case "type":
 23899  			if v != nil {
 23900  				var typeVar string
 23901  				err = json.Unmarshal(*v, &typeVar)
 23902  				if err != nil {
 23903  					return err
 23904  				}
 23905  				ng.Type = &typeVar
 23906  			}
 23907  		case "location":
 23908  			if v != nil {
 23909  				var location string
 23910  				err = json.Unmarshal(*v, &location)
 23911  				if err != nil {
 23912  					return err
 23913  				}
 23914  				ng.Location = &location
 23915  			}
 23916  		case "tags":
 23917  			if v != nil {
 23918  				var tags map[string]*string
 23919  				err = json.Unmarshal(*v, &tags)
 23920  				if err != nil {
 23921  					return err
 23922  				}
 23923  				ng.Tags = tags
 23924  			}
 23925  		}
 23926  	}
 23927  
 23928  	return nil
 23929  }
 23930  
 23931  // NatGatewayListResult response for ListNatGateways API service call.
 23932  type NatGatewayListResult struct {
 23933  	autorest.Response `json:"-"`
 23934  	// Value - A list of Nat Gateways that exists in a resource group.
 23935  	Value *[]NatGateway `json:"value,omitempty"`
 23936  	// NextLink - The URL to get the next set of results.
 23937  	NextLink *string `json:"nextLink,omitempty"`
 23938  }
 23939  
 23940  // NatGatewayListResultIterator provides access to a complete listing of NatGateway values.
 23941  type NatGatewayListResultIterator struct {
 23942  	i    int
 23943  	page NatGatewayListResultPage
 23944  }
 23945  
 23946  // NextWithContext advances to the next value.  If there was an error making
 23947  // the request the iterator does not advance and the error is returned.
 23948  func (iter *NatGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
 23949  	if tracing.IsEnabled() {
 23950  		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultIterator.NextWithContext")
 23951  		defer func() {
 23952  			sc := -1
 23953  			if iter.Response().Response.Response != nil {
 23954  				sc = iter.Response().Response.Response.StatusCode
 23955  			}
 23956  			tracing.EndSpan(ctx, sc, err)
 23957  		}()
 23958  	}
 23959  	iter.i++
 23960  	if iter.i < len(iter.page.Values()) {
 23961  		return nil
 23962  	}
 23963  	err = iter.page.NextWithContext(ctx)
 23964  	if err != nil {
 23965  		iter.i--
 23966  		return err
 23967  	}
 23968  	iter.i = 0
 23969  	return nil
 23970  }
 23971  
 23972  // Next advances to the next value.  If there was an error making
 23973  // the request the iterator does not advance and the error is returned.
 23974  // Deprecated: Use NextWithContext() instead.
 23975  func (iter *NatGatewayListResultIterator) Next() error {
 23976  	return iter.NextWithContext(context.Background())
 23977  }
 23978  
 23979  // NotDone returns true if the enumeration should be started or is not yet complete.
 23980  func (iter NatGatewayListResultIterator) NotDone() bool {
 23981  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 23982  }
 23983  
 23984  // Response returns the raw server response from the last page request.
 23985  func (iter NatGatewayListResultIterator) Response() NatGatewayListResult {
 23986  	return iter.page.Response()
 23987  }
 23988  
 23989  // Value returns the current value or a zero-initialized value if the
 23990  // iterator has advanced beyond the end of the collection.
 23991  func (iter NatGatewayListResultIterator) Value() NatGateway {
 23992  	if !iter.page.NotDone() {
 23993  		return NatGateway{}
 23994  	}
 23995  	return iter.page.Values()[iter.i]
 23996  }
 23997  
 23998  // Creates a new instance of the NatGatewayListResultIterator type.
 23999  func NewNatGatewayListResultIterator(page NatGatewayListResultPage) NatGatewayListResultIterator {
 24000  	return NatGatewayListResultIterator{page: page}
 24001  }
 24002  
 24003  // IsEmpty returns true if the ListResult contains no values.
 24004  func (nglr NatGatewayListResult) IsEmpty() bool {
 24005  	return nglr.Value == nil || len(*nglr.Value) == 0
 24006  }
 24007  
 24008  // hasNextLink returns true if the NextLink is not empty.
 24009  func (nglr NatGatewayListResult) hasNextLink() bool {
 24010  	return nglr.NextLink != nil && len(*nglr.NextLink) != 0
 24011  }
 24012  
 24013  // natGatewayListResultPreparer prepares a request to retrieve the next set of results.
 24014  // It returns nil if no more results exist.
 24015  func (nglr NatGatewayListResult) natGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
 24016  	if !nglr.hasNextLink() {
 24017  		return nil, nil
 24018  	}
 24019  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 24020  		autorest.AsJSON(),
 24021  		autorest.AsGet(),
 24022  		autorest.WithBaseURL(to.String(nglr.NextLink)))
 24023  }
 24024  
 24025  // NatGatewayListResultPage contains a page of NatGateway values.
 24026  type NatGatewayListResultPage struct {
 24027  	fn   func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)
 24028  	nglr NatGatewayListResult
 24029  }
 24030  
 24031  // NextWithContext advances to the next page of values.  If there was an error making
 24032  // the request the page does not advance and the error is returned.
 24033  func (page *NatGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
 24034  	if tracing.IsEnabled() {
 24035  		ctx = tracing.StartSpan(ctx, fqdn+"/NatGatewayListResultPage.NextWithContext")
 24036  		defer func() {
 24037  			sc := -1
 24038  			if page.Response().Response.Response != nil {
 24039  				sc = page.Response().Response.Response.StatusCode
 24040  			}
 24041  			tracing.EndSpan(ctx, sc, err)
 24042  		}()
 24043  	}
 24044  	for {
 24045  		next, err := page.fn(ctx, page.nglr)
 24046  		if err != nil {
 24047  			return err
 24048  		}
 24049  		page.nglr = next
 24050  		if !next.hasNextLink() || !next.IsEmpty() {
 24051  			break
 24052  		}
 24053  	}
 24054  	return nil
 24055  }
 24056  
 24057  // Next advances to the next page of values.  If there was an error making
 24058  // the request the page does not advance and the error is returned.
 24059  // Deprecated: Use NextWithContext() instead.
 24060  func (page *NatGatewayListResultPage) Next() error {
 24061  	return page.NextWithContext(context.Background())
 24062  }
 24063  
 24064  // NotDone returns true if the page enumeration should be started or is not yet complete.
 24065  func (page NatGatewayListResultPage) NotDone() bool {
 24066  	return !page.nglr.IsEmpty()
 24067  }
 24068  
 24069  // Response returns the raw server response from the last page request.
 24070  func (page NatGatewayListResultPage) Response() NatGatewayListResult {
 24071  	return page.nglr
 24072  }
 24073  
 24074  // Values returns the slice of values for the current page or nil if there are no values.
 24075  func (page NatGatewayListResultPage) Values() []NatGateway {
 24076  	if page.nglr.IsEmpty() {
 24077  		return nil
 24078  	}
 24079  	return *page.nglr.Value
 24080  }
 24081  
 24082  // Creates a new instance of the NatGatewayListResultPage type.
 24083  func NewNatGatewayListResultPage(cur NatGatewayListResult, getNextPage func(context.Context, NatGatewayListResult) (NatGatewayListResult, error)) NatGatewayListResultPage {
 24084  	return NatGatewayListResultPage{
 24085  		fn:   getNextPage,
 24086  		nglr: cur,
 24087  	}
 24088  }
 24089  
 24090  // NatGatewayPropertiesFormat nat Gateway properties.
 24091  type NatGatewayPropertiesFormat struct {
 24092  	// IdleTimeoutInMinutes - The idle timeout of the nat gateway.
 24093  	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
 24094  	// PublicIPAddresses - An array of public ip addresses associated with the nat gateway resource.
 24095  	PublicIPAddresses *[]SubResource `json:"publicIpAddresses,omitempty"`
 24096  	// PublicIPPrefixes - An array of public ip prefixes associated with the nat gateway resource.
 24097  	PublicIPPrefixes *[]SubResource `json:"publicIpPrefixes,omitempty"`
 24098  	// Subnets - READ-ONLY; An array of references to the subnets using this nat gateway resource.
 24099  	Subnets *[]SubResource `json:"subnets,omitempty"`
 24100  	// ResourceGUID - READ-ONLY; The resource GUID property of the NAT gateway resource.
 24101  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 24102  	// ProvisioningState - READ-ONLY; The provisioning state of the NAT gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 24103  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 24104  }
 24105  
 24106  // MarshalJSON is the custom marshaler for NatGatewayPropertiesFormat.
 24107  func (ngpf NatGatewayPropertiesFormat) MarshalJSON() ([]byte, error) {
 24108  	objectMap := make(map[string]interface{})
 24109  	if ngpf.IdleTimeoutInMinutes != nil {
 24110  		objectMap["idleTimeoutInMinutes"] = ngpf.IdleTimeoutInMinutes
 24111  	}
 24112  	if ngpf.PublicIPAddresses != nil {
 24113  		objectMap["publicIpAddresses"] = ngpf.PublicIPAddresses
 24114  	}
 24115  	if ngpf.PublicIPPrefixes != nil {
 24116  		objectMap["publicIpPrefixes"] = ngpf.PublicIPPrefixes
 24117  	}
 24118  	return json.Marshal(objectMap)
 24119  }
 24120  
 24121  // NatGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 24122  // long-running operation.
 24123  type NatGatewaysCreateOrUpdateFuture struct {
 24124  	azure.FutureAPI
 24125  	// Result returns the result of the asynchronous operation.
 24126  	// If the operation has not completed it will return an error.
 24127  	Result func(NatGatewaysClient) (NatGateway, error)
 24128  }
 24129  
 24130  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 24131  func (future *NatGatewaysCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 24132  	var azFuture azure.Future
 24133  	if err := json.Unmarshal(body, &azFuture); err != nil {
 24134  		return err
 24135  	}
 24136  	future.FutureAPI = &azFuture
 24137  	future.Result = future.result
 24138  	return nil
 24139  }
 24140  
 24141  // result is the default implementation for NatGatewaysCreateOrUpdateFuture.Result.
 24142  func (future *NatGatewaysCreateOrUpdateFuture) result(client NatGatewaysClient) (ng NatGateway, err error) {
 24143  	var done bool
 24144  	done, err = future.DoneWithContext(context.Background(), client)
 24145  	if err != nil {
 24146  		err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 24147  		return
 24148  	}
 24149  	if !done {
 24150  		ng.Response.Response = future.Response()
 24151  		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysCreateOrUpdateFuture")
 24152  		return
 24153  	}
 24154  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 24155  	if ng.Response.Response, err = future.GetResult(sender); err == nil && ng.Response.Response.StatusCode != http.StatusNoContent {
 24156  		ng, err = client.CreateOrUpdateResponder(ng.Response.Response)
 24157  		if err != nil {
 24158  			err = autorest.NewErrorWithError(err, "network.NatGatewaysCreateOrUpdateFuture", "Result", ng.Response.Response, "Failure responding to request")
 24159  		}
 24160  	}
 24161  	return
 24162  }
 24163  
 24164  // NatGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 24165  // operation.
 24166  type NatGatewaysDeleteFuture struct {
 24167  	azure.FutureAPI
 24168  	// Result returns the result of the asynchronous operation.
 24169  	// If the operation has not completed it will return an error.
 24170  	Result func(NatGatewaysClient) (autorest.Response, error)
 24171  }
 24172  
 24173  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 24174  func (future *NatGatewaysDeleteFuture) UnmarshalJSON(body []byte) error {
 24175  	var azFuture azure.Future
 24176  	if err := json.Unmarshal(body, &azFuture); err != nil {
 24177  		return err
 24178  	}
 24179  	future.FutureAPI = &azFuture
 24180  	future.Result = future.result
 24181  	return nil
 24182  }
 24183  
 24184  // result is the default implementation for NatGatewaysDeleteFuture.Result.
 24185  func (future *NatGatewaysDeleteFuture) result(client NatGatewaysClient) (ar autorest.Response, err error) {
 24186  	var done bool
 24187  	done, err = future.DoneWithContext(context.Background(), client)
 24188  	if err != nil {
 24189  		err = autorest.NewErrorWithError(err, "network.NatGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
 24190  		return
 24191  	}
 24192  	if !done {
 24193  		ar.Response = future.Response()
 24194  		err = azure.NewAsyncOpIncompleteError("network.NatGatewaysDeleteFuture")
 24195  		return
 24196  	}
 24197  	ar.Response = future.Response()
 24198  	return
 24199  }
 24200  
 24201  // NatGatewaySku SKU of nat gateway.
 24202  type NatGatewaySku struct {
 24203  	// Name - Name of Nat Gateway SKU. Possible values include: 'NatGatewaySkuNameStandard'
 24204  	Name NatGatewaySkuName `json:"name,omitempty"`
 24205  }
 24206  
 24207  // NatRuleCondition rule condition of type nat.
 24208  type NatRuleCondition struct {
 24209  	// IPProtocols - Array of FirewallPolicyRuleConditionNetworkProtocols.
 24210  	IPProtocols *[]FirewallPolicyRuleConditionNetworkProtocol `json:"ipProtocols,omitempty"`
 24211  	// SourceAddresses - List of source IP addresses for this rule.
 24212  	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
 24213  	// DestinationAddresses - List of destination IP addresses or Service Tags.
 24214  	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
 24215  	// DestinationPorts - List of destination ports.
 24216  	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
 24217  	// SourceIPGroups - List of source IpGroups for this rule.
 24218  	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
 24219  	// Name - Name of the rule condition.
 24220  	Name *string `json:"name,omitempty"`
 24221  	// Description - Description of the rule condition.
 24222  	Description *string `json:"description,omitempty"`
 24223  	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNatRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
 24224  	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
 24225  }
 24226  
 24227  // MarshalJSON is the custom marshaler for NatRuleCondition.
 24228  func (nrc NatRuleCondition) MarshalJSON() ([]byte, error) {
 24229  	nrc.RuleConditionType = RuleConditionTypeNatRuleCondition
 24230  	objectMap := make(map[string]interface{})
 24231  	if nrc.IPProtocols != nil {
 24232  		objectMap["ipProtocols"] = nrc.IPProtocols
 24233  	}
 24234  	if nrc.SourceAddresses != nil {
 24235  		objectMap["sourceAddresses"] = nrc.SourceAddresses
 24236  	}
 24237  	if nrc.DestinationAddresses != nil {
 24238  		objectMap["destinationAddresses"] = nrc.DestinationAddresses
 24239  	}
 24240  	if nrc.DestinationPorts != nil {
 24241  		objectMap["destinationPorts"] = nrc.DestinationPorts
 24242  	}
 24243  	if nrc.SourceIPGroups != nil {
 24244  		objectMap["sourceIpGroups"] = nrc.SourceIPGroups
 24245  	}
 24246  	if nrc.Name != nil {
 24247  		objectMap["name"] = nrc.Name
 24248  	}
 24249  	if nrc.Description != nil {
 24250  		objectMap["description"] = nrc.Description
 24251  	}
 24252  	if nrc.RuleConditionType != "" {
 24253  		objectMap["ruleConditionType"] = nrc.RuleConditionType
 24254  	}
 24255  	return json.Marshal(objectMap)
 24256  }
 24257  
 24258  // AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for NatRuleCondition.
 24259  func (nrc NatRuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
 24260  	return nil, false
 24261  }
 24262  
 24263  // AsNatRuleCondition is the BasicFirewallPolicyRuleCondition implementation for NatRuleCondition.
 24264  func (nrc NatRuleCondition) AsNatRuleCondition() (*NatRuleCondition, bool) {
 24265  	return &nrc, true
 24266  }
 24267  
 24268  // AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for NatRuleCondition.
 24269  func (nrc NatRuleCondition) AsRuleCondition() (*RuleCondition, bool) {
 24270  	return nil, false
 24271  }
 24272  
 24273  // AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for NatRuleCondition.
 24274  func (nrc NatRuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
 24275  	return nil, false
 24276  }
 24277  
 24278  // AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for NatRuleCondition.
 24279  func (nrc NatRuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
 24280  	return &nrc, true
 24281  }
 24282  
 24283  // NextHopParameters parameters that define the source and destination endpoint.
 24284  type NextHopParameters struct {
 24285  	// TargetResourceID - The resource identifier of the target resource against which the action is to be performed.
 24286  	TargetResourceID *string `json:"targetResourceId,omitempty"`
 24287  	// SourceIPAddress - The source IP address.
 24288  	SourceIPAddress *string `json:"sourceIPAddress,omitempty"`
 24289  	// DestinationIPAddress - The destination IP address.
 24290  	DestinationIPAddress *string `json:"destinationIPAddress,omitempty"`
 24291  	// 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).
 24292  	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
 24293  }
 24294  
 24295  // NextHopResult the information about next hop from the specified VM.
 24296  type NextHopResult struct {
 24297  	autorest.Response `json:"-"`
 24298  	// NextHopType - Next hop type. Possible values include: 'NextHopTypeInternet', 'NextHopTypeVirtualAppliance', 'NextHopTypeVirtualNetworkGateway', 'NextHopTypeVnetLocal', 'NextHopTypeHyperNetGateway', 'NextHopTypeNone'
 24299  	NextHopType NextHopType `json:"nextHopType,omitempty"`
 24300  	// NextHopIPAddress - Next hop IP Address.
 24301  	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
 24302  	// 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'.
 24303  	RouteTableID *string `json:"routeTableId,omitempty"`
 24304  }
 24305  
 24306  // Operation network REST API operation definition.
 24307  type Operation struct {
 24308  	// Name - Operation name: {provider}/{resource}/{operation}.
 24309  	Name *string `json:"name,omitempty"`
 24310  	// Display - Display metadata associated with the operation.
 24311  	Display *OperationDisplay `json:"display,omitempty"`
 24312  	// Origin - Origin of the operation.
 24313  	Origin *string `json:"origin,omitempty"`
 24314  	// OperationPropertiesFormat - Operation properties format.
 24315  	*OperationPropertiesFormat `json:"properties,omitempty"`
 24316  }
 24317  
 24318  // MarshalJSON is the custom marshaler for Operation.
 24319  func (o Operation) MarshalJSON() ([]byte, error) {
 24320  	objectMap := make(map[string]interface{})
 24321  	if o.Name != nil {
 24322  		objectMap["name"] = o.Name
 24323  	}
 24324  	if o.Display != nil {
 24325  		objectMap["display"] = o.Display
 24326  	}
 24327  	if o.Origin != nil {
 24328  		objectMap["origin"] = o.Origin
 24329  	}
 24330  	if o.OperationPropertiesFormat != nil {
 24331  		objectMap["properties"] = o.OperationPropertiesFormat
 24332  	}
 24333  	return json.Marshal(objectMap)
 24334  }
 24335  
 24336  // UnmarshalJSON is the custom unmarshaler for Operation struct.
 24337  func (o *Operation) UnmarshalJSON(body []byte) error {
 24338  	var m map[string]*json.RawMessage
 24339  	err := json.Unmarshal(body, &m)
 24340  	if err != nil {
 24341  		return err
 24342  	}
 24343  	for k, v := range m {
 24344  		switch k {
 24345  		case "name":
 24346  			if v != nil {
 24347  				var name string
 24348  				err = json.Unmarshal(*v, &name)
 24349  				if err != nil {
 24350  					return err
 24351  				}
 24352  				o.Name = &name
 24353  			}
 24354  		case "display":
 24355  			if v != nil {
 24356  				var display OperationDisplay
 24357  				err = json.Unmarshal(*v, &display)
 24358  				if err != nil {
 24359  					return err
 24360  				}
 24361  				o.Display = &display
 24362  			}
 24363  		case "origin":
 24364  			if v != nil {
 24365  				var origin string
 24366  				err = json.Unmarshal(*v, &origin)
 24367  				if err != nil {
 24368  					return err
 24369  				}
 24370  				o.Origin = &origin
 24371  			}
 24372  		case "properties":
 24373  			if v != nil {
 24374  				var operationPropertiesFormat OperationPropertiesFormat
 24375  				err = json.Unmarshal(*v, &operationPropertiesFormat)
 24376  				if err != nil {
 24377  					return err
 24378  				}
 24379  				o.OperationPropertiesFormat = &operationPropertiesFormat
 24380  			}
 24381  		}
 24382  	}
 24383  
 24384  	return nil
 24385  }
 24386  
 24387  // OperationDisplay display metadata associated with the operation.
 24388  type OperationDisplay struct {
 24389  	// Provider - Service provider: Microsoft Network.
 24390  	Provider *string `json:"provider,omitempty"`
 24391  	// Resource - Resource on which the operation is performed.
 24392  	Resource *string `json:"resource,omitempty"`
 24393  	// Operation - Type of the operation: get, read, delete, etc.
 24394  	Operation *string `json:"operation,omitempty"`
 24395  	// Description - Description of the operation.
 24396  	Description *string `json:"description,omitempty"`
 24397  }
 24398  
 24399  // OperationListResult result of the request to list Network operations. It contains a list of operations
 24400  // and a URL link to get the next set of results.
 24401  type OperationListResult struct {
 24402  	autorest.Response `json:"-"`
 24403  	// Value - List of Network operations supported by the Network resource provider.
 24404  	Value *[]Operation `json:"value,omitempty"`
 24405  	// NextLink - URL to get the next set of operation list results if there are any.
 24406  	NextLink *string `json:"nextLink,omitempty"`
 24407  }
 24408  
 24409  // OperationListResultIterator provides access to a complete listing of Operation values.
 24410  type OperationListResultIterator struct {
 24411  	i    int
 24412  	page OperationListResultPage
 24413  }
 24414  
 24415  // NextWithContext advances to the next value.  If there was an error making
 24416  // the request the iterator does not advance and the error is returned.
 24417  func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
 24418  	if tracing.IsEnabled() {
 24419  		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
 24420  		defer func() {
 24421  			sc := -1
 24422  			if iter.Response().Response.Response != nil {
 24423  				sc = iter.Response().Response.Response.StatusCode
 24424  			}
 24425  			tracing.EndSpan(ctx, sc, err)
 24426  		}()
 24427  	}
 24428  	iter.i++
 24429  	if iter.i < len(iter.page.Values()) {
 24430  		return nil
 24431  	}
 24432  	err = iter.page.NextWithContext(ctx)
 24433  	if err != nil {
 24434  		iter.i--
 24435  		return err
 24436  	}
 24437  	iter.i = 0
 24438  	return nil
 24439  }
 24440  
 24441  // Next advances to the next value.  If there was an error making
 24442  // the request the iterator does not advance and the error is returned.
 24443  // Deprecated: Use NextWithContext() instead.
 24444  func (iter *OperationListResultIterator) Next() error {
 24445  	return iter.NextWithContext(context.Background())
 24446  }
 24447  
 24448  // NotDone returns true if the enumeration should be started or is not yet complete.
 24449  func (iter OperationListResultIterator) NotDone() bool {
 24450  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 24451  }
 24452  
 24453  // Response returns the raw server response from the last page request.
 24454  func (iter OperationListResultIterator) Response() OperationListResult {
 24455  	return iter.page.Response()
 24456  }
 24457  
 24458  // Value returns the current value or a zero-initialized value if the
 24459  // iterator has advanced beyond the end of the collection.
 24460  func (iter OperationListResultIterator) Value() Operation {
 24461  	if !iter.page.NotDone() {
 24462  		return Operation{}
 24463  	}
 24464  	return iter.page.Values()[iter.i]
 24465  }
 24466  
 24467  // Creates a new instance of the OperationListResultIterator type.
 24468  func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
 24469  	return OperationListResultIterator{page: page}
 24470  }
 24471  
 24472  // IsEmpty returns true if the ListResult contains no values.
 24473  func (olr OperationListResult) IsEmpty() bool {
 24474  	return olr.Value == nil || len(*olr.Value) == 0
 24475  }
 24476  
 24477  // hasNextLink returns true if the NextLink is not empty.
 24478  func (olr OperationListResult) hasNextLink() bool {
 24479  	return olr.NextLink != nil && len(*olr.NextLink) != 0
 24480  }
 24481  
 24482  // operationListResultPreparer prepares a request to retrieve the next set of results.
 24483  // It returns nil if no more results exist.
 24484  func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
 24485  	if !olr.hasNextLink() {
 24486  		return nil, nil
 24487  	}
 24488  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 24489  		autorest.AsJSON(),
 24490  		autorest.AsGet(),
 24491  		autorest.WithBaseURL(to.String(olr.NextLink)))
 24492  }
 24493  
 24494  // OperationListResultPage contains a page of Operation values.
 24495  type OperationListResultPage struct {
 24496  	fn  func(context.Context, OperationListResult) (OperationListResult, error)
 24497  	olr OperationListResult
 24498  }
 24499  
 24500  // NextWithContext advances to the next page of values.  If there was an error making
 24501  // the request the page does not advance and the error is returned.
 24502  func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
 24503  	if tracing.IsEnabled() {
 24504  		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
 24505  		defer func() {
 24506  			sc := -1
 24507  			if page.Response().Response.Response != nil {
 24508  				sc = page.Response().Response.Response.StatusCode
 24509  			}
 24510  			tracing.EndSpan(ctx, sc, err)
 24511  		}()
 24512  	}
 24513  	for {
 24514  		next, err := page.fn(ctx, page.olr)
 24515  		if err != nil {
 24516  			return err
 24517  		}
 24518  		page.olr = next
 24519  		if !next.hasNextLink() || !next.IsEmpty() {
 24520  			break
 24521  		}
 24522  	}
 24523  	return nil
 24524  }
 24525  
 24526  // Next advances to the next page of values.  If there was an error making
 24527  // the request the page does not advance and the error is returned.
 24528  // Deprecated: Use NextWithContext() instead.
 24529  func (page *OperationListResultPage) Next() error {
 24530  	return page.NextWithContext(context.Background())
 24531  }
 24532  
 24533  // NotDone returns true if the page enumeration should be started or is not yet complete.
 24534  func (page OperationListResultPage) NotDone() bool {
 24535  	return !page.olr.IsEmpty()
 24536  }
 24537  
 24538  // Response returns the raw server response from the last page request.
 24539  func (page OperationListResultPage) Response() OperationListResult {
 24540  	return page.olr
 24541  }
 24542  
 24543  // Values returns the slice of values for the current page or nil if there are no values.
 24544  func (page OperationListResultPage) Values() []Operation {
 24545  	if page.olr.IsEmpty() {
 24546  		return nil
 24547  	}
 24548  	return *page.olr.Value
 24549  }
 24550  
 24551  // Creates a new instance of the OperationListResultPage type.
 24552  func NewOperationListResultPage(cur OperationListResult, getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
 24553  	return OperationListResultPage{
 24554  		fn:  getNextPage,
 24555  		olr: cur,
 24556  	}
 24557  }
 24558  
 24559  // OperationPropertiesFormat description of operation properties format.
 24560  type OperationPropertiesFormat struct {
 24561  	// ServiceSpecification - Specification of the service.
 24562  	ServiceSpecification *OperationPropertiesFormatServiceSpecification `json:"serviceSpecification,omitempty"`
 24563  }
 24564  
 24565  // OperationPropertiesFormatServiceSpecification specification of the service.
 24566  type OperationPropertiesFormatServiceSpecification struct {
 24567  	// MetricSpecifications - Operation service specification.
 24568  	MetricSpecifications *[]MetricSpecification `json:"metricSpecifications,omitempty"`
 24569  	// LogSpecifications - Operation log specification.
 24570  	LogSpecifications *[]LogSpecification `json:"logSpecifications,omitempty"`
 24571  }
 24572  
 24573  // OutboundRule outbound rule of the load balancer.
 24574  type OutboundRule struct {
 24575  	autorest.Response `json:"-"`
 24576  	// OutboundRulePropertiesFormat - Properties of load balancer outbound rule.
 24577  	*OutboundRulePropertiesFormat `json:"properties,omitempty"`
 24578  	// Name - The name of the resource that is unique within the set of outbound rules used by the load balancer. This name can be used to access the resource.
 24579  	Name *string `json:"name,omitempty"`
 24580  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 24581  	Etag *string `json:"etag,omitempty"`
 24582  	// Type - READ-ONLY; Type of the resource.
 24583  	Type *string `json:"type,omitempty"`
 24584  	// ID - Resource ID.
 24585  	ID *string `json:"id,omitempty"`
 24586  }
 24587  
 24588  // MarshalJSON is the custom marshaler for OutboundRule.
 24589  func (or OutboundRule) MarshalJSON() ([]byte, error) {
 24590  	objectMap := make(map[string]interface{})
 24591  	if or.OutboundRulePropertiesFormat != nil {
 24592  		objectMap["properties"] = or.OutboundRulePropertiesFormat
 24593  	}
 24594  	if or.Name != nil {
 24595  		objectMap["name"] = or.Name
 24596  	}
 24597  	if or.ID != nil {
 24598  		objectMap["id"] = or.ID
 24599  	}
 24600  	return json.Marshal(objectMap)
 24601  }
 24602  
 24603  // UnmarshalJSON is the custom unmarshaler for OutboundRule struct.
 24604  func (or *OutboundRule) UnmarshalJSON(body []byte) error {
 24605  	var m map[string]*json.RawMessage
 24606  	err := json.Unmarshal(body, &m)
 24607  	if err != nil {
 24608  		return err
 24609  	}
 24610  	for k, v := range m {
 24611  		switch k {
 24612  		case "properties":
 24613  			if v != nil {
 24614  				var outboundRulePropertiesFormat OutboundRulePropertiesFormat
 24615  				err = json.Unmarshal(*v, &outboundRulePropertiesFormat)
 24616  				if err != nil {
 24617  					return err
 24618  				}
 24619  				or.OutboundRulePropertiesFormat = &outboundRulePropertiesFormat
 24620  			}
 24621  		case "name":
 24622  			if v != nil {
 24623  				var name string
 24624  				err = json.Unmarshal(*v, &name)
 24625  				if err != nil {
 24626  					return err
 24627  				}
 24628  				or.Name = &name
 24629  			}
 24630  		case "etag":
 24631  			if v != nil {
 24632  				var etag string
 24633  				err = json.Unmarshal(*v, &etag)
 24634  				if err != nil {
 24635  					return err
 24636  				}
 24637  				or.Etag = &etag
 24638  			}
 24639  		case "type":
 24640  			if v != nil {
 24641  				var typeVar string
 24642  				err = json.Unmarshal(*v, &typeVar)
 24643  				if err != nil {
 24644  					return err
 24645  				}
 24646  				or.Type = &typeVar
 24647  			}
 24648  		case "id":
 24649  			if v != nil {
 24650  				var ID string
 24651  				err = json.Unmarshal(*v, &ID)
 24652  				if err != nil {
 24653  					return err
 24654  				}
 24655  				or.ID = &ID
 24656  			}
 24657  		}
 24658  	}
 24659  
 24660  	return nil
 24661  }
 24662  
 24663  // OutboundRulePropertiesFormat outbound rule of the load balancer.
 24664  type OutboundRulePropertiesFormat struct {
 24665  	// AllocatedOutboundPorts - The number of outbound ports to be used for NAT.
 24666  	AllocatedOutboundPorts *int32 `json:"allocatedOutboundPorts,omitempty"`
 24667  	// FrontendIPConfigurations - The Frontend IP addresses of the load balancer.
 24668  	FrontendIPConfigurations *[]SubResource `json:"frontendIPConfigurations,omitempty"`
 24669  	// BackendAddressPool - A reference to a pool of DIPs. Outbound traffic is randomly load balanced across IPs in the backend IPs.
 24670  	BackendAddressPool *SubResource `json:"backendAddressPool,omitempty"`
 24671  	// ProvisioningState - READ-ONLY; The provisioning state of the outbound rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 24672  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 24673  	// Protocol - The protocol for the outbound rule in load balancer. Possible values include: 'LoadBalancerOutboundRuleProtocolTCP', 'LoadBalancerOutboundRuleProtocolUDP', 'LoadBalancerOutboundRuleProtocolAll'
 24674  	Protocol LoadBalancerOutboundRuleProtocol `json:"protocol,omitempty"`
 24675  	// EnableTCPReset - Receive bidirectional TCP Reset on TCP flow idle timeout or unexpected connection termination. This element is only used when the protocol is set to TCP.
 24676  	EnableTCPReset *bool `json:"enableTcpReset,omitempty"`
 24677  	// IdleTimeoutInMinutes - The timeout for the TCP idle connection.
 24678  	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
 24679  }
 24680  
 24681  // MarshalJSON is the custom marshaler for OutboundRulePropertiesFormat.
 24682  func (orpf OutboundRulePropertiesFormat) MarshalJSON() ([]byte, error) {
 24683  	objectMap := make(map[string]interface{})
 24684  	if orpf.AllocatedOutboundPorts != nil {
 24685  		objectMap["allocatedOutboundPorts"] = orpf.AllocatedOutboundPorts
 24686  	}
 24687  	if orpf.FrontendIPConfigurations != nil {
 24688  		objectMap["frontendIPConfigurations"] = orpf.FrontendIPConfigurations
 24689  	}
 24690  	if orpf.BackendAddressPool != nil {
 24691  		objectMap["backendAddressPool"] = orpf.BackendAddressPool
 24692  	}
 24693  	if orpf.Protocol != "" {
 24694  		objectMap["protocol"] = orpf.Protocol
 24695  	}
 24696  	if orpf.EnableTCPReset != nil {
 24697  		objectMap["enableTcpReset"] = orpf.EnableTCPReset
 24698  	}
 24699  	if orpf.IdleTimeoutInMinutes != nil {
 24700  		objectMap["idleTimeoutInMinutes"] = orpf.IdleTimeoutInMinutes
 24701  	}
 24702  	return json.Marshal(objectMap)
 24703  }
 24704  
 24705  // OwaspCrsExclusionEntry allow to exclude some variable satisfy the condition for the WAF check.
 24706  type OwaspCrsExclusionEntry struct {
 24707  	// MatchVariable - The variable to be excluded. Possible values include: 'RequestHeaderNames', 'RequestCookieNames', 'RequestArgNames'
 24708  	MatchVariable OwaspCrsExclusionEntryMatchVariable `json:"matchVariable,omitempty"`
 24709  	// SelectorMatchOperator - When matchVariable is a collection, operate on the selector to specify which elements in the collection this exclusion applies to. Possible values include: 'OwaspCrsExclusionEntrySelectorMatchOperatorEquals', 'OwaspCrsExclusionEntrySelectorMatchOperatorContains', 'OwaspCrsExclusionEntrySelectorMatchOperatorStartsWith', 'OwaspCrsExclusionEntrySelectorMatchOperatorEndsWith', 'OwaspCrsExclusionEntrySelectorMatchOperatorEqualsAny'
 24710  	SelectorMatchOperator OwaspCrsExclusionEntrySelectorMatchOperator `json:"selectorMatchOperator,omitempty"`
 24711  	// Selector - When matchVariable is a collection, operator used to specify which elements in the collection this exclusion applies to.
 24712  	Selector *string `json:"selector,omitempty"`
 24713  }
 24714  
 24715  // P2SConnectionConfiguration p2SConnectionConfiguration Resource.
 24716  type P2SConnectionConfiguration struct {
 24717  	// P2SConnectionConfigurationProperties - Properties of the P2S connection configuration.
 24718  	*P2SConnectionConfigurationProperties `json:"properties,omitempty"`
 24719  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 24720  	Name *string `json:"name,omitempty"`
 24721  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 24722  	Etag *string `json:"etag,omitempty"`
 24723  	// ID - Resource ID.
 24724  	ID *string `json:"id,omitempty"`
 24725  }
 24726  
 24727  // MarshalJSON is the custom marshaler for P2SConnectionConfiguration.
 24728  func (pcc P2SConnectionConfiguration) MarshalJSON() ([]byte, error) {
 24729  	objectMap := make(map[string]interface{})
 24730  	if pcc.P2SConnectionConfigurationProperties != nil {
 24731  		objectMap["properties"] = pcc.P2SConnectionConfigurationProperties
 24732  	}
 24733  	if pcc.Name != nil {
 24734  		objectMap["name"] = pcc.Name
 24735  	}
 24736  	if pcc.ID != nil {
 24737  		objectMap["id"] = pcc.ID
 24738  	}
 24739  	return json.Marshal(objectMap)
 24740  }
 24741  
 24742  // UnmarshalJSON is the custom unmarshaler for P2SConnectionConfiguration struct.
 24743  func (pcc *P2SConnectionConfiguration) UnmarshalJSON(body []byte) error {
 24744  	var m map[string]*json.RawMessage
 24745  	err := json.Unmarshal(body, &m)
 24746  	if err != nil {
 24747  		return err
 24748  	}
 24749  	for k, v := range m {
 24750  		switch k {
 24751  		case "properties":
 24752  			if v != nil {
 24753  				var p2SConnectionConfigurationProperties P2SConnectionConfigurationProperties
 24754  				err = json.Unmarshal(*v, &p2SConnectionConfigurationProperties)
 24755  				if err != nil {
 24756  					return err
 24757  				}
 24758  				pcc.P2SConnectionConfigurationProperties = &p2SConnectionConfigurationProperties
 24759  			}
 24760  		case "name":
 24761  			if v != nil {
 24762  				var name string
 24763  				err = json.Unmarshal(*v, &name)
 24764  				if err != nil {
 24765  					return err
 24766  				}
 24767  				pcc.Name = &name
 24768  			}
 24769  		case "etag":
 24770  			if v != nil {
 24771  				var etag string
 24772  				err = json.Unmarshal(*v, &etag)
 24773  				if err != nil {
 24774  					return err
 24775  				}
 24776  				pcc.Etag = &etag
 24777  			}
 24778  		case "id":
 24779  			if v != nil {
 24780  				var ID string
 24781  				err = json.Unmarshal(*v, &ID)
 24782  				if err != nil {
 24783  					return err
 24784  				}
 24785  				pcc.ID = &ID
 24786  			}
 24787  		}
 24788  	}
 24789  
 24790  	return nil
 24791  }
 24792  
 24793  // P2SConnectionConfigurationProperties parameters for P2SConnectionConfiguration.
 24794  type P2SConnectionConfigurationProperties struct {
 24795  	// VpnClientAddressPool - The reference to the address space resource which represents Address space for P2S VpnClient.
 24796  	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
 24797  	// RoutingConfiguration - The Routing Configuration indicating the associated and propagated route tables on this connection.
 24798  	RoutingConfiguration *RoutingConfiguration `json:"routingConfiguration,omitempty"`
 24799  	// ProvisioningState - READ-ONLY; The provisioning state of the P2SConnectionConfiguration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 24800  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 24801  }
 24802  
 24803  // MarshalJSON is the custom marshaler for P2SConnectionConfigurationProperties.
 24804  func (pccp P2SConnectionConfigurationProperties) MarshalJSON() ([]byte, error) {
 24805  	objectMap := make(map[string]interface{})
 24806  	if pccp.VpnClientAddressPool != nil {
 24807  		objectMap["vpnClientAddressPool"] = pccp.VpnClientAddressPool
 24808  	}
 24809  	if pccp.RoutingConfiguration != nil {
 24810  		objectMap["routingConfiguration"] = pccp.RoutingConfiguration
 24811  	}
 24812  	return json.Marshal(objectMap)
 24813  }
 24814  
 24815  // P2SVpnConnectionHealth p2S Vpn connection detailed health written to sas url.
 24816  type P2SVpnConnectionHealth struct {
 24817  	autorest.Response `json:"-"`
 24818  	// SasURL - Returned sas url of the blob to which the p2s vpn connection detailed health will be written.
 24819  	SasURL *string `json:"sasUrl,omitempty"`
 24820  }
 24821  
 24822  // P2SVpnConnectionHealthRequest list of P2S Vpn connection health request.
 24823  type P2SVpnConnectionHealthRequest struct {
 24824  	// VpnUserNamesFilter - The list of p2s vpn user names whose p2s vpn connection detailed health to retrieve for.
 24825  	VpnUserNamesFilter *[]string `json:"vpnUserNamesFilter,omitempty"`
 24826  	// OutputBlobSasURL - The sas-url to download the P2S Vpn connection health detail.
 24827  	OutputBlobSasURL *string `json:"outputBlobSasUrl,omitempty"`
 24828  }
 24829  
 24830  // P2SVpnConnectionRequest list of p2s vpn connections to be disconnected.
 24831  type P2SVpnConnectionRequest struct {
 24832  	// VpnConnectionIds - List of p2s vpn connection Ids.
 24833  	VpnConnectionIds *[]string `json:"vpnConnectionIds,omitempty"`
 24834  }
 24835  
 24836  // P2SVpnGateway p2SVpnGateway Resource.
 24837  type P2SVpnGateway struct {
 24838  	autorest.Response `json:"-"`
 24839  	// P2SVpnGatewayProperties - Properties of the P2SVpnGateway.
 24840  	*P2SVpnGatewayProperties `json:"properties,omitempty"`
 24841  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 24842  	Etag *string `json:"etag,omitempty"`
 24843  	// ID - Resource ID.
 24844  	ID *string `json:"id,omitempty"`
 24845  	// Name - READ-ONLY; Resource name.
 24846  	Name *string `json:"name,omitempty"`
 24847  	// Type - READ-ONLY; Resource type.
 24848  	Type *string `json:"type,omitempty"`
 24849  	// Location - Resource location.
 24850  	Location *string `json:"location,omitempty"`
 24851  	// Tags - Resource tags.
 24852  	Tags map[string]*string `json:"tags"`
 24853  }
 24854  
 24855  // MarshalJSON is the custom marshaler for P2SVpnGateway.
 24856  func (pvg P2SVpnGateway) MarshalJSON() ([]byte, error) {
 24857  	objectMap := make(map[string]interface{})
 24858  	if pvg.P2SVpnGatewayProperties != nil {
 24859  		objectMap["properties"] = pvg.P2SVpnGatewayProperties
 24860  	}
 24861  	if pvg.ID != nil {
 24862  		objectMap["id"] = pvg.ID
 24863  	}
 24864  	if pvg.Location != nil {
 24865  		objectMap["location"] = pvg.Location
 24866  	}
 24867  	if pvg.Tags != nil {
 24868  		objectMap["tags"] = pvg.Tags
 24869  	}
 24870  	return json.Marshal(objectMap)
 24871  }
 24872  
 24873  // UnmarshalJSON is the custom unmarshaler for P2SVpnGateway struct.
 24874  func (pvg *P2SVpnGateway) UnmarshalJSON(body []byte) error {
 24875  	var m map[string]*json.RawMessage
 24876  	err := json.Unmarshal(body, &m)
 24877  	if err != nil {
 24878  		return err
 24879  	}
 24880  	for k, v := range m {
 24881  		switch k {
 24882  		case "properties":
 24883  			if v != nil {
 24884  				var p2SVpnGatewayProperties P2SVpnGatewayProperties
 24885  				err = json.Unmarshal(*v, &p2SVpnGatewayProperties)
 24886  				if err != nil {
 24887  					return err
 24888  				}
 24889  				pvg.P2SVpnGatewayProperties = &p2SVpnGatewayProperties
 24890  			}
 24891  		case "etag":
 24892  			if v != nil {
 24893  				var etag string
 24894  				err = json.Unmarshal(*v, &etag)
 24895  				if err != nil {
 24896  					return err
 24897  				}
 24898  				pvg.Etag = &etag
 24899  			}
 24900  		case "id":
 24901  			if v != nil {
 24902  				var ID string
 24903  				err = json.Unmarshal(*v, &ID)
 24904  				if err != nil {
 24905  					return err
 24906  				}
 24907  				pvg.ID = &ID
 24908  			}
 24909  		case "name":
 24910  			if v != nil {
 24911  				var name string
 24912  				err = json.Unmarshal(*v, &name)
 24913  				if err != nil {
 24914  					return err
 24915  				}
 24916  				pvg.Name = &name
 24917  			}
 24918  		case "type":
 24919  			if v != nil {
 24920  				var typeVar string
 24921  				err = json.Unmarshal(*v, &typeVar)
 24922  				if err != nil {
 24923  					return err
 24924  				}
 24925  				pvg.Type = &typeVar
 24926  			}
 24927  		case "location":
 24928  			if v != nil {
 24929  				var location string
 24930  				err = json.Unmarshal(*v, &location)
 24931  				if err != nil {
 24932  					return err
 24933  				}
 24934  				pvg.Location = &location
 24935  			}
 24936  		case "tags":
 24937  			if v != nil {
 24938  				var tags map[string]*string
 24939  				err = json.Unmarshal(*v, &tags)
 24940  				if err != nil {
 24941  					return err
 24942  				}
 24943  				pvg.Tags = tags
 24944  			}
 24945  		}
 24946  	}
 24947  
 24948  	return nil
 24949  }
 24950  
 24951  // P2SVpnGatewayProperties parameters for P2SVpnGateway.
 24952  type P2SVpnGatewayProperties struct {
 24953  	// VirtualHub - The VirtualHub to which the gateway belongs.
 24954  	VirtualHub *SubResource `json:"virtualHub,omitempty"`
 24955  	// P2SConnectionConfigurations - List of all p2s connection configurations of the gateway.
 24956  	P2SConnectionConfigurations *[]P2SConnectionConfiguration `json:"p2SConnectionConfigurations,omitempty"`
 24957  	// ProvisioningState - READ-ONLY; The provisioning state of the P2S VPN gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 24958  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 24959  	// VpnGatewayScaleUnit - The scale unit for this p2s vpn gateway.
 24960  	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
 24961  	// VpnServerConfiguration - The VpnServerConfiguration to which the p2sVpnGateway is attached to.
 24962  	VpnServerConfiguration *SubResource `json:"vpnServerConfiguration,omitempty"`
 24963  	// VpnClientConnectionHealth - READ-ONLY; All P2S VPN clients' connection health status.
 24964  	VpnClientConnectionHealth *VpnClientConnectionHealth `json:"vpnClientConnectionHealth,omitempty"`
 24965  }
 24966  
 24967  // MarshalJSON is the custom marshaler for P2SVpnGatewayProperties.
 24968  func (pvgp P2SVpnGatewayProperties) MarshalJSON() ([]byte, error) {
 24969  	objectMap := make(map[string]interface{})
 24970  	if pvgp.VirtualHub != nil {
 24971  		objectMap["virtualHub"] = pvgp.VirtualHub
 24972  	}
 24973  	if pvgp.P2SConnectionConfigurations != nil {
 24974  		objectMap["p2SConnectionConfigurations"] = pvgp.P2SConnectionConfigurations
 24975  	}
 24976  	if pvgp.VpnGatewayScaleUnit != nil {
 24977  		objectMap["vpnGatewayScaleUnit"] = pvgp.VpnGatewayScaleUnit
 24978  	}
 24979  	if pvgp.VpnServerConfiguration != nil {
 24980  		objectMap["vpnServerConfiguration"] = pvgp.VpnServerConfiguration
 24981  	}
 24982  	return json.Marshal(objectMap)
 24983  }
 24984  
 24985  // P2sVpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 24986  // long-running operation.
 24987  type P2sVpnGatewaysCreateOrUpdateFuture struct {
 24988  	azure.FutureAPI
 24989  	// Result returns the result of the asynchronous operation.
 24990  	// If the operation has not completed it will return an error.
 24991  	Result func(P2sVpnGatewaysClient) (P2SVpnGateway, error)
 24992  }
 24993  
 24994  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 24995  func (future *P2sVpnGatewaysCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 24996  	var azFuture azure.Future
 24997  	if err := json.Unmarshal(body, &azFuture); err != nil {
 24998  		return err
 24999  	}
 25000  	future.FutureAPI = &azFuture
 25001  	future.Result = future.result
 25002  	return nil
 25003  }
 25004  
 25005  // result is the default implementation for P2sVpnGatewaysCreateOrUpdateFuture.Result.
 25006  func (future *P2sVpnGatewaysCreateOrUpdateFuture) result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
 25007  	var done bool
 25008  	done, err = future.DoneWithContext(context.Background(), client)
 25009  	if err != nil {
 25010  		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 25011  		return
 25012  	}
 25013  	if !done {
 25014  		pvg.Response.Response = future.Response()
 25015  		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysCreateOrUpdateFuture")
 25016  		return
 25017  	}
 25018  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 25019  	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
 25020  		pvg, err = client.CreateOrUpdateResponder(pvg.Response.Response)
 25021  		if err != nil {
 25022  			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysCreateOrUpdateFuture", "Result", pvg.Response.Response, "Failure responding to request")
 25023  		}
 25024  	}
 25025  	return
 25026  }
 25027  
 25028  // P2sVpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 25029  // operation.
 25030  type P2sVpnGatewaysDeleteFuture struct {
 25031  	azure.FutureAPI
 25032  	// Result returns the result of the asynchronous operation.
 25033  	// If the operation has not completed it will return an error.
 25034  	Result func(P2sVpnGatewaysClient) (autorest.Response, error)
 25035  }
 25036  
 25037  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 25038  func (future *P2sVpnGatewaysDeleteFuture) UnmarshalJSON(body []byte) error {
 25039  	var azFuture azure.Future
 25040  	if err := json.Unmarshal(body, &azFuture); err != nil {
 25041  		return err
 25042  	}
 25043  	future.FutureAPI = &azFuture
 25044  	future.Result = future.result
 25045  	return nil
 25046  }
 25047  
 25048  // result is the default implementation for P2sVpnGatewaysDeleteFuture.Result.
 25049  func (future *P2sVpnGatewaysDeleteFuture) result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
 25050  	var done bool
 25051  	done, err = future.DoneWithContext(context.Background(), client)
 25052  	if err != nil {
 25053  		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
 25054  		return
 25055  	}
 25056  	if !done {
 25057  		ar.Response = future.Response()
 25058  		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDeleteFuture")
 25059  		return
 25060  	}
 25061  	ar.Response = future.Response()
 25062  	return
 25063  }
 25064  
 25065  // P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture an abstraction for monitoring and retrieving the results
 25066  // of a long-running operation.
 25067  type P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture struct {
 25068  	azure.FutureAPI
 25069  	// Result returns the result of the asynchronous operation.
 25070  	// If the operation has not completed it will return an error.
 25071  	Result func(P2sVpnGatewaysClient) (autorest.Response, error)
 25072  }
 25073  
 25074  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 25075  func (future *P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture) UnmarshalJSON(body []byte) error {
 25076  	var azFuture azure.Future
 25077  	if err := json.Unmarshal(body, &azFuture); err != nil {
 25078  		return err
 25079  	}
 25080  	future.FutureAPI = &azFuture
 25081  	future.Result = future.result
 25082  	return nil
 25083  }
 25084  
 25085  // result is the default implementation for P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture.Result.
 25086  func (future *P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture) result(client P2sVpnGatewaysClient) (ar autorest.Response, err error) {
 25087  	var done bool
 25088  	done, err = future.DoneWithContext(context.Background(), client)
 25089  	if err != nil {
 25090  		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture", "Result", future.Response(), "Polling failure")
 25091  		return
 25092  	}
 25093  	if !done {
 25094  		ar.Response = future.Response()
 25095  		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysDisconnectP2sVpnConnectionsFuture")
 25096  		return
 25097  	}
 25098  	ar.Response = future.Response()
 25099  	return
 25100  }
 25101  
 25102  // P2sVpnGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results of a
 25103  // long-running operation.
 25104  type P2sVpnGatewaysGenerateVpnProfileFuture struct {
 25105  	azure.FutureAPI
 25106  	// Result returns the result of the asynchronous operation.
 25107  	// If the operation has not completed it will return an error.
 25108  	Result func(P2sVpnGatewaysClient) (VpnProfileResponse, error)
 25109  }
 25110  
 25111  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 25112  func (future *P2sVpnGatewaysGenerateVpnProfileFuture) UnmarshalJSON(body []byte) error {
 25113  	var azFuture azure.Future
 25114  	if err := json.Unmarshal(body, &azFuture); err != nil {
 25115  		return err
 25116  	}
 25117  	future.FutureAPI = &azFuture
 25118  	future.Result = future.result
 25119  	return nil
 25120  }
 25121  
 25122  // result is the default implementation for P2sVpnGatewaysGenerateVpnProfileFuture.Result.
 25123  func (future *P2sVpnGatewaysGenerateVpnProfileFuture) result(client P2sVpnGatewaysClient) (vpr VpnProfileResponse, err error) {
 25124  	var done bool
 25125  	done, err = future.DoneWithContext(context.Background(), client)
 25126  	if err != nil {
 25127  		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
 25128  		return
 25129  	}
 25130  	if !done {
 25131  		vpr.Response.Response = future.Response()
 25132  		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGenerateVpnProfileFuture")
 25133  		return
 25134  	}
 25135  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 25136  	if vpr.Response.Response, err = future.GetResult(sender); err == nil && vpr.Response.Response.StatusCode != http.StatusNoContent {
 25137  		vpr, err = client.GenerateVpnProfileResponder(vpr.Response.Response)
 25138  		if err != nil {
 25139  			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGenerateVpnProfileFuture", "Result", vpr.Response.Response, "Failure responding to request")
 25140  		}
 25141  	}
 25142  	return
 25143  }
 25144  
 25145  // P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture an abstraction for monitoring and retrieving the
 25146  // results of a long-running operation.
 25147  type P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture struct {
 25148  	azure.FutureAPI
 25149  	// Result returns the result of the asynchronous operation.
 25150  	// If the operation has not completed it will return an error.
 25151  	Result func(P2sVpnGatewaysClient) (P2SVpnConnectionHealth, error)
 25152  }
 25153  
 25154  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 25155  func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture) UnmarshalJSON(body []byte) error {
 25156  	var azFuture azure.Future
 25157  	if err := json.Unmarshal(body, &azFuture); err != nil {
 25158  		return err
 25159  	}
 25160  	future.FutureAPI = &azFuture
 25161  	future.Result = future.result
 25162  	return nil
 25163  }
 25164  
 25165  // result is the default implementation for P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture.Result.
 25166  func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture) result(client P2sVpnGatewaysClient) (pvch P2SVpnConnectionHealth, err error) {
 25167  	var done bool
 25168  	done, err = future.DoneWithContext(context.Background(), client)
 25169  	if err != nil {
 25170  		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture", "Result", future.Response(), "Polling failure")
 25171  		return
 25172  	}
 25173  	if !done {
 25174  		pvch.Response.Response = future.Response()
 25175  		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture")
 25176  		return
 25177  	}
 25178  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 25179  	if pvch.Response.Response, err = future.GetResult(sender); err == nil && pvch.Response.Response.StatusCode != http.StatusNoContent {
 25180  		pvch, err = client.GetP2sVpnConnectionHealthDetailedResponder(pvch.Response.Response)
 25181  		if err != nil {
 25182  			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthDetailedFuture", "Result", pvch.Response.Response, "Failure responding to request")
 25183  		}
 25184  	}
 25185  	return
 25186  }
 25187  
 25188  // P2sVpnGatewaysGetP2sVpnConnectionHealthFuture an abstraction for monitoring and retrieving the results
 25189  // of a long-running operation.
 25190  type P2sVpnGatewaysGetP2sVpnConnectionHealthFuture struct {
 25191  	azure.FutureAPI
 25192  	// Result returns the result of the asynchronous operation.
 25193  	// If the operation has not completed it will return an error.
 25194  	Result func(P2sVpnGatewaysClient) (P2SVpnGateway, error)
 25195  }
 25196  
 25197  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 25198  func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthFuture) UnmarshalJSON(body []byte) error {
 25199  	var azFuture azure.Future
 25200  	if err := json.Unmarshal(body, &azFuture); err != nil {
 25201  		return err
 25202  	}
 25203  	future.FutureAPI = &azFuture
 25204  	future.Result = future.result
 25205  	return nil
 25206  }
 25207  
 25208  // result is the default implementation for P2sVpnGatewaysGetP2sVpnConnectionHealthFuture.Result.
 25209  func (future *P2sVpnGatewaysGetP2sVpnConnectionHealthFuture) result(client P2sVpnGatewaysClient) (pvg P2SVpnGateway, err error) {
 25210  	var done bool
 25211  	done, err = future.DoneWithContext(context.Background(), client)
 25212  	if err != nil {
 25213  		err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", future.Response(), "Polling failure")
 25214  		return
 25215  	}
 25216  	if !done {
 25217  		pvg.Response.Response = future.Response()
 25218  		err = azure.NewAsyncOpIncompleteError("network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture")
 25219  		return
 25220  	}
 25221  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 25222  	if pvg.Response.Response, err = future.GetResult(sender); err == nil && pvg.Response.Response.StatusCode != http.StatusNoContent {
 25223  		pvg, err = client.GetP2sVpnConnectionHealthResponder(pvg.Response.Response)
 25224  		if err != nil {
 25225  			err = autorest.NewErrorWithError(err, "network.P2sVpnGatewaysGetP2sVpnConnectionHealthFuture", "Result", pvg.Response.Response, "Failure responding to request")
 25226  		}
 25227  	}
 25228  	return
 25229  }
 25230  
 25231  // P2SVpnProfileParameters vpn Client Parameters for package generation.
 25232  type P2SVpnProfileParameters struct {
 25233  	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
 25234  	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
 25235  }
 25236  
 25237  // PacketCapture parameters that define the create packet capture operation.
 25238  type PacketCapture struct {
 25239  	// PacketCaptureParameters - Properties of the packet capture.
 25240  	*PacketCaptureParameters `json:"properties,omitempty"`
 25241  }
 25242  
 25243  // MarshalJSON is the custom marshaler for PacketCapture.
 25244  func (pc PacketCapture) MarshalJSON() ([]byte, error) {
 25245  	objectMap := make(map[string]interface{})
 25246  	if pc.PacketCaptureParameters != nil {
 25247  		objectMap["properties"] = pc.PacketCaptureParameters
 25248  	}
 25249  	return json.Marshal(objectMap)
 25250  }
 25251  
 25252  // UnmarshalJSON is the custom unmarshaler for PacketCapture struct.
 25253  func (pc *PacketCapture) UnmarshalJSON(body []byte) error {
 25254  	var m map[string]*json.RawMessage
 25255  	err := json.Unmarshal(body, &m)
 25256  	if err != nil {
 25257  		return err
 25258  	}
 25259  	for k, v := range m {
 25260  		switch k {
 25261  		case "properties":
 25262  			if v != nil {
 25263  				var packetCaptureParameters PacketCaptureParameters
 25264  				err = json.Unmarshal(*v, &packetCaptureParameters)
 25265  				if err != nil {
 25266  					return err
 25267  				}
 25268  				pc.PacketCaptureParameters = &packetCaptureParameters
 25269  			}
 25270  		}
 25271  	}
 25272  
 25273  	return nil
 25274  }
 25275  
 25276  // PacketCaptureFilter filter that is applied to packet capture request. Multiple filters can be applied.
 25277  type PacketCaptureFilter struct {
 25278  	// Protocol - Protocol to be filtered on. Possible values include: 'PcProtocolTCP', 'PcProtocolUDP', 'PcProtocolAny'
 25279  	Protocol PcProtocol `json:"protocol,omitempty"`
 25280  	// 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.
 25281  	LocalIPAddress *string `json:"localIPAddress,omitempty"`
 25282  	// 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.
 25283  	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
 25284  	// 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.
 25285  	LocalPort *string `json:"localPort,omitempty"`
 25286  	// 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.
 25287  	RemotePort *string `json:"remotePort,omitempty"`
 25288  }
 25289  
 25290  // PacketCaptureListResult list of packet capture sessions.
 25291  type PacketCaptureListResult struct {
 25292  	autorest.Response `json:"-"`
 25293  	// Value - Information about packet capture sessions.
 25294  	Value *[]PacketCaptureResult `json:"value,omitempty"`
 25295  }
 25296  
 25297  // PacketCaptureParameters parameters that define the create packet capture operation.
 25298  type PacketCaptureParameters struct {
 25299  	// Target - The ID of the targeted resource, only VM is currently supported.
 25300  	Target *string `json:"target,omitempty"`
 25301  	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
 25302  	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
 25303  	// TotalBytesPerSession - Maximum size of the capture output.
 25304  	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
 25305  	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
 25306  	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
 25307  	// StorageLocation - The storage location for a packet capture session.
 25308  	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
 25309  	// Filters - A list of packet capture filters.
 25310  	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
 25311  }
 25312  
 25313  // PacketCaptureQueryStatusResult status of packet capture session.
 25314  type PacketCaptureQueryStatusResult struct {
 25315  	autorest.Response `json:"-"`
 25316  	// Name - The name of the packet capture resource.
 25317  	Name *string `json:"name,omitempty"`
 25318  	// ID - The ID of the packet capture resource.
 25319  	ID *string `json:"id,omitempty"`
 25320  	// CaptureStartTime - The start time of the packet capture session.
 25321  	CaptureStartTime *date.Time `json:"captureStartTime,omitempty"`
 25322  	// PacketCaptureStatus - The status of the packet capture session. Possible values include: 'PcStatusNotStarted', 'PcStatusRunning', 'PcStatusStopped', 'PcStatusError', 'PcStatusUnknown'
 25323  	PacketCaptureStatus PcStatus `json:"packetCaptureStatus,omitempty"`
 25324  	// StopReason - The reason the current packet capture session was stopped.
 25325  	StopReason *string `json:"stopReason,omitempty"`
 25326  	// PacketCaptureError - List of errors of packet capture session.
 25327  	PacketCaptureError *[]PcError `json:"packetCaptureError,omitempty"`
 25328  }
 25329  
 25330  // PacketCaptureResult information about packet capture session.
 25331  type PacketCaptureResult struct {
 25332  	autorest.Response `json:"-"`
 25333  	// Name - READ-ONLY; Name of the packet capture session.
 25334  	Name *string `json:"name,omitempty"`
 25335  	// ID - READ-ONLY; ID of the packet capture operation.
 25336  	ID *string `json:"id,omitempty"`
 25337  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 25338  	Etag *string `json:"etag,omitempty"`
 25339  	// PacketCaptureResultProperties - Properties of the packet capture result.
 25340  	*PacketCaptureResultProperties `json:"properties,omitempty"`
 25341  }
 25342  
 25343  // MarshalJSON is the custom marshaler for PacketCaptureResult.
 25344  func (pcr PacketCaptureResult) MarshalJSON() ([]byte, error) {
 25345  	objectMap := make(map[string]interface{})
 25346  	if pcr.PacketCaptureResultProperties != nil {
 25347  		objectMap["properties"] = pcr.PacketCaptureResultProperties
 25348  	}
 25349  	return json.Marshal(objectMap)
 25350  }
 25351  
 25352  // UnmarshalJSON is the custom unmarshaler for PacketCaptureResult struct.
 25353  func (pcr *PacketCaptureResult) UnmarshalJSON(body []byte) error {
 25354  	var m map[string]*json.RawMessage
 25355  	err := json.Unmarshal(body, &m)
 25356  	if err != nil {
 25357  		return err
 25358  	}
 25359  	for k, v := range m {
 25360  		switch k {
 25361  		case "name":
 25362  			if v != nil {
 25363  				var name string
 25364  				err = json.Unmarshal(*v, &name)
 25365  				if err != nil {
 25366  					return err
 25367  				}
 25368  				pcr.Name = &name
 25369  			}
 25370  		case "id":
 25371  			if v != nil {
 25372  				var ID string
 25373  				err = json.Unmarshal(*v, &ID)
 25374  				if err != nil {
 25375  					return err
 25376  				}
 25377  				pcr.ID = &ID
 25378  			}
 25379  		case "etag":
 25380  			if v != nil {
 25381  				var etag string
 25382  				err = json.Unmarshal(*v, &etag)
 25383  				if err != nil {
 25384  					return err
 25385  				}
 25386  				pcr.Etag = &etag
 25387  			}
 25388  		case "properties":
 25389  			if v != nil {
 25390  				var packetCaptureResultProperties PacketCaptureResultProperties
 25391  				err = json.Unmarshal(*v, &packetCaptureResultProperties)
 25392  				if err != nil {
 25393  					return err
 25394  				}
 25395  				pcr.PacketCaptureResultProperties = &packetCaptureResultProperties
 25396  			}
 25397  		}
 25398  	}
 25399  
 25400  	return nil
 25401  }
 25402  
 25403  // PacketCaptureResultProperties the properties of a packet capture session.
 25404  type PacketCaptureResultProperties struct {
 25405  	// ProvisioningState - READ-ONLY; The provisioning state of the packet capture session. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 25406  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 25407  	// Target - The ID of the targeted resource, only VM is currently supported.
 25408  	Target *string `json:"target,omitempty"`
 25409  	// BytesToCapturePerPacket - Number of bytes captured per packet, the remaining bytes are truncated.
 25410  	BytesToCapturePerPacket *int32 `json:"bytesToCapturePerPacket,omitempty"`
 25411  	// TotalBytesPerSession - Maximum size of the capture output.
 25412  	TotalBytesPerSession *int32 `json:"totalBytesPerSession,omitempty"`
 25413  	// TimeLimitInSeconds - Maximum duration of the capture session in seconds.
 25414  	TimeLimitInSeconds *int32 `json:"timeLimitInSeconds,omitempty"`
 25415  	// StorageLocation - The storage location for a packet capture session.
 25416  	StorageLocation *PacketCaptureStorageLocation `json:"storageLocation,omitempty"`
 25417  	// Filters - A list of packet capture filters.
 25418  	Filters *[]PacketCaptureFilter `json:"filters,omitempty"`
 25419  }
 25420  
 25421  // MarshalJSON is the custom marshaler for PacketCaptureResultProperties.
 25422  func (pcrp PacketCaptureResultProperties) MarshalJSON() ([]byte, error) {
 25423  	objectMap := make(map[string]interface{})
 25424  	if pcrp.Target != nil {
 25425  		objectMap["target"] = pcrp.Target
 25426  	}
 25427  	if pcrp.BytesToCapturePerPacket != nil {
 25428  		objectMap["bytesToCapturePerPacket"] = pcrp.BytesToCapturePerPacket
 25429  	}
 25430  	if pcrp.TotalBytesPerSession != nil {
 25431  		objectMap["totalBytesPerSession"] = pcrp.TotalBytesPerSession
 25432  	}
 25433  	if pcrp.TimeLimitInSeconds != nil {
 25434  		objectMap["timeLimitInSeconds"] = pcrp.TimeLimitInSeconds
 25435  	}
 25436  	if pcrp.StorageLocation != nil {
 25437  		objectMap["storageLocation"] = pcrp.StorageLocation
 25438  	}
 25439  	if pcrp.Filters != nil {
 25440  		objectMap["filters"] = pcrp.Filters
 25441  	}
 25442  	return json.Marshal(objectMap)
 25443  }
 25444  
 25445  // PacketCapturesCreateFuture an abstraction for monitoring and retrieving the results of a long-running
 25446  // operation.
 25447  type PacketCapturesCreateFuture struct {
 25448  	azure.FutureAPI
 25449  	// Result returns the result of the asynchronous operation.
 25450  	// If the operation has not completed it will return an error.
 25451  	Result func(PacketCapturesClient) (PacketCaptureResult, error)
 25452  }
 25453  
 25454  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 25455  func (future *PacketCapturesCreateFuture) UnmarshalJSON(body []byte) error {
 25456  	var azFuture azure.Future
 25457  	if err := json.Unmarshal(body, &azFuture); err != nil {
 25458  		return err
 25459  	}
 25460  	future.FutureAPI = &azFuture
 25461  	future.Result = future.result
 25462  	return nil
 25463  }
 25464  
 25465  // result is the default implementation for PacketCapturesCreateFuture.Result.
 25466  func (future *PacketCapturesCreateFuture) result(client PacketCapturesClient) (pcr PacketCaptureResult, err error) {
 25467  	var done bool
 25468  	done, err = future.DoneWithContext(context.Background(), client)
 25469  	if err != nil {
 25470  		err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", future.Response(), "Polling failure")
 25471  		return
 25472  	}
 25473  	if !done {
 25474  		pcr.Response.Response = future.Response()
 25475  		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesCreateFuture")
 25476  		return
 25477  	}
 25478  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 25479  	if pcr.Response.Response, err = future.GetResult(sender); err == nil && pcr.Response.Response.StatusCode != http.StatusNoContent {
 25480  		pcr, err = client.CreateResponder(pcr.Response.Response)
 25481  		if err != nil {
 25482  			err = autorest.NewErrorWithError(err, "network.PacketCapturesCreateFuture", "Result", pcr.Response.Response, "Failure responding to request")
 25483  		}
 25484  	}
 25485  	return
 25486  }
 25487  
 25488  // PacketCapturesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 25489  // operation.
 25490  type PacketCapturesDeleteFuture struct {
 25491  	azure.FutureAPI
 25492  	// Result returns the result of the asynchronous operation.
 25493  	// If the operation has not completed it will return an error.
 25494  	Result func(PacketCapturesClient) (autorest.Response, error)
 25495  }
 25496  
 25497  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 25498  func (future *PacketCapturesDeleteFuture) UnmarshalJSON(body []byte) error {
 25499  	var azFuture azure.Future
 25500  	if err := json.Unmarshal(body, &azFuture); err != nil {
 25501  		return err
 25502  	}
 25503  	future.FutureAPI = &azFuture
 25504  	future.Result = future.result
 25505  	return nil
 25506  }
 25507  
 25508  // result is the default implementation for PacketCapturesDeleteFuture.Result.
 25509  func (future *PacketCapturesDeleteFuture) result(client PacketCapturesClient) (ar autorest.Response, err error) {
 25510  	var done bool
 25511  	done, err = future.DoneWithContext(context.Background(), client)
 25512  	if err != nil {
 25513  		err = autorest.NewErrorWithError(err, "network.PacketCapturesDeleteFuture", "Result", future.Response(), "Polling failure")
 25514  		return
 25515  	}
 25516  	if !done {
 25517  		ar.Response = future.Response()
 25518  		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesDeleteFuture")
 25519  		return
 25520  	}
 25521  	ar.Response = future.Response()
 25522  	return
 25523  }
 25524  
 25525  // PacketCapturesGetStatusFuture an abstraction for monitoring and retrieving the results of a long-running
 25526  // operation.
 25527  type PacketCapturesGetStatusFuture struct {
 25528  	azure.FutureAPI
 25529  	// Result returns the result of the asynchronous operation.
 25530  	// If the operation has not completed it will return an error.
 25531  	Result func(PacketCapturesClient) (PacketCaptureQueryStatusResult, error)
 25532  }
 25533  
 25534  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 25535  func (future *PacketCapturesGetStatusFuture) UnmarshalJSON(body []byte) error {
 25536  	var azFuture azure.Future
 25537  	if err := json.Unmarshal(body, &azFuture); err != nil {
 25538  		return err
 25539  	}
 25540  	future.FutureAPI = &azFuture
 25541  	future.Result = future.result
 25542  	return nil
 25543  }
 25544  
 25545  // result is the default implementation for PacketCapturesGetStatusFuture.Result.
 25546  func (future *PacketCapturesGetStatusFuture) result(client PacketCapturesClient) (pcqsr PacketCaptureQueryStatusResult, err error) {
 25547  	var done bool
 25548  	done, err = future.DoneWithContext(context.Background(), client)
 25549  	if err != nil {
 25550  		err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", future.Response(), "Polling failure")
 25551  		return
 25552  	}
 25553  	if !done {
 25554  		pcqsr.Response.Response = future.Response()
 25555  		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesGetStatusFuture")
 25556  		return
 25557  	}
 25558  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 25559  	if pcqsr.Response.Response, err = future.GetResult(sender); err == nil && pcqsr.Response.Response.StatusCode != http.StatusNoContent {
 25560  		pcqsr, err = client.GetStatusResponder(pcqsr.Response.Response)
 25561  		if err != nil {
 25562  			err = autorest.NewErrorWithError(err, "network.PacketCapturesGetStatusFuture", "Result", pcqsr.Response.Response, "Failure responding to request")
 25563  		}
 25564  	}
 25565  	return
 25566  }
 25567  
 25568  // PacketCapturesStopFuture an abstraction for monitoring and retrieving the results of a long-running
 25569  // operation.
 25570  type PacketCapturesStopFuture struct {
 25571  	azure.FutureAPI
 25572  	// Result returns the result of the asynchronous operation.
 25573  	// If the operation has not completed it will return an error.
 25574  	Result func(PacketCapturesClient) (autorest.Response, error)
 25575  }
 25576  
 25577  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 25578  func (future *PacketCapturesStopFuture) UnmarshalJSON(body []byte) error {
 25579  	var azFuture azure.Future
 25580  	if err := json.Unmarshal(body, &azFuture); err != nil {
 25581  		return err
 25582  	}
 25583  	future.FutureAPI = &azFuture
 25584  	future.Result = future.result
 25585  	return nil
 25586  }
 25587  
 25588  // result is the default implementation for PacketCapturesStopFuture.Result.
 25589  func (future *PacketCapturesStopFuture) result(client PacketCapturesClient) (ar autorest.Response, err error) {
 25590  	var done bool
 25591  	done, err = future.DoneWithContext(context.Background(), client)
 25592  	if err != nil {
 25593  		err = autorest.NewErrorWithError(err, "network.PacketCapturesStopFuture", "Result", future.Response(), "Polling failure")
 25594  		return
 25595  	}
 25596  	if !done {
 25597  		ar.Response = future.Response()
 25598  		err = azure.NewAsyncOpIncompleteError("network.PacketCapturesStopFuture")
 25599  		return
 25600  	}
 25601  	ar.Response = future.Response()
 25602  	return
 25603  }
 25604  
 25605  // PacketCaptureStorageLocation the storage location for a packet capture session.
 25606  type PacketCaptureStorageLocation struct {
 25607  	// StorageID - The ID of the storage account to save the packet capture session. Required if no local file path is provided.
 25608  	StorageID *string `json:"storageId,omitempty"`
 25609  	// 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.
 25610  	StoragePath *string `json:"storagePath,omitempty"`
 25611  	// 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.
 25612  	FilePath *string `json:"filePath,omitempty"`
 25613  }
 25614  
 25615  // PatchRouteFilter route Filter Resource.
 25616  type PatchRouteFilter struct {
 25617  	// RouteFilterPropertiesFormat - Properties of the route filter.
 25618  	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
 25619  	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
 25620  	Name *string `json:"name,omitempty"`
 25621  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 25622  	Etag *string `json:"etag,omitempty"`
 25623  	// Type - READ-ONLY; Resource type.
 25624  	Type *string `json:"type,omitempty"`
 25625  	// Tags - Resource tags.
 25626  	Tags map[string]*string `json:"tags"`
 25627  	// ID - Resource ID.
 25628  	ID *string `json:"id,omitempty"`
 25629  }
 25630  
 25631  // MarshalJSON is the custom marshaler for PatchRouteFilter.
 25632  func (prf PatchRouteFilter) MarshalJSON() ([]byte, error) {
 25633  	objectMap := make(map[string]interface{})
 25634  	if prf.RouteFilterPropertiesFormat != nil {
 25635  		objectMap["properties"] = prf.RouteFilterPropertiesFormat
 25636  	}
 25637  	if prf.Tags != nil {
 25638  		objectMap["tags"] = prf.Tags
 25639  	}
 25640  	if prf.ID != nil {
 25641  		objectMap["id"] = prf.ID
 25642  	}
 25643  	return json.Marshal(objectMap)
 25644  }
 25645  
 25646  // UnmarshalJSON is the custom unmarshaler for PatchRouteFilter struct.
 25647  func (prf *PatchRouteFilter) UnmarshalJSON(body []byte) error {
 25648  	var m map[string]*json.RawMessage
 25649  	err := json.Unmarshal(body, &m)
 25650  	if err != nil {
 25651  		return err
 25652  	}
 25653  	for k, v := range m {
 25654  		switch k {
 25655  		case "properties":
 25656  			if v != nil {
 25657  				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
 25658  				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
 25659  				if err != nil {
 25660  					return err
 25661  				}
 25662  				prf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
 25663  			}
 25664  		case "name":
 25665  			if v != nil {
 25666  				var name string
 25667  				err = json.Unmarshal(*v, &name)
 25668  				if err != nil {
 25669  					return err
 25670  				}
 25671  				prf.Name = &name
 25672  			}
 25673  		case "etag":
 25674  			if v != nil {
 25675  				var etag string
 25676  				err = json.Unmarshal(*v, &etag)
 25677  				if err != nil {
 25678  					return err
 25679  				}
 25680  				prf.Etag = &etag
 25681  			}
 25682  		case "type":
 25683  			if v != nil {
 25684  				var typeVar string
 25685  				err = json.Unmarshal(*v, &typeVar)
 25686  				if err != nil {
 25687  					return err
 25688  				}
 25689  				prf.Type = &typeVar
 25690  			}
 25691  		case "tags":
 25692  			if v != nil {
 25693  				var tags map[string]*string
 25694  				err = json.Unmarshal(*v, &tags)
 25695  				if err != nil {
 25696  					return err
 25697  				}
 25698  				prf.Tags = tags
 25699  			}
 25700  		case "id":
 25701  			if v != nil {
 25702  				var ID string
 25703  				err = json.Unmarshal(*v, &ID)
 25704  				if err != nil {
 25705  					return err
 25706  				}
 25707  				prf.ID = &ID
 25708  			}
 25709  		}
 25710  	}
 25711  
 25712  	return nil
 25713  }
 25714  
 25715  // PatchRouteFilterRule route Filter Rule Resource.
 25716  type PatchRouteFilterRule struct {
 25717  	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
 25718  	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
 25719  	// Name - READ-ONLY; The name of the resource that is unique within a resource group. This name can be used to access the resource.
 25720  	Name *string `json:"name,omitempty"`
 25721  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 25722  	Etag *string `json:"etag,omitempty"`
 25723  	// ID - Resource ID.
 25724  	ID *string `json:"id,omitempty"`
 25725  }
 25726  
 25727  // MarshalJSON is the custom marshaler for PatchRouteFilterRule.
 25728  func (prfr PatchRouteFilterRule) MarshalJSON() ([]byte, error) {
 25729  	objectMap := make(map[string]interface{})
 25730  	if prfr.RouteFilterRulePropertiesFormat != nil {
 25731  		objectMap["properties"] = prfr.RouteFilterRulePropertiesFormat
 25732  	}
 25733  	if prfr.ID != nil {
 25734  		objectMap["id"] = prfr.ID
 25735  	}
 25736  	return json.Marshal(objectMap)
 25737  }
 25738  
 25739  // UnmarshalJSON is the custom unmarshaler for PatchRouteFilterRule struct.
 25740  func (prfr *PatchRouteFilterRule) UnmarshalJSON(body []byte) error {
 25741  	var m map[string]*json.RawMessage
 25742  	err := json.Unmarshal(body, &m)
 25743  	if err != nil {
 25744  		return err
 25745  	}
 25746  	for k, v := range m {
 25747  		switch k {
 25748  		case "properties":
 25749  			if v != nil {
 25750  				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
 25751  				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
 25752  				if err != nil {
 25753  					return err
 25754  				}
 25755  				prfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
 25756  			}
 25757  		case "name":
 25758  			if v != nil {
 25759  				var name string
 25760  				err = json.Unmarshal(*v, &name)
 25761  				if err != nil {
 25762  					return err
 25763  				}
 25764  				prfr.Name = &name
 25765  			}
 25766  		case "etag":
 25767  			if v != nil {
 25768  				var etag string
 25769  				err = json.Unmarshal(*v, &etag)
 25770  				if err != nil {
 25771  					return err
 25772  				}
 25773  				prfr.Etag = &etag
 25774  			}
 25775  		case "id":
 25776  			if v != nil {
 25777  				var ID string
 25778  				err = json.Unmarshal(*v, &ID)
 25779  				if err != nil {
 25780  					return err
 25781  				}
 25782  				prfr.ID = &ID
 25783  			}
 25784  		}
 25785  	}
 25786  
 25787  	return nil
 25788  }
 25789  
 25790  // PeerExpressRouteCircuitConnection peer Express Route Circuit Connection in an ExpressRouteCircuitPeering
 25791  // resource.
 25792  type PeerExpressRouteCircuitConnection struct {
 25793  	autorest.Response `json:"-"`
 25794  	// PeerExpressRouteCircuitConnectionPropertiesFormat - Properties of the peer express route circuit connection.
 25795  	*PeerExpressRouteCircuitConnectionPropertiesFormat `json:"properties,omitempty"`
 25796  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 25797  	Name *string `json:"name,omitempty"`
 25798  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 25799  	Etag *string `json:"etag,omitempty"`
 25800  	// Type - READ-ONLY; Type of the resource.
 25801  	Type *string `json:"type,omitempty"`
 25802  	// ID - Resource ID.
 25803  	ID *string `json:"id,omitempty"`
 25804  }
 25805  
 25806  // MarshalJSON is the custom marshaler for PeerExpressRouteCircuitConnection.
 25807  func (percc PeerExpressRouteCircuitConnection) MarshalJSON() ([]byte, error) {
 25808  	objectMap := make(map[string]interface{})
 25809  	if percc.PeerExpressRouteCircuitConnectionPropertiesFormat != nil {
 25810  		objectMap["properties"] = percc.PeerExpressRouteCircuitConnectionPropertiesFormat
 25811  	}
 25812  	if percc.Name != nil {
 25813  		objectMap["name"] = percc.Name
 25814  	}
 25815  	if percc.ID != nil {
 25816  		objectMap["id"] = percc.ID
 25817  	}
 25818  	return json.Marshal(objectMap)
 25819  }
 25820  
 25821  // UnmarshalJSON is the custom unmarshaler for PeerExpressRouteCircuitConnection struct.
 25822  func (percc *PeerExpressRouteCircuitConnection) UnmarshalJSON(body []byte) error {
 25823  	var m map[string]*json.RawMessage
 25824  	err := json.Unmarshal(body, &m)
 25825  	if err != nil {
 25826  		return err
 25827  	}
 25828  	for k, v := range m {
 25829  		switch k {
 25830  		case "properties":
 25831  			if v != nil {
 25832  				var peerExpressRouteCircuitConnectionPropertiesFormat PeerExpressRouteCircuitConnectionPropertiesFormat
 25833  				err = json.Unmarshal(*v, &peerExpressRouteCircuitConnectionPropertiesFormat)
 25834  				if err != nil {
 25835  					return err
 25836  				}
 25837  				percc.PeerExpressRouteCircuitConnectionPropertiesFormat = &peerExpressRouteCircuitConnectionPropertiesFormat
 25838  			}
 25839  		case "name":
 25840  			if v != nil {
 25841  				var name string
 25842  				err = json.Unmarshal(*v, &name)
 25843  				if err != nil {
 25844  					return err
 25845  				}
 25846  				percc.Name = &name
 25847  			}
 25848  		case "etag":
 25849  			if v != nil {
 25850  				var etag string
 25851  				err = json.Unmarshal(*v, &etag)
 25852  				if err != nil {
 25853  					return err
 25854  				}
 25855  				percc.Etag = &etag
 25856  			}
 25857  		case "type":
 25858  			if v != nil {
 25859  				var typeVar string
 25860  				err = json.Unmarshal(*v, &typeVar)
 25861  				if err != nil {
 25862  					return err
 25863  				}
 25864  				percc.Type = &typeVar
 25865  			}
 25866  		case "id":
 25867  			if v != nil {
 25868  				var ID string
 25869  				err = json.Unmarshal(*v, &ID)
 25870  				if err != nil {
 25871  					return err
 25872  				}
 25873  				percc.ID = &ID
 25874  			}
 25875  		}
 25876  	}
 25877  
 25878  	return nil
 25879  }
 25880  
 25881  // PeerExpressRouteCircuitConnectionListResult response for ListPeeredConnections API service call
 25882  // retrieves all global reach peer circuit connections that belongs to a Private Peering for an
 25883  // ExpressRouteCircuit.
 25884  type PeerExpressRouteCircuitConnectionListResult struct {
 25885  	autorest.Response `json:"-"`
 25886  	// Value - The global reach peer circuit connection associated with Private Peering in an ExpressRoute Circuit.
 25887  	Value *[]PeerExpressRouteCircuitConnection `json:"value,omitempty"`
 25888  	// NextLink - The URL to get the next set of results.
 25889  	NextLink *string `json:"nextLink,omitempty"`
 25890  }
 25891  
 25892  // PeerExpressRouteCircuitConnectionListResultIterator provides access to a complete listing of
 25893  // PeerExpressRouteCircuitConnection values.
 25894  type PeerExpressRouteCircuitConnectionListResultIterator struct {
 25895  	i    int
 25896  	page PeerExpressRouteCircuitConnectionListResultPage
 25897  }
 25898  
 25899  // NextWithContext advances to the next value.  If there was an error making
 25900  // the request the iterator does not advance and the error is returned.
 25901  func (iter *PeerExpressRouteCircuitConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
 25902  	if tracing.IsEnabled() {
 25903  		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultIterator.NextWithContext")
 25904  		defer func() {
 25905  			sc := -1
 25906  			if iter.Response().Response.Response != nil {
 25907  				sc = iter.Response().Response.Response.StatusCode
 25908  			}
 25909  			tracing.EndSpan(ctx, sc, err)
 25910  		}()
 25911  	}
 25912  	iter.i++
 25913  	if iter.i < len(iter.page.Values()) {
 25914  		return nil
 25915  	}
 25916  	err = iter.page.NextWithContext(ctx)
 25917  	if err != nil {
 25918  		iter.i--
 25919  		return err
 25920  	}
 25921  	iter.i = 0
 25922  	return nil
 25923  }
 25924  
 25925  // Next advances to the next value.  If there was an error making
 25926  // the request the iterator does not advance and the error is returned.
 25927  // Deprecated: Use NextWithContext() instead.
 25928  func (iter *PeerExpressRouteCircuitConnectionListResultIterator) Next() error {
 25929  	return iter.NextWithContext(context.Background())
 25930  }
 25931  
 25932  // NotDone returns true if the enumeration should be started or is not yet complete.
 25933  func (iter PeerExpressRouteCircuitConnectionListResultIterator) NotDone() bool {
 25934  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 25935  }
 25936  
 25937  // Response returns the raw server response from the last page request.
 25938  func (iter PeerExpressRouteCircuitConnectionListResultIterator) Response() PeerExpressRouteCircuitConnectionListResult {
 25939  	return iter.page.Response()
 25940  }
 25941  
 25942  // Value returns the current value or a zero-initialized value if the
 25943  // iterator has advanced beyond the end of the collection.
 25944  func (iter PeerExpressRouteCircuitConnectionListResultIterator) Value() PeerExpressRouteCircuitConnection {
 25945  	if !iter.page.NotDone() {
 25946  		return PeerExpressRouteCircuitConnection{}
 25947  	}
 25948  	return iter.page.Values()[iter.i]
 25949  }
 25950  
 25951  // Creates a new instance of the PeerExpressRouteCircuitConnectionListResultIterator type.
 25952  func NewPeerExpressRouteCircuitConnectionListResultIterator(page PeerExpressRouteCircuitConnectionListResultPage) PeerExpressRouteCircuitConnectionListResultIterator {
 25953  	return PeerExpressRouteCircuitConnectionListResultIterator{page: page}
 25954  }
 25955  
 25956  // IsEmpty returns true if the ListResult contains no values.
 25957  func (percclr PeerExpressRouteCircuitConnectionListResult) IsEmpty() bool {
 25958  	return percclr.Value == nil || len(*percclr.Value) == 0
 25959  }
 25960  
 25961  // hasNextLink returns true if the NextLink is not empty.
 25962  func (percclr PeerExpressRouteCircuitConnectionListResult) hasNextLink() bool {
 25963  	return percclr.NextLink != nil && len(*percclr.NextLink) != 0
 25964  }
 25965  
 25966  // peerExpressRouteCircuitConnectionListResultPreparer prepares a request to retrieve the next set of results.
 25967  // It returns nil if no more results exist.
 25968  func (percclr PeerExpressRouteCircuitConnectionListResult) peerExpressRouteCircuitConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
 25969  	if !percclr.hasNextLink() {
 25970  		return nil, nil
 25971  	}
 25972  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 25973  		autorest.AsJSON(),
 25974  		autorest.AsGet(),
 25975  		autorest.WithBaseURL(to.String(percclr.NextLink)))
 25976  }
 25977  
 25978  // PeerExpressRouteCircuitConnectionListResultPage contains a page of PeerExpressRouteCircuitConnection
 25979  // values.
 25980  type PeerExpressRouteCircuitConnectionListResultPage struct {
 25981  	fn      func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)
 25982  	percclr PeerExpressRouteCircuitConnectionListResult
 25983  }
 25984  
 25985  // NextWithContext advances to the next page of values.  If there was an error making
 25986  // the request the page does not advance and the error is returned.
 25987  func (page *PeerExpressRouteCircuitConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
 25988  	if tracing.IsEnabled() {
 25989  		ctx = tracing.StartSpan(ctx, fqdn+"/PeerExpressRouteCircuitConnectionListResultPage.NextWithContext")
 25990  		defer func() {
 25991  			sc := -1
 25992  			if page.Response().Response.Response != nil {
 25993  				sc = page.Response().Response.Response.StatusCode
 25994  			}
 25995  			tracing.EndSpan(ctx, sc, err)
 25996  		}()
 25997  	}
 25998  	for {
 25999  		next, err := page.fn(ctx, page.percclr)
 26000  		if err != nil {
 26001  			return err
 26002  		}
 26003  		page.percclr = next
 26004  		if !next.hasNextLink() || !next.IsEmpty() {
 26005  			break
 26006  		}
 26007  	}
 26008  	return nil
 26009  }
 26010  
 26011  // Next advances to the next page of values.  If there was an error making
 26012  // the request the page does not advance and the error is returned.
 26013  // Deprecated: Use NextWithContext() instead.
 26014  func (page *PeerExpressRouteCircuitConnectionListResultPage) Next() error {
 26015  	return page.NextWithContext(context.Background())
 26016  }
 26017  
 26018  // NotDone returns true if the page enumeration should be started or is not yet complete.
 26019  func (page PeerExpressRouteCircuitConnectionListResultPage) NotDone() bool {
 26020  	return !page.percclr.IsEmpty()
 26021  }
 26022  
 26023  // Response returns the raw server response from the last page request.
 26024  func (page PeerExpressRouteCircuitConnectionListResultPage) Response() PeerExpressRouteCircuitConnectionListResult {
 26025  	return page.percclr
 26026  }
 26027  
 26028  // Values returns the slice of values for the current page or nil if there are no values.
 26029  func (page PeerExpressRouteCircuitConnectionListResultPage) Values() []PeerExpressRouteCircuitConnection {
 26030  	if page.percclr.IsEmpty() {
 26031  		return nil
 26032  	}
 26033  	return *page.percclr.Value
 26034  }
 26035  
 26036  // Creates a new instance of the PeerExpressRouteCircuitConnectionListResultPage type.
 26037  func NewPeerExpressRouteCircuitConnectionListResultPage(cur PeerExpressRouteCircuitConnectionListResult, getNextPage func(context.Context, PeerExpressRouteCircuitConnectionListResult) (PeerExpressRouteCircuitConnectionListResult, error)) PeerExpressRouteCircuitConnectionListResultPage {
 26038  	return PeerExpressRouteCircuitConnectionListResultPage{
 26039  		fn:      getNextPage,
 26040  		percclr: cur,
 26041  	}
 26042  }
 26043  
 26044  // PeerExpressRouteCircuitConnectionPropertiesFormat properties of the peer express route circuit
 26045  // connection.
 26046  type PeerExpressRouteCircuitConnectionPropertiesFormat struct {
 26047  	// ExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the circuit.
 26048  	ExpressRouteCircuitPeering *SubResource `json:"expressRouteCircuitPeering,omitempty"`
 26049  	// PeerExpressRouteCircuitPeering - Reference to Express Route Circuit Private Peering Resource of the peered circuit.
 26050  	PeerExpressRouteCircuitPeering *SubResource `json:"peerExpressRouteCircuitPeering,omitempty"`
 26051  	// AddressPrefix - /29 IP address space to carve out Customer addresses for tunnels.
 26052  	AddressPrefix *string `json:"addressPrefix,omitempty"`
 26053  	// CircuitConnectionStatus - Express Route Circuit connection state. Possible values include: 'Connected', 'Connecting', 'Disconnected'
 26054  	CircuitConnectionStatus CircuitConnectionStatus `json:"circuitConnectionStatus,omitempty"`
 26055  	// ConnectionName - The name of the express route circuit connection resource.
 26056  	ConnectionName *string `json:"connectionName,omitempty"`
 26057  	// AuthResourceGUID - The resource guid of the authorization used for the express route circuit connection.
 26058  	AuthResourceGUID *string `json:"authResourceGuid,omitempty"`
 26059  	// ProvisioningState - READ-ONLY; The provisioning state of the peer express route circuit connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 26060  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 26061  }
 26062  
 26063  // MarshalJSON is the custom marshaler for PeerExpressRouteCircuitConnectionPropertiesFormat.
 26064  func (perccpf PeerExpressRouteCircuitConnectionPropertiesFormat) MarshalJSON() ([]byte, error) {
 26065  	objectMap := make(map[string]interface{})
 26066  	if perccpf.ExpressRouteCircuitPeering != nil {
 26067  		objectMap["expressRouteCircuitPeering"] = perccpf.ExpressRouteCircuitPeering
 26068  	}
 26069  	if perccpf.PeerExpressRouteCircuitPeering != nil {
 26070  		objectMap["peerExpressRouteCircuitPeering"] = perccpf.PeerExpressRouteCircuitPeering
 26071  	}
 26072  	if perccpf.AddressPrefix != nil {
 26073  		objectMap["addressPrefix"] = perccpf.AddressPrefix
 26074  	}
 26075  	if perccpf.CircuitConnectionStatus != "" {
 26076  		objectMap["circuitConnectionStatus"] = perccpf.CircuitConnectionStatus
 26077  	}
 26078  	if perccpf.ConnectionName != nil {
 26079  		objectMap["connectionName"] = perccpf.ConnectionName
 26080  	}
 26081  	if perccpf.AuthResourceGUID != nil {
 26082  		objectMap["authResourceGuid"] = perccpf.AuthResourceGUID
 26083  	}
 26084  	return json.Marshal(objectMap)
 26085  }
 26086  
 26087  // PolicySettings defines contents of a web application firewall global configuration.
 26088  type PolicySettings struct {
 26089  	// State - The state of the policy. Possible values include: 'WebApplicationFirewallEnabledStateDisabled', 'WebApplicationFirewallEnabledStateEnabled'
 26090  	State WebApplicationFirewallEnabledState `json:"state,omitempty"`
 26091  	// Mode - The mode of the policy. Possible values include: 'WebApplicationFirewallModePrevention', 'WebApplicationFirewallModeDetection'
 26092  	Mode WebApplicationFirewallMode `json:"mode,omitempty"`
 26093  	// RequestBodyCheck - Whether to allow WAF to check request Body.
 26094  	RequestBodyCheck *bool `json:"requestBodyCheck,omitempty"`
 26095  	// MaxRequestBodySizeInKb - Maximum request body size in Kb for WAF.
 26096  	MaxRequestBodySizeInKb *int32 `json:"maxRequestBodySizeInKb,omitempty"`
 26097  	// FileUploadLimitInMb - Maximum file upload size in Mb for WAF.
 26098  	FileUploadLimitInMb *int32 `json:"fileUploadLimitInMb,omitempty"`
 26099  }
 26100  
 26101  // PrepareNetworkPoliciesRequest details of PrepareNetworkPolicies for Subnet.
 26102  type PrepareNetworkPoliciesRequest struct {
 26103  	// ServiceName - The name of the service for which subnet is being prepared for.
 26104  	ServiceName *string `json:"serviceName,omitempty"`
 26105  	// NetworkIntentPolicyConfigurations - A list of NetworkIntentPolicyConfiguration.
 26106  	NetworkIntentPolicyConfigurations *[]IntentPolicyConfiguration `json:"networkIntentPolicyConfigurations,omitempty"`
 26107  }
 26108  
 26109  // PrivateDNSZoneConfig privateDnsZoneConfig resource.
 26110  type PrivateDNSZoneConfig struct {
 26111  	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
 26112  	Name *string `json:"name,omitempty"`
 26113  	// PrivateDNSZonePropertiesFormat - Properties of the private dns zone configuration.
 26114  	*PrivateDNSZonePropertiesFormat `json:"properties,omitempty"`
 26115  }
 26116  
 26117  // MarshalJSON is the custom marshaler for PrivateDNSZoneConfig.
 26118  func (pdzc PrivateDNSZoneConfig) MarshalJSON() ([]byte, error) {
 26119  	objectMap := make(map[string]interface{})
 26120  	if pdzc.Name != nil {
 26121  		objectMap["name"] = pdzc.Name
 26122  	}
 26123  	if pdzc.PrivateDNSZonePropertiesFormat != nil {
 26124  		objectMap["properties"] = pdzc.PrivateDNSZonePropertiesFormat
 26125  	}
 26126  	return json.Marshal(objectMap)
 26127  }
 26128  
 26129  // UnmarshalJSON is the custom unmarshaler for PrivateDNSZoneConfig struct.
 26130  func (pdzc *PrivateDNSZoneConfig) UnmarshalJSON(body []byte) error {
 26131  	var m map[string]*json.RawMessage
 26132  	err := json.Unmarshal(body, &m)
 26133  	if err != nil {
 26134  		return err
 26135  	}
 26136  	for k, v := range m {
 26137  		switch k {
 26138  		case "name":
 26139  			if v != nil {
 26140  				var name string
 26141  				err = json.Unmarshal(*v, &name)
 26142  				if err != nil {
 26143  					return err
 26144  				}
 26145  				pdzc.Name = &name
 26146  			}
 26147  		case "properties":
 26148  			if v != nil {
 26149  				var privateDNSZonePropertiesFormat PrivateDNSZonePropertiesFormat
 26150  				err = json.Unmarshal(*v, &privateDNSZonePropertiesFormat)
 26151  				if err != nil {
 26152  					return err
 26153  				}
 26154  				pdzc.PrivateDNSZonePropertiesFormat = &privateDNSZonePropertiesFormat
 26155  			}
 26156  		}
 26157  	}
 26158  
 26159  	return nil
 26160  }
 26161  
 26162  // PrivateDNSZoneGroup private dns zone group resource.
 26163  type PrivateDNSZoneGroup struct {
 26164  	autorest.Response `json:"-"`
 26165  	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
 26166  	Name *string `json:"name,omitempty"`
 26167  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 26168  	Etag *string `json:"etag,omitempty"`
 26169  	// PrivateDNSZoneGroupPropertiesFormat - Properties of the private dns zone group.
 26170  	*PrivateDNSZoneGroupPropertiesFormat `json:"properties,omitempty"`
 26171  	// ID - Resource ID.
 26172  	ID *string `json:"id,omitempty"`
 26173  }
 26174  
 26175  // MarshalJSON is the custom marshaler for PrivateDNSZoneGroup.
 26176  func (pdzg PrivateDNSZoneGroup) MarshalJSON() ([]byte, error) {
 26177  	objectMap := make(map[string]interface{})
 26178  	if pdzg.Name != nil {
 26179  		objectMap["name"] = pdzg.Name
 26180  	}
 26181  	if pdzg.PrivateDNSZoneGroupPropertiesFormat != nil {
 26182  		objectMap["properties"] = pdzg.PrivateDNSZoneGroupPropertiesFormat
 26183  	}
 26184  	if pdzg.ID != nil {
 26185  		objectMap["id"] = pdzg.ID
 26186  	}
 26187  	return json.Marshal(objectMap)
 26188  }
 26189  
 26190  // UnmarshalJSON is the custom unmarshaler for PrivateDNSZoneGroup struct.
 26191  func (pdzg *PrivateDNSZoneGroup) UnmarshalJSON(body []byte) error {
 26192  	var m map[string]*json.RawMessage
 26193  	err := json.Unmarshal(body, &m)
 26194  	if err != nil {
 26195  		return err
 26196  	}
 26197  	for k, v := range m {
 26198  		switch k {
 26199  		case "name":
 26200  			if v != nil {
 26201  				var name string
 26202  				err = json.Unmarshal(*v, &name)
 26203  				if err != nil {
 26204  					return err
 26205  				}
 26206  				pdzg.Name = &name
 26207  			}
 26208  		case "etag":
 26209  			if v != nil {
 26210  				var etag string
 26211  				err = json.Unmarshal(*v, &etag)
 26212  				if err != nil {
 26213  					return err
 26214  				}
 26215  				pdzg.Etag = &etag
 26216  			}
 26217  		case "properties":
 26218  			if v != nil {
 26219  				var privateDNSZoneGroupPropertiesFormat PrivateDNSZoneGroupPropertiesFormat
 26220  				err = json.Unmarshal(*v, &privateDNSZoneGroupPropertiesFormat)
 26221  				if err != nil {
 26222  					return err
 26223  				}
 26224  				pdzg.PrivateDNSZoneGroupPropertiesFormat = &privateDNSZoneGroupPropertiesFormat
 26225  			}
 26226  		case "id":
 26227  			if v != nil {
 26228  				var ID string
 26229  				err = json.Unmarshal(*v, &ID)
 26230  				if err != nil {
 26231  					return err
 26232  				}
 26233  				pdzg.ID = &ID
 26234  			}
 26235  		}
 26236  	}
 26237  
 26238  	return nil
 26239  }
 26240  
 26241  // PrivateDNSZoneGroupListResult response for the ListPrivateDnsZoneGroups API service call.
 26242  type PrivateDNSZoneGroupListResult struct {
 26243  	autorest.Response `json:"-"`
 26244  	// Value - A list of private dns zone group resources in a private endpoint.
 26245  	Value *[]PrivateDNSZoneGroup `json:"value,omitempty"`
 26246  	// NextLink - READ-ONLY; The URL to get the next set of results.
 26247  	NextLink *string `json:"nextLink,omitempty"`
 26248  }
 26249  
 26250  // MarshalJSON is the custom marshaler for PrivateDNSZoneGroupListResult.
 26251  func (pdzglr PrivateDNSZoneGroupListResult) MarshalJSON() ([]byte, error) {
 26252  	objectMap := make(map[string]interface{})
 26253  	if pdzglr.Value != nil {
 26254  		objectMap["value"] = pdzglr.Value
 26255  	}
 26256  	return json.Marshal(objectMap)
 26257  }
 26258  
 26259  // PrivateDNSZoneGroupListResultIterator provides access to a complete listing of PrivateDNSZoneGroup
 26260  // values.
 26261  type PrivateDNSZoneGroupListResultIterator struct {
 26262  	i    int
 26263  	page PrivateDNSZoneGroupListResultPage
 26264  }
 26265  
 26266  // NextWithContext advances to the next value.  If there was an error making
 26267  // the request the iterator does not advance and the error is returned.
 26268  func (iter *PrivateDNSZoneGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
 26269  	if tracing.IsEnabled() {
 26270  		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateDNSZoneGroupListResultIterator.NextWithContext")
 26271  		defer func() {
 26272  			sc := -1
 26273  			if iter.Response().Response.Response != nil {
 26274  				sc = iter.Response().Response.Response.StatusCode
 26275  			}
 26276  			tracing.EndSpan(ctx, sc, err)
 26277  		}()
 26278  	}
 26279  	iter.i++
 26280  	if iter.i < len(iter.page.Values()) {
 26281  		return nil
 26282  	}
 26283  	err = iter.page.NextWithContext(ctx)
 26284  	if err != nil {
 26285  		iter.i--
 26286  		return err
 26287  	}
 26288  	iter.i = 0
 26289  	return nil
 26290  }
 26291  
 26292  // Next advances to the next value.  If there was an error making
 26293  // the request the iterator does not advance and the error is returned.
 26294  // Deprecated: Use NextWithContext() instead.
 26295  func (iter *PrivateDNSZoneGroupListResultIterator) Next() error {
 26296  	return iter.NextWithContext(context.Background())
 26297  }
 26298  
 26299  // NotDone returns true if the enumeration should be started or is not yet complete.
 26300  func (iter PrivateDNSZoneGroupListResultIterator) NotDone() bool {
 26301  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 26302  }
 26303  
 26304  // Response returns the raw server response from the last page request.
 26305  func (iter PrivateDNSZoneGroupListResultIterator) Response() PrivateDNSZoneGroupListResult {
 26306  	return iter.page.Response()
 26307  }
 26308  
 26309  // Value returns the current value or a zero-initialized value if the
 26310  // iterator has advanced beyond the end of the collection.
 26311  func (iter PrivateDNSZoneGroupListResultIterator) Value() PrivateDNSZoneGroup {
 26312  	if !iter.page.NotDone() {
 26313  		return PrivateDNSZoneGroup{}
 26314  	}
 26315  	return iter.page.Values()[iter.i]
 26316  }
 26317  
 26318  // Creates a new instance of the PrivateDNSZoneGroupListResultIterator type.
 26319  func NewPrivateDNSZoneGroupListResultIterator(page PrivateDNSZoneGroupListResultPage) PrivateDNSZoneGroupListResultIterator {
 26320  	return PrivateDNSZoneGroupListResultIterator{page: page}
 26321  }
 26322  
 26323  // IsEmpty returns true if the ListResult contains no values.
 26324  func (pdzglr PrivateDNSZoneGroupListResult) IsEmpty() bool {
 26325  	return pdzglr.Value == nil || len(*pdzglr.Value) == 0
 26326  }
 26327  
 26328  // hasNextLink returns true if the NextLink is not empty.
 26329  func (pdzglr PrivateDNSZoneGroupListResult) hasNextLink() bool {
 26330  	return pdzglr.NextLink != nil && len(*pdzglr.NextLink) != 0
 26331  }
 26332  
 26333  // privateDNSZoneGroupListResultPreparer prepares a request to retrieve the next set of results.
 26334  // It returns nil if no more results exist.
 26335  func (pdzglr PrivateDNSZoneGroupListResult) privateDNSZoneGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
 26336  	if !pdzglr.hasNextLink() {
 26337  		return nil, nil
 26338  	}
 26339  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 26340  		autorest.AsJSON(),
 26341  		autorest.AsGet(),
 26342  		autorest.WithBaseURL(to.String(pdzglr.NextLink)))
 26343  }
 26344  
 26345  // PrivateDNSZoneGroupListResultPage contains a page of PrivateDNSZoneGroup values.
 26346  type PrivateDNSZoneGroupListResultPage struct {
 26347  	fn     func(context.Context, PrivateDNSZoneGroupListResult) (PrivateDNSZoneGroupListResult, error)
 26348  	pdzglr PrivateDNSZoneGroupListResult
 26349  }
 26350  
 26351  // NextWithContext advances to the next page of values.  If there was an error making
 26352  // the request the page does not advance and the error is returned.
 26353  func (page *PrivateDNSZoneGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
 26354  	if tracing.IsEnabled() {
 26355  		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateDNSZoneGroupListResultPage.NextWithContext")
 26356  		defer func() {
 26357  			sc := -1
 26358  			if page.Response().Response.Response != nil {
 26359  				sc = page.Response().Response.Response.StatusCode
 26360  			}
 26361  			tracing.EndSpan(ctx, sc, err)
 26362  		}()
 26363  	}
 26364  	for {
 26365  		next, err := page.fn(ctx, page.pdzglr)
 26366  		if err != nil {
 26367  			return err
 26368  		}
 26369  		page.pdzglr = next
 26370  		if !next.hasNextLink() || !next.IsEmpty() {
 26371  			break
 26372  		}
 26373  	}
 26374  	return nil
 26375  }
 26376  
 26377  // Next advances to the next page of values.  If there was an error making
 26378  // the request the page does not advance and the error is returned.
 26379  // Deprecated: Use NextWithContext() instead.
 26380  func (page *PrivateDNSZoneGroupListResultPage) Next() error {
 26381  	return page.NextWithContext(context.Background())
 26382  }
 26383  
 26384  // NotDone returns true if the page enumeration should be started or is not yet complete.
 26385  func (page PrivateDNSZoneGroupListResultPage) NotDone() bool {
 26386  	return !page.pdzglr.IsEmpty()
 26387  }
 26388  
 26389  // Response returns the raw server response from the last page request.
 26390  func (page PrivateDNSZoneGroupListResultPage) Response() PrivateDNSZoneGroupListResult {
 26391  	return page.pdzglr
 26392  }
 26393  
 26394  // Values returns the slice of values for the current page or nil if there are no values.
 26395  func (page PrivateDNSZoneGroupListResultPage) Values() []PrivateDNSZoneGroup {
 26396  	if page.pdzglr.IsEmpty() {
 26397  		return nil
 26398  	}
 26399  	return *page.pdzglr.Value
 26400  }
 26401  
 26402  // Creates a new instance of the PrivateDNSZoneGroupListResultPage type.
 26403  func NewPrivateDNSZoneGroupListResultPage(cur PrivateDNSZoneGroupListResult, getNextPage func(context.Context, PrivateDNSZoneGroupListResult) (PrivateDNSZoneGroupListResult, error)) PrivateDNSZoneGroupListResultPage {
 26404  	return PrivateDNSZoneGroupListResultPage{
 26405  		fn:     getNextPage,
 26406  		pdzglr: cur,
 26407  	}
 26408  }
 26409  
 26410  // PrivateDNSZoneGroupPropertiesFormat properties of the private dns zone group.
 26411  type PrivateDNSZoneGroupPropertiesFormat struct {
 26412  	// ProvisioningState - READ-ONLY; The provisioning state of the private dns zone group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 26413  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 26414  	// PrivateDNSZoneConfigs - A collection of private dns zone configurations of the private dns zone group.
 26415  	PrivateDNSZoneConfigs *[]PrivateDNSZoneConfig `json:"privateDnsZoneConfigs,omitempty"`
 26416  }
 26417  
 26418  // MarshalJSON is the custom marshaler for PrivateDNSZoneGroupPropertiesFormat.
 26419  func (pdzgpf PrivateDNSZoneGroupPropertiesFormat) MarshalJSON() ([]byte, error) {
 26420  	objectMap := make(map[string]interface{})
 26421  	if pdzgpf.PrivateDNSZoneConfigs != nil {
 26422  		objectMap["privateDnsZoneConfigs"] = pdzgpf.PrivateDNSZoneConfigs
 26423  	}
 26424  	return json.Marshal(objectMap)
 26425  }
 26426  
 26427  // PrivateDNSZoneGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 26428  // long-running operation.
 26429  type PrivateDNSZoneGroupsCreateOrUpdateFuture struct {
 26430  	azure.FutureAPI
 26431  	// Result returns the result of the asynchronous operation.
 26432  	// If the operation has not completed it will return an error.
 26433  	Result func(PrivateDNSZoneGroupsClient) (PrivateDNSZoneGroup, error)
 26434  }
 26435  
 26436  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 26437  func (future *PrivateDNSZoneGroupsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 26438  	var azFuture azure.Future
 26439  	if err := json.Unmarshal(body, &azFuture); err != nil {
 26440  		return err
 26441  	}
 26442  	future.FutureAPI = &azFuture
 26443  	future.Result = future.result
 26444  	return nil
 26445  }
 26446  
 26447  // result is the default implementation for PrivateDNSZoneGroupsCreateOrUpdateFuture.Result.
 26448  func (future *PrivateDNSZoneGroupsCreateOrUpdateFuture) result(client PrivateDNSZoneGroupsClient) (pdzg PrivateDNSZoneGroup, err error) {
 26449  	var done bool
 26450  	done, err = future.DoneWithContext(context.Background(), client)
 26451  	if err != nil {
 26452  		err = autorest.NewErrorWithError(err, "network.PrivateDNSZoneGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 26453  		return
 26454  	}
 26455  	if !done {
 26456  		pdzg.Response.Response = future.Response()
 26457  		err = azure.NewAsyncOpIncompleteError("network.PrivateDNSZoneGroupsCreateOrUpdateFuture")
 26458  		return
 26459  	}
 26460  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 26461  	if pdzg.Response.Response, err = future.GetResult(sender); err == nil && pdzg.Response.Response.StatusCode != http.StatusNoContent {
 26462  		pdzg, err = client.CreateOrUpdateResponder(pdzg.Response.Response)
 26463  		if err != nil {
 26464  			err = autorest.NewErrorWithError(err, "network.PrivateDNSZoneGroupsCreateOrUpdateFuture", "Result", pdzg.Response.Response, "Failure responding to request")
 26465  		}
 26466  	}
 26467  	return
 26468  }
 26469  
 26470  // PrivateDNSZoneGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a
 26471  // long-running operation.
 26472  type PrivateDNSZoneGroupsDeleteFuture struct {
 26473  	azure.FutureAPI
 26474  	// Result returns the result of the asynchronous operation.
 26475  	// If the operation has not completed it will return an error.
 26476  	Result func(PrivateDNSZoneGroupsClient) (autorest.Response, error)
 26477  }
 26478  
 26479  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 26480  func (future *PrivateDNSZoneGroupsDeleteFuture) UnmarshalJSON(body []byte) error {
 26481  	var azFuture azure.Future
 26482  	if err := json.Unmarshal(body, &azFuture); err != nil {
 26483  		return err
 26484  	}
 26485  	future.FutureAPI = &azFuture
 26486  	future.Result = future.result
 26487  	return nil
 26488  }
 26489  
 26490  // result is the default implementation for PrivateDNSZoneGroupsDeleteFuture.Result.
 26491  func (future *PrivateDNSZoneGroupsDeleteFuture) result(client PrivateDNSZoneGroupsClient) (ar autorest.Response, err error) {
 26492  	var done bool
 26493  	done, err = future.DoneWithContext(context.Background(), client)
 26494  	if err != nil {
 26495  		err = autorest.NewErrorWithError(err, "network.PrivateDNSZoneGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
 26496  		return
 26497  	}
 26498  	if !done {
 26499  		ar.Response = future.Response()
 26500  		err = azure.NewAsyncOpIncompleteError("network.PrivateDNSZoneGroupsDeleteFuture")
 26501  		return
 26502  	}
 26503  	ar.Response = future.Response()
 26504  	return
 26505  }
 26506  
 26507  // PrivateDNSZonePropertiesFormat properties of the private dns zone configuration resource.
 26508  type PrivateDNSZonePropertiesFormat struct {
 26509  	// PrivateDNSZoneID - The resource id of the private dns zone.
 26510  	PrivateDNSZoneID *string `json:"privateDnsZoneId,omitempty"`
 26511  	// RecordSets - READ-ONLY; A collection of information regarding a recordSet, holding information to identify private resources.
 26512  	RecordSets *[]RecordSet `json:"recordSets,omitempty"`
 26513  }
 26514  
 26515  // MarshalJSON is the custom marshaler for PrivateDNSZonePropertiesFormat.
 26516  func (pdzpf PrivateDNSZonePropertiesFormat) MarshalJSON() ([]byte, error) {
 26517  	objectMap := make(map[string]interface{})
 26518  	if pdzpf.PrivateDNSZoneID != nil {
 26519  		objectMap["privateDnsZoneId"] = pdzpf.PrivateDNSZoneID
 26520  	}
 26521  	return json.Marshal(objectMap)
 26522  }
 26523  
 26524  // PrivateEndpoint private endpoint resource.
 26525  type PrivateEndpoint struct {
 26526  	autorest.Response `json:"-"`
 26527  	// PrivateEndpointProperties - Properties of the private endpoint.
 26528  	*PrivateEndpointProperties `json:"properties,omitempty"`
 26529  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 26530  	Etag *string `json:"etag,omitempty"`
 26531  	// ID - Resource ID.
 26532  	ID *string `json:"id,omitempty"`
 26533  	// Name - READ-ONLY; Resource name.
 26534  	Name *string `json:"name,omitempty"`
 26535  	// Type - READ-ONLY; Resource type.
 26536  	Type *string `json:"type,omitempty"`
 26537  	// Location - Resource location.
 26538  	Location *string `json:"location,omitempty"`
 26539  	// Tags - Resource tags.
 26540  	Tags map[string]*string `json:"tags"`
 26541  }
 26542  
 26543  // MarshalJSON is the custom marshaler for PrivateEndpoint.
 26544  func (peVar PrivateEndpoint) MarshalJSON() ([]byte, error) {
 26545  	objectMap := make(map[string]interface{})
 26546  	if peVar.PrivateEndpointProperties != nil {
 26547  		objectMap["properties"] = peVar.PrivateEndpointProperties
 26548  	}
 26549  	if peVar.ID != nil {
 26550  		objectMap["id"] = peVar.ID
 26551  	}
 26552  	if peVar.Location != nil {
 26553  		objectMap["location"] = peVar.Location
 26554  	}
 26555  	if peVar.Tags != nil {
 26556  		objectMap["tags"] = peVar.Tags
 26557  	}
 26558  	return json.Marshal(objectMap)
 26559  }
 26560  
 26561  // UnmarshalJSON is the custom unmarshaler for PrivateEndpoint struct.
 26562  func (peVar *PrivateEndpoint) UnmarshalJSON(body []byte) error {
 26563  	var m map[string]*json.RawMessage
 26564  	err := json.Unmarshal(body, &m)
 26565  	if err != nil {
 26566  		return err
 26567  	}
 26568  	for k, v := range m {
 26569  		switch k {
 26570  		case "properties":
 26571  			if v != nil {
 26572  				var privateEndpointProperties PrivateEndpointProperties
 26573  				err = json.Unmarshal(*v, &privateEndpointProperties)
 26574  				if err != nil {
 26575  					return err
 26576  				}
 26577  				peVar.PrivateEndpointProperties = &privateEndpointProperties
 26578  			}
 26579  		case "etag":
 26580  			if v != nil {
 26581  				var etag string
 26582  				err = json.Unmarshal(*v, &etag)
 26583  				if err != nil {
 26584  					return err
 26585  				}
 26586  				peVar.Etag = &etag
 26587  			}
 26588  		case "id":
 26589  			if v != nil {
 26590  				var ID string
 26591  				err = json.Unmarshal(*v, &ID)
 26592  				if err != nil {
 26593  					return err
 26594  				}
 26595  				peVar.ID = &ID
 26596  			}
 26597  		case "name":
 26598  			if v != nil {
 26599  				var name string
 26600  				err = json.Unmarshal(*v, &name)
 26601  				if err != nil {
 26602  					return err
 26603  				}
 26604  				peVar.Name = &name
 26605  			}
 26606  		case "type":
 26607  			if v != nil {
 26608  				var typeVar string
 26609  				err = json.Unmarshal(*v, &typeVar)
 26610  				if err != nil {
 26611  					return err
 26612  				}
 26613  				peVar.Type = &typeVar
 26614  			}
 26615  		case "location":
 26616  			if v != nil {
 26617  				var location string
 26618  				err = json.Unmarshal(*v, &location)
 26619  				if err != nil {
 26620  					return err
 26621  				}
 26622  				peVar.Location = &location
 26623  			}
 26624  		case "tags":
 26625  			if v != nil {
 26626  				var tags map[string]*string
 26627  				err = json.Unmarshal(*v, &tags)
 26628  				if err != nil {
 26629  					return err
 26630  				}
 26631  				peVar.Tags = tags
 26632  			}
 26633  		}
 26634  	}
 26635  
 26636  	return nil
 26637  }
 26638  
 26639  // PrivateEndpointConnection privateEndpointConnection resource.
 26640  type PrivateEndpointConnection struct {
 26641  	autorest.Response `json:"-"`
 26642  	// PrivateEndpointConnectionProperties - Properties of the private end point connection.
 26643  	*PrivateEndpointConnectionProperties `json:"properties,omitempty"`
 26644  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 26645  	Name *string `json:"name,omitempty"`
 26646  	// Type - READ-ONLY; The resource type.
 26647  	Type *string `json:"type,omitempty"`
 26648  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 26649  	Etag *string `json:"etag,omitempty"`
 26650  	// ID - Resource ID.
 26651  	ID *string `json:"id,omitempty"`
 26652  }
 26653  
 26654  // MarshalJSON is the custom marshaler for PrivateEndpointConnection.
 26655  func (pec PrivateEndpointConnection) MarshalJSON() ([]byte, error) {
 26656  	objectMap := make(map[string]interface{})
 26657  	if pec.PrivateEndpointConnectionProperties != nil {
 26658  		objectMap["properties"] = pec.PrivateEndpointConnectionProperties
 26659  	}
 26660  	if pec.Name != nil {
 26661  		objectMap["name"] = pec.Name
 26662  	}
 26663  	if pec.ID != nil {
 26664  		objectMap["id"] = pec.ID
 26665  	}
 26666  	return json.Marshal(objectMap)
 26667  }
 26668  
 26669  // UnmarshalJSON is the custom unmarshaler for PrivateEndpointConnection struct.
 26670  func (pec *PrivateEndpointConnection) UnmarshalJSON(body []byte) error {
 26671  	var m map[string]*json.RawMessage
 26672  	err := json.Unmarshal(body, &m)
 26673  	if err != nil {
 26674  		return err
 26675  	}
 26676  	for k, v := range m {
 26677  		switch k {
 26678  		case "properties":
 26679  			if v != nil {
 26680  				var privateEndpointConnectionProperties PrivateEndpointConnectionProperties
 26681  				err = json.Unmarshal(*v, &privateEndpointConnectionProperties)
 26682  				if err != nil {
 26683  					return err
 26684  				}
 26685  				pec.PrivateEndpointConnectionProperties = &privateEndpointConnectionProperties
 26686  			}
 26687  		case "name":
 26688  			if v != nil {
 26689  				var name string
 26690  				err = json.Unmarshal(*v, &name)
 26691  				if err != nil {
 26692  					return err
 26693  				}
 26694  				pec.Name = &name
 26695  			}
 26696  		case "type":
 26697  			if v != nil {
 26698  				var typeVar string
 26699  				err = json.Unmarshal(*v, &typeVar)
 26700  				if err != nil {
 26701  					return err
 26702  				}
 26703  				pec.Type = &typeVar
 26704  			}
 26705  		case "etag":
 26706  			if v != nil {
 26707  				var etag string
 26708  				err = json.Unmarshal(*v, &etag)
 26709  				if err != nil {
 26710  					return err
 26711  				}
 26712  				pec.Etag = &etag
 26713  			}
 26714  		case "id":
 26715  			if v != nil {
 26716  				var ID string
 26717  				err = json.Unmarshal(*v, &ID)
 26718  				if err != nil {
 26719  					return err
 26720  				}
 26721  				pec.ID = &ID
 26722  			}
 26723  		}
 26724  	}
 26725  
 26726  	return nil
 26727  }
 26728  
 26729  // PrivateEndpointConnectionListResult response for the ListPrivateEndpointConnection API service call.
 26730  type PrivateEndpointConnectionListResult struct {
 26731  	autorest.Response `json:"-"`
 26732  	// Value - A list of PrivateEndpointConnection resources for a specific private link service.
 26733  	Value *[]PrivateEndpointConnection `json:"value,omitempty"`
 26734  	// NextLink - READ-ONLY; The URL to get the next set of results.
 26735  	NextLink *string `json:"nextLink,omitempty"`
 26736  }
 26737  
 26738  // MarshalJSON is the custom marshaler for PrivateEndpointConnectionListResult.
 26739  func (peclr PrivateEndpointConnectionListResult) MarshalJSON() ([]byte, error) {
 26740  	objectMap := make(map[string]interface{})
 26741  	if peclr.Value != nil {
 26742  		objectMap["value"] = peclr.Value
 26743  	}
 26744  	return json.Marshal(objectMap)
 26745  }
 26746  
 26747  // PrivateEndpointConnectionListResultIterator provides access to a complete listing of
 26748  // PrivateEndpointConnection values.
 26749  type PrivateEndpointConnectionListResultIterator struct {
 26750  	i    int
 26751  	page PrivateEndpointConnectionListResultPage
 26752  }
 26753  
 26754  // NextWithContext advances to the next value.  If there was an error making
 26755  // the request the iterator does not advance and the error is returned.
 26756  func (iter *PrivateEndpointConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
 26757  	if tracing.IsEnabled() {
 26758  		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointConnectionListResultIterator.NextWithContext")
 26759  		defer func() {
 26760  			sc := -1
 26761  			if iter.Response().Response.Response != nil {
 26762  				sc = iter.Response().Response.Response.StatusCode
 26763  			}
 26764  			tracing.EndSpan(ctx, sc, err)
 26765  		}()
 26766  	}
 26767  	iter.i++
 26768  	if iter.i < len(iter.page.Values()) {
 26769  		return nil
 26770  	}
 26771  	err = iter.page.NextWithContext(ctx)
 26772  	if err != nil {
 26773  		iter.i--
 26774  		return err
 26775  	}
 26776  	iter.i = 0
 26777  	return nil
 26778  }
 26779  
 26780  // Next advances to the next value.  If there was an error making
 26781  // the request the iterator does not advance and the error is returned.
 26782  // Deprecated: Use NextWithContext() instead.
 26783  func (iter *PrivateEndpointConnectionListResultIterator) Next() error {
 26784  	return iter.NextWithContext(context.Background())
 26785  }
 26786  
 26787  // NotDone returns true if the enumeration should be started or is not yet complete.
 26788  func (iter PrivateEndpointConnectionListResultIterator) NotDone() bool {
 26789  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 26790  }
 26791  
 26792  // Response returns the raw server response from the last page request.
 26793  func (iter PrivateEndpointConnectionListResultIterator) Response() PrivateEndpointConnectionListResult {
 26794  	return iter.page.Response()
 26795  }
 26796  
 26797  // Value returns the current value or a zero-initialized value if the
 26798  // iterator has advanced beyond the end of the collection.
 26799  func (iter PrivateEndpointConnectionListResultIterator) Value() PrivateEndpointConnection {
 26800  	if !iter.page.NotDone() {
 26801  		return PrivateEndpointConnection{}
 26802  	}
 26803  	return iter.page.Values()[iter.i]
 26804  }
 26805  
 26806  // Creates a new instance of the PrivateEndpointConnectionListResultIterator type.
 26807  func NewPrivateEndpointConnectionListResultIterator(page PrivateEndpointConnectionListResultPage) PrivateEndpointConnectionListResultIterator {
 26808  	return PrivateEndpointConnectionListResultIterator{page: page}
 26809  }
 26810  
 26811  // IsEmpty returns true if the ListResult contains no values.
 26812  func (peclr PrivateEndpointConnectionListResult) IsEmpty() bool {
 26813  	return peclr.Value == nil || len(*peclr.Value) == 0
 26814  }
 26815  
 26816  // hasNextLink returns true if the NextLink is not empty.
 26817  func (peclr PrivateEndpointConnectionListResult) hasNextLink() bool {
 26818  	return peclr.NextLink != nil && len(*peclr.NextLink) != 0
 26819  }
 26820  
 26821  // privateEndpointConnectionListResultPreparer prepares a request to retrieve the next set of results.
 26822  // It returns nil if no more results exist.
 26823  func (peclr PrivateEndpointConnectionListResult) privateEndpointConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
 26824  	if !peclr.hasNextLink() {
 26825  		return nil, nil
 26826  	}
 26827  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 26828  		autorest.AsJSON(),
 26829  		autorest.AsGet(),
 26830  		autorest.WithBaseURL(to.String(peclr.NextLink)))
 26831  }
 26832  
 26833  // PrivateEndpointConnectionListResultPage contains a page of PrivateEndpointConnection values.
 26834  type PrivateEndpointConnectionListResultPage struct {
 26835  	fn    func(context.Context, PrivateEndpointConnectionListResult) (PrivateEndpointConnectionListResult, error)
 26836  	peclr PrivateEndpointConnectionListResult
 26837  }
 26838  
 26839  // NextWithContext advances to the next page of values.  If there was an error making
 26840  // the request the page does not advance and the error is returned.
 26841  func (page *PrivateEndpointConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
 26842  	if tracing.IsEnabled() {
 26843  		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointConnectionListResultPage.NextWithContext")
 26844  		defer func() {
 26845  			sc := -1
 26846  			if page.Response().Response.Response != nil {
 26847  				sc = page.Response().Response.Response.StatusCode
 26848  			}
 26849  			tracing.EndSpan(ctx, sc, err)
 26850  		}()
 26851  	}
 26852  	for {
 26853  		next, err := page.fn(ctx, page.peclr)
 26854  		if err != nil {
 26855  			return err
 26856  		}
 26857  		page.peclr = next
 26858  		if !next.hasNextLink() || !next.IsEmpty() {
 26859  			break
 26860  		}
 26861  	}
 26862  	return nil
 26863  }
 26864  
 26865  // Next advances to the next page of values.  If there was an error making
 26866  // the request the page does not advance and the error is returned.
 26867  // Deprecated: Use NextWithContext() instead.
 26868  func (page *PrivateEndpointConnectionListResultPage) Next() error {
 26869  	return page.NextWithContext(context.Background())
 26870  }
 26871  
 26872  // NotDone returns true if the page enumeration should be started or is not yet complete.
 26873  func (page PrivateEndpointConnectionListResultPage) NotDone() bool {
 26874  	return !page.peclr.IsEmpty()
 26875  }
 26876  
 26877  // Response returns the raw server response from the last page request.
 26878  func (page PrivateEndpointConnectionListResultPage) Response() PrivateEndpointConnectionListResult {
 26879  	return page.peclr
 26880  }
 26881  
 26882  // Values returns the slice of values for the current page or nil if there are no values.
 26883  func (page PrivateEndpointConnectionListResultPage) Values() []PrivateEndpointConnection {
 26884  	if page.peclr.IsEmpty() {
 26885  		return nil
 26886  	}
 26887  	return *page.peclr.Value
 26888  }
 26889  
 26890  // Creates a new instance of the PrivateEndpointConnectionListResultPage type.
 26891  func NewPrivateEndpointConnectionListResultPage(cur PrivateEndpointConnectionListResult, getNextPage func(context.Context, PrivateEndpointConnectionListResult) (PrivateEndpointConnectionListResult, error)) PrivateEndpointConnectionListResultPage {
 26892  	return PrivateEndpointConnectionListResultPage{
 26893  		fn:    getNextPage,
 26894  		peclr: cur,
 26895  	}
 26896  }
 26897  
 26898  // PrivateEndpointConnectionProperties properties of the PrivateEndpointConnectProperties.
 26899  type PrivateEndpointConnectionProperties struct {
 26900  	// PrivateEndpoint - READ-ONLY; The resource of private end point.
 26901  	PrivateEndpoint *PrivateEndpoint `json:"privateEndpoint,omitempty"`
 26902  	// PrivateLinkServiceConnectionState - A collection of information about the state of the connection between service consumer and provider.
 26903  	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
 26904  	// ProvisioningState - READ-ONLY; The provisioning state of the private endpoint connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 26905  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 26906  	// LinkIdentifier - READ-ONLY; The consumer link id.
 26907  	LinkIdentifier *string `json:"linkIdentifier,omitempty"`
 26908  }
 26909  
 26910  // MarshalJSON is the custom marshaler for PrivateEndpointConnectionProperties.
 26911  func (pecp PrivateEndpointConnectionProperties) MarshalJSON() ([]byte, error) {
 26912  	objectMap := make(map[string]interface{})
 26913  	if pecp.PrivateLinkServiceConnectionState != nil {
 26914  		objectMap["privateLinkServiceConnectionState"] = pecp.PrivateLinkServiceConnectionState
 26915  	}
 26916  	return json.Marshal(objectMap)
 26917  }
 26918  
 26919  // PrivateEndpointListResult response for the ListPrivateEndpoints API service call.
 26920  type PrivateEndpointListResult struct {
 26921  	autorest.Response `json:"-"`
 26922  	// Value - A list of private endpoint resources in a resource group.
 26923  	Value *[]PrivateEndpoint `json:"value,omitempty"`
 26924  	// NextLink - READ-ONLY; The URL to get the next set of results.
 26925  	NextLink *string `json:"nextLink,omitempty"`
 26926  }
 26927  
 26928  // MarshalJSON is the custom marshaler for PrivateEndpointListResult.
 26929  func (pelr PrivateEndpointListResult) MarshalJSON() ([]byte, error) {
 26930  	objectMap := make(map[string]interface{})
 26931  	if pelr.Value != nil {
 26932  		objectMap["value"] = pelr.Value
 26933  	}
 26934  	return json.Marshal(objectMap)
 26935  }
 26936  
 26937  // PrivateEndpointListResultIterator provides access to a complete listing of PrivateEndpoint values.
 26938  type PrivateEndpointListResultIterator struct {
 26939  	i    int
 26940  	page PrivateEndpointListResultPage
 26941  }
 26942  
 26943  // NextWithContext advances to the next value.  If there was an error making
 26944  // the request the iterator does not advance and the error is returned.
 26945  func (iter *PrivateEndpointListResultIterator) NextWithContext(ctx context.Context) (err error) {
 26946  	if tracing.IsEnabled() {
 26947  		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultIterator.NextWithContext")
 26948  		defer func() {
 26949  			sc := -1
 26950  			if iter.Response().Response.Response != nil {
 26951  				sc = iter.Response().Response.Response.StatusCode
 26952  			}
 26953  			tracing.EndSpan(ctx, sc, err)
 26954  		}()
 26955  	}
 26956  	iter.i++
 26957  	if iter.i < len(iter.page.Values()) {
 26958  		return nil
 26959  	}
 26960  	err = iter.page.NextWithContext(ctx)
 26961  	if err != nil {
 26962  		iter.i--
 26963  		return err
 26964  	}
 26965  	iter.i = 0
 26966  	return nil
 26967  }
 26968  
 26969  // Next advances to the next value.  If there was an error making
 26970  // the request the iterator does not advance and the error is returned.
 26971  // Deprecated: Use NextWithContext() instead.
 26972  func (iter *PrivateEndpointListResultIterator) Next() error {
 26973  	return iter.NextWithContext(context.Background())
 26974  }
 26975  
 26976  // NotDone returns true if the enumeration should be started or is not yet complete.
 26977  func (iter PrivateEndpointListResultIterator) NotDone() bool {
 26978  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 26979  }
 26980  
 26981  // Response returns the raw server response from the last page request.
 26982  func (iter PrivateEndpointListResultIterator) Response() PrivateEndpointListResult {
 26983  	return iter.page.Response()
 26984  }
 26985  
 26986  // Value returns the current value or a zero-initialized value if the
 26987  // iterator has advanced beyond the end of the collection.
 26988  func (iter PrivateEndpointListResultIterator) Value() PrivateEndpoint {
 26989  	if !iter.page.NotDone() {
 26990  		return PrivateEndpoint{}
 26991  	}
 26992  	return iter.page.Values()[iter.i]
 26993  }
 26994  
 26995  // Creates a new instance of the PrivateEndpointListResultIterator type.
 26996  func NewPrivateEndpointListResultIterator(page PrivateEndpointListResultPage) PrivateEndpointListResultIterator {
 26997  	return PrivateEndpointListResultIterator{page: page}
 26998  }
 26999  
 27000  // IsEmpty returns true if the ListResult contains no values.
 27001  func (pelr PrivateEndpointListResult) IsEmpty() bool {
 27002  	return pelr.Value == nil || len(*pelr.Value) == 0
 27003  }
 27004  
 27005  // hasNextLink returns true if the NextLink is not empty.
 27006  func (pelr PrivateEndpointListResult) hasNextLink() bool {
 27007  	return pelr.NextLink != nil && len(*pelr.NextLink) != 0
 27008  }
 27009  
 27010  // privateEndpointListResultPreparer prepares a request to retrieve the next set of results.
 27011  // It returns nil if no more results exist.
 27012  func (pelr PrivateEndpointListResult) privateEndpointListResultPreparer(ctx context.Context) (*http.Request, error) {
 27013  	if !pelr.hasNextLink() {
 27014  		return nil, nil
 27015  	}
 27016  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 27017  		autorest.AsJSON(),
 27018  		autorest.AsGet(),
 27019  		autorest.WithBaseURL(to.String(pelr.NextLink)))
 27020  }
 27021  
 27022  // PrivateEndpointListResultPage contains a page of PrivateEndpoint values.
 27023  type PrivateEndpointListResultPage struct {
 27024  	fn   func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)
 27025  	pelr PrivateEndpointListResult
 27026  }
 27027  
 27028  // NextWithContext advances to the next page of values.  If there was an error making
 27029  // the request the page does not advance and the error is returned.
 27030  func (page *PrivateEndpointListResultPage) NextWithContext(ctx context.Context) (err error) {
 27031  	if tracing.IsEnabled() {
 27032  		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateEndpointListResultPage.NextWithContext")
 27033  		defer func() {
 27034  			sc := -1
 27035  			if page.Response().Response.Response != nil {
 27036  				sc = page.Response().Response.Response.StatusCode
 27037  			}
 27038  			tracing.EndSpan(ctx, sc, err)
 27039  		}()
 27040  	}
 27041  	for {
 27042  		next, err := page.fn(ctx, page.pelr)
 27043  		if err != nil {
 27044  			return err
 27045  		}
 27046  		page.pelr = next
 27047  		if !next.hasNextLink() || !next.IsEmpty() {
 27048  			break
 27049  		}
 27050  	}
 27051  	return nil
 27052  }
 27053  
 27054  // Next advances to the next page of values.  If there was an error making
 27055  // the request the page does not advance and the error is returned.
 27056  // Deprecated: Use NextWithContext() instead.
 27057  func (page *PrivateEndpointListResultPage) Next() error {
 27058  	return page.NextWithContext(context.Background())
 27059  }
 27060  
 27061  // NotDone returns true if the page enumeration should be started or is not yet complete.
 27062  func (page PrivateEndpointListResultPage) NotDone() bool {
 27063  	return !page.pelr.IsEmpty()
 27064  }
 27065  
 27066  // Response returns the raw server response from the last page request.
 27067  func (page PrivateEndpointListResultPage) Response() PrivateEndpointListResult {
 27068  	return page.pelr
 27069  }
 27070  
 27071  // Values returns the slice of values for the current page or nil if there are no values.
 27072  func (page PrivateEndpointListResultPage) Values() []PrivateEndpoint {
 27073  	if page.pelr.IsEmpty() {
 27074  		return nil
 27075  	}
 27076  	return *page.pelr.Value
 27077  }
 27078  
 27079  // Creates a new instance of the PrivateEndpointListResultPage type.
 27080  func NewPrivateEndpointListResultPage(cur PrivateEndpointListResult, getNextPage func(context.Context, PrivateEndpointListResult) (PrivateEndpointListResult, error)) PrivateEndpointListResultPage {
 27081  	return PrivateEndpointListResultPage{
 27082  		fn:   getNextPage,
 27083  		pelr: cur,
 27084  	}
 27085  }
 27086  
 27087  // PrivateEndpointProperties properties of the private endpoint.
 27088  type PrivateEndpointProperties struct {
 27089  	// Subnet - The ID of the subnet from which the private IP will be allocated.
 27090  	Subnet *Subnet `json:"subnet,omitempty"`
 27091  	// NetworkInterfaces - READ-ONLY; An array of references to the network interfaces created for this private endpoint.
 27092  	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
 27093  	// ProvisioningState - READ-ONLY; The provisioning state of the private endpoint resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 27094  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 27095  	// PrivateLinkServiceConnections - A grouping of information about the connection to the remote resource.
 27096  	PrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"privateLinkServiceConnections,omitempty"`
 27097  	// ManualPrivateLinkServiceConnections - A grouping of information about the connection to the remote resource. Used when the network admin does not have access to approve connections to the remote resource.
 27098  	ManualPrivateLinkServiceConnections *[]PrivateLinkServiceConnection `json:"manualPrivateLinkServiceConnections,omitempty"`
 27099  	// CustomDNSConfigs - An array of custom dns configurations.
 27100  	CustomDNSConfigs *[]CustomDNSConfigPropertiesFormat `json:"customDnsConfigs,omitempty"`
 27101  }
 27102  
 27103  // MarshalJSON is the custom marshaler for PrivateEndpointProperties.
 27104  func (pep PrivateEndpointProperties) MarshalJSON() ([]byte, error) {
 27105  	objectMap := make(map[string]interface{})
 27106  	if pep.Subnet != nil {
 27107  		objectMap["subnet"] = pep.Subnet
 27108  	}
 27109  	if pep.PrivateLinkServiceConnections != nil {
 27110  		objectMap["privateLinkServiceConnections"] = pep.PrivateLinkServiceConnections
 27111  	}
 27112  	if pep.ManualPrivateLinkServiceConnections != nil {
 27113  		objectMap["manualPrivateLinkServiceConnections"] = pep.ManualPrivateLinkServiceConnections
 27114  	}
 27115  	if pep.CustomDNSConfigs != nil {
 27116  		objectMap["customDnsConfigs"] = pep.CustomDNSConfigs
 27117  	}
 27118  	return json.Marshal(objectMap)
 27119  }
 27120  
 27121  // PrivateEndpointsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 27122  // long-running operation.
 27123  type PrivateEndpointsCreateOrUpdateFuture struct {
 27124  	azure.FutureAPI
 27125  	// Result returns the result of the asynchronous operation.
 27126  	// If the operation has not completed it will return an error.
 27127  	Result func(PrivateEndpointsClient) (PrivateEndpoint, error)
 27128  }
 27129  
 27130  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 27131  func (future *PrivateEndpointsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 27132  	var azFuture azure.Future
 27133  	if err := json.Unmarshal(body, &azFuture); err != nil {
 27134  		return err
 27135  	}
 27136  	future.FutureAPI = &azFuture
 27137  	future.Result = future.result
 27138  	return nil
 27139  }
 27140  
 27141  // result is the default implementation for PrivateEndpointsCreateOrUpdateFuture.Result.
 27142  func (future *PrivateEndpointsCreateOrUpdateFuture) result(client PrivateEndpointsClient) (peVar PrivateEndpoint, err error) {
 27143  	var done bool
 27144  	done, err = future.DoneWithContext(context.Background(), client)
 27145  	if err != nil {
 27146  		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 27147  		return
 27148  	}
 27149  	if !done {
 27150  		peVar.Response.Response = future.Response()
 27151  		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsCreateOrUpdateFuture")
 27152  		return
 27153  	}
 27154  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 27155  	if peVar.Response.Response, err = future.GetResult(sender); err == nil && peVar.Response.Response.StatusCode != http.StatusNoContent {
 27156  		peVar, err = client.CreateOrUpdateResponder(peVar.Response.Response)
 27157  		if err != nil {
 27158  			err = autorest.NewErrorWithError(err, "network.PrivateEndpointsCreateOrUpdateFuture", "Result", peVar.Response.Response, "Failure responding to request")
 27159  		}
 27160  	}
 27161  	return
 27162  }
 27163  
 27164  // PrivateEndpointsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 27165  // operation.
 27166  type PrivateEndpointsDeleteFuture struct {
 27167  	azure.FutureAPI
 27168  	// Result returns the result of the asynchronous operation.
 27169  	// If the operation has not completed it will return an error.
 27170  	Result func(PrivateEndpointsClient) (autorest.Response, error)
 27171  }
 27172  
 27173  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 27174  func (future *PrivateEndpointsDeleteFuture) UnmarshalJSON(body []byte) error {
 27175  	var azFuture azure.Future
 27176  	if err := json.Unmarshal(body, &azFuture); err != nil {
 27177  		return err
 27178  	}
 27179  	future.FutureAPI = &azFuture
 27180  	future.Result = future.result
 27181  	return nil
 27182  }
 27183  
 27184  // result is the default implementation for PrivateEndpointsDeleteFuture.Result.
 27185  func (future *PrivateEndpointsDeleteFuture) result(client PrivateEndpointsClient) (ar autorest.Response, err error) {
 27186  	var done bool
 27187  	done, err = future.DoneWithContext(context.Background(), client)
 27188  	if err != nil {
 27189  		err = autorest.NewErrorWithError(err, "network.PrivateEndpointsDeleteFuture", "Result", future.Response(), "Polling failure")
 27190  		return
 27191  	}
 27192  	if !done {
 27193  		ar.Response = future.Response()
 27194  		err = azure.NewAsyncOpIncompleteError("network.PrivateEndpointsDeleteFuture")
 27195  		return
 27196  	}
 27197  	ar.Response = future.Response()
 27198  	return
 27199  }
 27200  
 27201  // PrivateLinkService private link service resource.
 27202  type PrivateLinkService struct {
 27203  	autorest.Response `json:"-"`
 27204  	// PrivateLinkServiceProperties - Properties of the private link service.
 27205  	*PrivateLinkServiceProperties `json:"properties,omitempty"`
 27206  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 27207  	Etag *string `json:"etag,omitempty"`
 27208  	// ID - Resource ID.
 27209  	ID *string `json:"id,omitempty"`
 27210  	// Name - READ-ONLY; Resource name.
 27211  	Name *string `json:"name,omitempty"`
 27212  	// Type - READ-ONLY; Resource type.
 27213  	Type *string `json:"type,omitempty"`
 27214  	// Location - Resource location.
 27215  	Location *string `json:"location,omitempty"`
 27216  	// Tags - Resource tags.
 27217  	Tags map[string]*string `json:"tags"`
 27218  }
 27219  
 27220  // MarshalJSON is the custom marshaler for PrivateLinkService.
 27221  func (pls PrivateLinkService) MarshalJSON() ([]byte, error) {
 27222  	objectMap := make(map[string]interface{})
 27223  	if pls.PrivateLinkServiceProperties != nil {
 27224  		objectMap["properties"] = pls.PrivateLinkServiceProperties
 27225  	}
 27226  	if pls.ID != nil {
 27227  		objectMap["id"] = pls.ID
 27228  	}
 27229  	if pls.Location != nil {
 27230  		objectMap["location"] = pls.Location
 27231  	}
 27232  	if pls.Tags != nil {
 27233  		objectMap["tags"] = pls.Tags
 27234  	}
 27235  	return json.Marshal(objectMap)
 27236  }
 27237  
 27238  // UnmarshalJSON is the custom unmarshaler for PrivateLinkService struct.
 27239  func (pls *PrivateLinkService) UnmarshalJSON(body []byte) error {
 27240  	var m map[string]*json.RawMessage
 27241  	err := json.Unmarshal(body, &m)
 27242  	if err != nil {
 27243  		return err
 27244  	}
 27245  	for k, v := range m {
 27246  		switch k {
 27247  		case "properties":
 27248  			if v != nil {
 27249  				var privateLinkServiceProperties PrivateLinkServiceProperties
 27250  				err = json.Unmarshal(*v, &privateLinkServiceProperties)
 27251  				if err != nil {
 27252  					return err
 27253  				}
 27254  				pls.PrivateLinkServiceProperties = &privateLinkServiceProperties
 27255  			}
 27256  		case "etag":
 27257  			if v != nil {
 27258  				var etag string
 27259  				err = json.Unmarshal(*v, &etag)
 27260  				if err != nil {
 27261  					return err
 27262  				}
 27263  				pls.Etag = &etag
 27264  			}
 27265  		case "id":
 27266  			if v != nil {
 27267  				var ID string
 27268  				err = json.Unmarshal(*v, &ID)
 27269  				if err != nil {
 27270  					return err
 27271  				}
 27272  				pls.ID = &ID
 27273  			}
 27274  		case "name":
 27275  			if v != nil {
 27276  				var name string
 27277  				err = json.Unmarshal(*v, &name)
 27278  				if err != nil {
 27279  					return err
 27280  				}
 27281  				pls.Name = &name
 27282  			}
 27283  		case "type":
 27284  			if v != nil {
 27285  				var typeVar string
 27286  				err = json.Unmarshal(*v, &typeVar)
 27287  				if err != nil {
 27288  					return err
 27289  				}
 27290  				pls.Type = &typeVar
 27291  			}
 27292  		case "location":
 27293  			if v != nil {
 27294  				var location string
 27295  				err = json.Unmarshal(*v, &location)
 27296  				if err != nil {
 27297  					return err
 27298  				}
 27299  				pls.Location = &location
 27300  			}
 27301  		case "tags":
 27302  			if v != nil {
 27303  				var tags map[string]*string
 27304  				err = json.Unmarshal(*v, &tags)
 27305  				if err != nil {
 27306  					return err
 27307  				}
 27308  				pls.Tags = tags
 27309  			}
 27310  		}
 27311  	}
 27312  
 27313  	return nil
 27314  }
 27315  
 27316  // PrivateLinkServiceConnection privateLinkServiceConnection resource.
 27317  type PrivateLinkServiceConnection struct {
 27318  	// PrivateLinkServiceConnectionProperties - Properties of the private link service connection.
 27319  	*PrivateLinkServiceConnectionProperties `json:"properties,omitempty"`
 27320  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 27321  	Name *string `json:"name,omitempty"`
 27322  	// Type - READ-ONLY; The resource type.
 27323  	Type *string `json:"type,omitempty"`
 27324  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 27325  	Etag *string `json:"etag,omitempty"`
 27326  	// ID - Resource ID.
 27327  	ID *string `json:"id,omitempty"`
 27328  }
 27329  
 27330  // MarshalJSON is the custom marshaler for PrivateLinkServiceConnection.
 27331  func (plsc PrivateLinkServiceConnection) MarshalJSON() ([]byte, error) {
 27332  	objectMap := make(map[string]interface{})
 27333  	if plsc.PrivateLinkServiceConnectionProperties != nil {
 27334  		objectMap["properties"] = plsc.PrivateLinkServiceConnectionProperties
 27335  	}
 27336  	if plsc.Name != nil {
 27337  		objectMap["name"] = plsc.Name
 27338  	}
 27339  	if plsc.ID != nil {
 27340  		objectMap["id"] = plsc.ID
 27341  	}
 27342  	return json.Marshal(objectMap)
 27343  }
 27344  
 27345  // UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceConnection struct.
 27346  func (plsc *PrivateLinkServiceConnection) UnmarshalJSON(body []byte) error {
 27347  	var m map[string]*json.RawMessage
 27348  	err := json.Unmarshal(body, &m)
 27349  	if err != nil {
 27350  		return err
 27351  	}
 27352  	for k, v := range m {
 27353  		switch k {
 27354  		case "properties":
 27355  			if v != nil {
 27356  				var privateLinkServiceConnectionProperties PrivateLinkServiceConnectionProperties
 27357  				err = json.Unmarshal(*v, &privateLinkServiceConnectionProperties)
 27358  				if err != nil {
 27359  					return err
 27360  				}
 27361  				plsc.PrivateLinkServiceConnectionProperties = &privateLinkServiceConnectionProperties
 27362  			}
 27363  		case "name":
 27364  			if v != nil {
 27365  				var name string
 27366  				err = json.Unmarshal(*v, &name)
 27367  				if err != nil {
 27368  					return err
 27369  				}
 27370  				plsc.Name = &name
 27371  			}
 27372  		case "type":
 27373  			if v != nil {
 27374  				var typeVar string
 27375  				err = json.Unmarshal(*v, &typeVar)
 27376  				if err != nil {
 27377  					return err
 27378  				}
 27379  				plsc.Type = &typeVar
 27380  			}
 27381  		case "etag":
 27382  			if v != nil {
 27383  				var etag string
 27384  				err = json.Unmarshal(*v, &etag)
 27385  				if err != nil {
 27386  					return err
 27387  				}
 27388  				plsc.Etag = &etag
 27389  			}
 27390  		case "id":
 27391  			if v != nil {
 27392  				var ID string
 27393  				err = json.Unmarshal(*v, &ID)
 27394  				if err != nil {
 27395  					return err
 27396  				}
 27397  				plsc.ID = &ID
 27398  			}
 27399  		}
 27400  	}
 27401  
 27402  	return nil
 27403  }
 27404  
 27405  // PrivateLinkServiceConnectionProperties properties of the PrivateLinkServiceConnection.
 27406  type PrivateLinkServiceConnectionProperties struct {
 27407  	// ProvisioningState - READ-ONLY; The provisioning state of the private link service connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 27408  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 27409  	// PrivateLinkServiceID - The resource id of private link service.
 27410  	PrivateLinkServiceID *string `json:"privateLinkServiceId,omitempty"`
 27411  	// GroupIds - The ID(s) of the group(s) obtained from the remote resource that this private endpoint should connect to.
 27412  	GroupIds *[]string `json:"groupIds,omitempty"`
 27413  	// RequestMessage - A message passed to the owner of the remote resource with this connection request. Restricted to 140 chars.
 27414  	RequestMessage *string `json:"requestMessage,omitempty"`
 27415  	// PrivateLinkServiceConnectionState - A collection of read-only information about the state of the connection to the remote resource.
 27416  	PrivateLinkServiceConnectionState *PrivateLinkServiceConnectionState `json:"privateLinkServiceConnectionState,omitempty"`
 27417  }
 27418  
 27419  // MarshalJSON is the custom marshaler for PrivateLinkServiceConnectionProperties.
 27420  func (plscp PrivateLinkServiceConnectionProperties) MarshalJSON() ([]byte, error) {
 27421  	objectMap := make(map[string]interface{})
 27422  	if plscp.PrivateLinkServiceID != nil {
 27423  		objectMap["privateLinkServiceId"] = plscp.PrivateLinkServiceID
 27424  	}
 27425  	if plscp.GroupIds != nil {
 27426  		objectMap["groupIds"] = plscp.GroupIds
 27427  	}
 27428  	if plscp.RequestMessage != nil {
 27429  		objectMap["requestMessage"] = plscp.RequestMessage
 27430  	}
 27431  	if plscp.PrivateLinkServiceConnectionState != nil {
 27432  		objectMap["privateLinkServiceConnectionState"] = plscp.PrivateLinkServiceConnectionState
 27433  	}
 27434  	return json.Marshal(objectMap)
 27435  }
 27436  
 27437  // PrivateLinkServiceConnectionState a collection of information about the state of the connection between
 27438  // service consumer and provider.
 27439  type PrivateLinkServiceConnectionState struct {
 27440  	// Status - Indicates whether the connection has been Approved/Rejected/Removed by the owner of the service.
 27441  	Status *string `json:"status,omitempty"`
 27442  	// Description - The reason for approval/rejection of the connection.
 27443  	Description *string `json:"description,omitempty"`
 27444  	// ActionsRequired - A message indicating if changes on the service provider require any updates on the consumer.
 27445  	ActionsRequired *string `json:"actionsRequired,omitempty"`
 27446  }
 27447  
 27448  // PrivateLinkServiceIPConfiguration the private link service ip configuration.
 27449  type PrivateLinkServiceIPConfiguration struct {
 27450  	// PrivateLinkServiceIPConfigurationProperties - Properties of the private link service ip configuration.
 27451  	*PrivateLinkServiceIPConfigurationProperties `json:"properties,omitempty"`
 27452  	// Name - The name of private link service ip configuration.
 27453  	Name *string `json:"name,omitempty"`
 27454  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 27455  	Etag *string `json:"etag,omitempty"`
 27456  	// Type - READ-ONLY; The resource type.
 27457  	Type *string `json:"type,omitempty"`
 27458  	// ID - Resource ID.
 27459  	ID *string `json:"id,omitempty"`
 27460  }
 27461  
 27462  // MarshalJSON is the custom marshaler for PrivateLinkServiceIPConfiguration.
 27463  func (plsic PrivateLinkServiceIPConfiguration) MarshalJSON() ([]byte, error) {
 27464  	objectMap := make(map[string]interface{})
 27465  	if plsic.PrivateLinkServiceIPConfigurationProperties != nil {
 27466  		objectMap["properties"] = plsic.PrivateLinkServiceIPConfigurationProperties
 27467  	}
 27468  	if plsic.Name != nil {
 27469  		objectMap["name"] = plsic.Name
 27470  	}
 27471  	if plsic.ID != nil {
 27472  		objectMap["id"] = plsic.ID
 27473  	}
 27474  	return json.Marshal(objectMap)
 27475  }
 27476  
 27477  // UnmarshalJSON is the custom unmarshaler for PrivateLinkServiceIPConfiguration struct.
 27478  func (plsic *PrivateLinkServiceIPConfiguration) UnmarshalJSON(body []byte) error {
 27479  	var m map[string]*json.RawMessage
 27480  	err := json.Unmarshal(body, &m)
 27481  	if err != nil {
 27482  		return err
 27483  	}
 27484  	for k, v := range m {
 27485  		switch k {
 27486  		case "properties":
 27487  			if v != nil {
 27488  				var privateLinkServiceIPConfigurationProperties PrivateLinkServiceIPConfigurationProperties
 27489  				err = json.Unmarshal(*v, &privateLinkServiceIPConfigurationProperties)
 27490  				if err != nil {
 27491  					return err
 27492  				}
 27493  				plsic.PrivateLinkServiceIPConfigurationProperties = &privateLinkServiceIPConfigurationProperties
 27494  			}
 27495  		case "name":
 27496  			if v != nil {
 27497  				var name string
 27498  				err = json.Unmarshal(*v, &name)
 27499  				if err != nil {
 27500  					return err
 27501  				}
 27502  				plsic.Name = &name
 27503  			}
 27504  		case "etag":
 27505  			if v != nil {
 27506  				var etag string
 27507  				err = json.Unmarshal(*v, &etag)
 27508  				if err != nil {
 27509  					return err
 27510  				}
 27511  				plsic.Etag = &etag
 27512  			}
 27513  		case "type":
 27514  			if v != nil {
 27515  				var typeVar string
 27516  				err = json.Unmarshal(*v, &typeVar)
 27517  				if err != nil {
 27518  					return err
 27519  				}
 27520  				plsic.Type = &typeVar
 27521  			}
 27522  		case "id":
 27523  			if v != nil {
 27524  				var ID string
 27525  				err = json.Unmarshal(*v, &ID)
 27526  				if err != nil {
 27527  					return err
 27528  				}
 27529  				plsic.ID = &ID
 27530  			}
 27531  		}
 27532  	}
 27533  
 27534  	return nil
 27535  }
 27536  
 27537  // PrivateLinkServiceIPConfigurationProperties properties of private link service IP configuration.
 27538  type PrivateLinkServiceIPConfigurationProperties struct {
 27539  	// PrivateIPAddress - The private IP address of the IP configuration.
 27540  	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
 27541  	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
 27542  	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
 27543  	// Subnet - The reference to the subnet resource.
 27544  	Subnet *Subnet `json:"subnet,omitempty"`
 27545  	// Primary - Whether the ip configuration is primary or not.
 27546  	Primary *bool `json:"primary,omitempty"`
 27547  	// ProvisioningState - READ-ONLY; The provisioning state of the private link service IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 27548  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 27549  	// PrivateIPAddressVersion - Whether the specific IP configuration is IPv4 or IPv6. Default is IPv4. Possible values include: 'IPv4', 'IPv6'
 27550  	PrivateIPAddressVersion IPVersion `json:"privateIPAddressVersion,omitempty"`
 27551  }
 27552  
 27553  // MarshalJSON is the custom marshaler for PrivateLinkServiceIPConfigurationProperties.
 27554  func (plsicp PrivateLinkServiceIPConfigurationProperties) MarshalJSON() ([]byte, error) {
 27555  	objectMap := make(map[string]interface{})
 27556  	if plsicp.PrivateIPAddress != nil {
 27557  		objectMap["privateIPAddress"] = plsicp.PrivateIPAddress
 27558  	}
 27559  	if plsicp.PrivateIPAllocationMethod != "" {
 27560  		objectMap["privateIPAllocationMethod"] = plsicp.PrivateIPAllocationMethod
 27561  	}
 27562  	if plsicp.Subnet != nil {
 27563  		objectMap["subnet"] = plsicp.Subnet
 27564  	}
 27565  	if plsicp.Primary != nil {
 27566  		objectMap["primary"] = plsicp.Primary
 27567  	}
 27568  	if plsicp.PrivateIPAddressVersion != "" {
 27569  		objectMap["privateIPAddressVersion"] = plsicp.PrivateIPAddressVersion
 27570  	}
 27571  	return json.Marshal(objectMap)
 27572  }
 27573  
 27574  // PrivateLinkServiceListResult response for the ListPrivateLinkService API service call.
 27575  type PrivateLinkServiceListResult struct {
 27576  	autorest.Response `json:"-"`
 27577  	// Value - A list of PrivateLinkService resources in a resource group.
 27578  	Value *[]PrivateLinkService `json:"value,omitempty"`
 27579  	// NextLink - READ-ONLY; The URL to get the next set of results.
 27580  	NextLink *string `json:"nextLink,omitempty"`
 27581  }
 27582  
 27583  // MarshalJSON is the custom marshaler for PrivateLinkServiceListResult.
 27584  func (plslr PrivateLinkServiceListResult) MarshalJSON() ([]byte, error) {
 27585  	objectMap := make(map[string]interface{})
 27586  	if plslr.Value != nil {
 27587  		objectMap["value"] = plslr.Value
 27588  	}
 27589  	return json.Marshal(objectMap)
 27590  }
 27591  
 27592  // PrivateLinkServiceListResultIterator provides access to a complete listing of PrivateLinkService values.
 27593  type PrivateLinkServiceListResultIterator struct {
 27594  	i    int
 27595  	page PrivateLinkServiceListResultPage
 27596  }
 27597  
 27598  // NextWithContext advances to the next value.  If there was an error making
 27599  // the request the iterator does not advance and the error is returned.
 27600  func (iter *PrivateLinkServiceListResultIterator) NextWithContext(ctx context.Context) (err error) {
 27601  	if tracing.IsEnabled() {
 27602  		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultIterator.NextWithContext")
 27603  		defer func() {
 27604  			sc := -1
 27605  			if iter.Response().Response.Response != nil {
 27606  				sc = iter.Response().Response.Response.StatusCode
 27607  			}
 27608  			tracing.EndSpan(ctx, sc, err)
 27609  		}()
 27610  	}
 27611  	iter.i++
 27612  	if iter.i < len(iter.page.Values()) {
 27613  		return nil
 27614  	}
 27615  	err = iter.page.NextWithContext(ctx)
 27616  	if err != nil {
 27617  		iter.i--
 27618  		return err
 27619  	}
 27620  	iter.i = 0
 27621  	return nil
 27622  }
 27623  
 27624  // Next advances to the next value.  If there was an error making
 27625  // the request the iterator does not advance and the error is returned.
 27626  // Deprecated: Use NextWithContext() instead.
 27627  func (iter *PrivateLinkServiceListResultIterator) Next() error {
 27628  	return iter.NextWithContext(context.Background())
 27629  }
 27630  
 27631  // NotDone returns true if the enumeration should be started or is not yet complete.
 27632  func (iter PrivateLinkServiceListResultIterator) NotDone() bool {
 27633  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 27634  }
 27635  
 27636  // Response returns the raw server response from the last page request.
 27637  func (iter PrivateLinkServiceListResultIterator) Response() PrivateLinkServiceListResult {
 27638  	return iter.page.Response()
 27639  }
 27640  
 27641  // Value returns the current value or a zero-initialized value if the
 27642  // iterator has advanced beyond the end of the collection.
 27643  func (iter PrivateLinkServiceListResultIterator) Value() PrivateLinkService {
 27644  	if !iter.page.NotDone() {
 27645  		return PrivateLinkService{}
 27646  	}
 27647  	return iter.page.Values()[iter.i]
 27648  }
 27649  
 27650  // Creates a new instance of the PrivateLinkServiceListResultIterator type.
 27651  func NewPrivateLinkServiceListResultIterator(page PrivateLinkServiceListResultPage) PrivateLinkServiceListResultIterator {
 27652  	return PrivateLinkServiceListResultIterator{page: page}
 27653  }
 27654  
 27655  // IsEmpty returns true if the ListResult contains no values.
 27656  func (plslr PrivateLinkServiceListResult) IsEmpty() bool {
 27657  	return plslr.Value == nil || len(*plslr.Value) == 0
 27658  }
 27659  
 27660  // hasNextLink returns true if the NextLink is not empty.
 27661  func (plslr PrivateLinkServiceListResult) hasNextLink() bool {
 27662  	return plslr.NextLink != nil && len(*plslr.NextLink) != 0
 27663  }
 27664  
 27665  // privateLinkServiceListResultPreparer prepares a request to retrieve the next set of results.
 27666  // It returns nil if no more results exist.
 27667  func (plslr PrivateLinkServiceListResult) privateLinkServiceListResultPreparer(ctx context.Context) (*http.Request, error) {
 27668  	if !plslr.hasNextLink() {
 27669  		return nil, nil
 27670  	}
 27671  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 27672  		autorest.AsJSON(),
 27673  		autorest.AsGet(),
 27674  		autorest.WithBaseURL(to.String(plslr.NextLink)))
 27675  }
 27676  
 27677  // PrivateLinkServiceListResultPage contains a page of PrivateLinkService values.
 27678  type PrivateLinkServiceListResultPage struct {
 27679  	fn    func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)
 27680  	plslr PrivateLinkServiceListResult
 27681  }
 27682  
 27683  // NextWithContext advances to the next page of values.  If there was an error making
 27684  // the request the page does not advance and the error is returned.
 27685  func (page *PrivateLinkServiceListResultPage) NextWithContext(ctx context.Context) (err error) {
 27686  	if tracing.IsEnabled() {
 27687  		ctx = tracing.StartSpan(ctx, fqdn+"/PrivateLinkServiceListResultPage.NextWithContext")
 27688  		defer func() {
 27689  			sc := -1
 27690  			if page.Response().Response.Response != nil {
 27691  				sc = page.Response().Response.Response.StatusCode
 27692  			}
 27693  			tracing.EndSpan(ctx, sc, err)
 27694  		}()
 27695  	}
 27696  	for {
 27697  		next, err := page.fn(ctx, page.plslr)
 27698  		if err != nil {
 27699  			return err
 27700  		}
 27701  		page.plslr = next
 27702  		if !next.hasNextLink() || !next.IsEmpty() {
 27703  			break
 27704  		}
 27705  	}
 27706  	return nil
 27707  }
 27708  
 27709  // Next advances to the next page of values.  If there was an error making
 27710  // the request the page does not advance and the error is returned.
 27711  // Deprecated: Use NextWithContext() instead.
 27712  func (page *PrivateLinkServiceListResultPage) Next() error {
 27713  	return page.NextWithContext(context.Background())
 27714  }
 27715  
 27716  // NotDone returns true if the page enumeration should be started or is not yet complete.
 27717  func (page PrivateLinkServiceListResultPage) NotDone() bool {
 27718  	return !page.plslr.IsEmpty()
 27719  }
 27720  
 27721  // Response returns the raw server response from the last page request.
 27722  func (page PrivateLinkServiceListResultPage) Response() PrivateLinkServiceListResult {
 27723  	return page.plslr
 27724  }
 27725  
 27726  // Values returns the slice of values for the current page or nil if there are no values.
 27727  func (page PrivateLinkServiceListResultPage) Values() []PrivateLinkService {
 27728  	if page.plslr.IsEmpty() {
 27729  		return nil
 27730  	}
 27731  	return *page.plslr.Value
 27732  }
 27733  
 27734  // Creates a new instance of the PrivateLinkServiceListResultPage type.
 27735  func NewPrivateLinkServiceListResultPage(cur PrivateLinkServiceListResult, getNextPage func(context.Context, PrivateLinkServiceListResult) (PrivateLinkServiceListResult, error)) PrivateLinkServiceListResultPage {
 27736  	return PrivateLinkServiceListResultPage{
 27737  		fn:    getNextPage,
 27738  		plslr: cur,
 27739  	}
 27740  }
 27741  
 27742  // PrivateLinkServiceProperties properties of the private link service.
 27743  type PrivateLinkServiceProperties struct {
 27744  	// LoadBalancerFrontendIPConfigurations - An array of references to the load balancer IP configurations.
 27745  	LoadBalancerFrontendIPConfigurations *[]FrontendIPConfiguration `json:"loadBalancerFrontendIpConfigurations,omitempty"`
 27746  	// IPConfigurations - An array of private link service IP configurations.
 27747  	IPConfigurations *[]PrivateLinkServiceIPConfiguration `json:"ipConfigurations,omitempty"`
 27748  	// NetworkInterfaces - READ-ONLY; An array of references to the network interfaces created for this private link service.
 27749  	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
 27750  	// ProvisioningState - READ-ONLY; The provisioning state of the private link service resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 27751  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 27752  	// PrivateEndpointConnections - READ-ONLY; An array of list about connections to the private endpoint.
 27753  	PrivateEndpointConnections *[]PrivateEndpointConnection `json:"privateEndpointConnections,omitempty"`
 27754  	// Visibility - The visibility list of the private link service.
 27755  	Visibility *PrivateLinkServicePropertiesVisibility `json:"visibility,omitempty"`
 27756  	// AutoApproval - The auto-approval list of the private link service.
 27757  	AutoApproval *PrivateLinkServicePropertiesAutoApproval `json:"autoApproval,omitempty"`
 27758  	// Fqdns - The list of Fqdn.
 27759  	Fqdns *[]string `json:"fqdns,omitempty"`
 27760  	// Alias - READ-ONLY; The alias of the private link service.
 27761  	Alias *string `json:"alias,omitempty"`
 27762  	// EnableProxyProtocol - Whether the private link service is enabled for proxy protocol or not.
 27763  	EnableProxyProtocol *bool `json:"enableProxyProtocol,omitempty"`
 27764  }
 27765  
 27766  // MarshalJSON is the custom marshaler for PrivateLinkServiceProperties.
 27767  func (plsp PrivateLinkServiceProperties) MarshalJSON() ([]byte, error) {
 27768  	objectMap := make(map[string]interface{})
 27769  	if plsp.LoadBalancerFrontendIPConfigurations != nil {
 27770  		objectMap["loadBalancerFrontendIpConfigurations"] = plsp.LoadBalancerFrontendIPConfigurations
 27771  	}
 27772  	if plsp.IPConfigurations != nil {
 27773  		objectMap["ipConfigurations"] = plsp.IPConfigurations
 27774  	}
 27775  	if plsp.Visibility != nil {
 27776  		objectMap["visibility"] = plsp.Visibility
 27777  	}
 27778  	if plsp.AutoApproval != nil {
 27779  		objectMap["autoApproval"] = plsp.AutoApproval
 27780  	}
 27781  	if plsp.Fqdns != nil {
 27782  		objectMap["fqdns"] = plsp.Fqdns
 27783  	}
 27784  	if plsp.EnableProxyProtocol != nil {
 27785  		objectMap["enableProxyProtocol"] = plsp.EnableProxyProtocol
 27786  	}
 27787  	return json.Marshal(objectMap)
 27788  }
 27789  
 27790  // PrivateLinkServicePropertiesAutoApproval the auto-approval list of the private link service.
 27791  type PrivateLinkServicePropertiesAutoApproval struct {
 27792  	// Subscriptions - The list of subscriptions.
 27793  	Subscriptions *[]string `json:"subscriptions,omitempty"`
 27794  }
 27795  
 27796  // PrivateLinkServicePropertiesVisibility the visibility list of the private link service.
 27797  type PrivateLinkServicePropertiesVisibility struct {
 27798  	// Subscriptions - The list of subscriptions.
 27799  	Subscriptions *[]string `json:"subscriptions,omitempty"`
 27800  }
 27801  
 27802  // PrivateLinkServicesCheckPrivateLinkServiceVisibilityByResourceGroupFuture an abstraction for monitoring
 27803  // and retrieving the results of a long-running operation.
 27804  type PrivateLinkServicesCheckPrivateLinkServiceVisibilityByResourceGroupFuture struct {
 27805  	azure.FutureAPI
 27806  	// Result returns the result of the asynchronous operation.
 27807  	// If the operation has not completed it will return an error.
 27808  	Result func(PrivateLinkServicesClient) (PrivateLinkServiceVisibility, error)
 27809  }
 27810  
 27811  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 27812  func (future *PrivateLinkServicesCheckPrivateLinkServiceVisibilityByResourceGroupFuture) UnmarshalJSON(body []byte) error {
 27813  	var azFuture azure.Future
 27814  	if err := json.Unmarshal(body, &azFuture); err != nil {
 27815  		return err
 27816  	}
 27817  	future.FutureAPI = &azFuture
 27818  	future.Result = future.result
 27819  	return nil
 27820  }
 27821  
 27822  // result is the default implementation for PrivateLinkServicesCheckPrivateLinkServiceVisibilityByResourceGroupFuture.Result.
 27823  func (future *PrivateLinkServicesCheckPrivateLinkServiceVisibilityByResourceGroupFuture) result(client PrivateLinkServicesClient) (plsv PrivateLinkServiceVisibility, err error) {
 27824  	var done bool
 27825  	done, err = future.DoneWithContext(context.Background(), client)
 27826  	if err != nil {
 27827  		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCheckPrivateLinkServiceVisibilityByResourceGroupFuture", "Result", future.Response(), "Polling failure")
 27828  		return
 27829  	}
 27830  	if !done {
 27831  		plsv.Response.Response = future.Response()
 27832  		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesCheckPrivateLinkServiceVisibilityByResourceGroupFuture")
 27833  		return
 27834  	}
 27835  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 27836  	if plsv.Response.Response, err = future.GetResult(sender); err == nil && plsv.Response.Response.StatusCode != http.StatusNoContent {
 27837  		plsv, err = client.CheckPrivateLinkServiceVisibilityByResourceGroupResponder(plsv.Response.Response)
 27838  		if err != nil {
 27839  			err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCheckPrivateLinkServiceVisibilityByResourceGroupFuture", "Result", plsv.Response.Response, "Failure responding to request")
 27840  		}
 27841  	}
 27842  	return
 27843  }
 27844  
 27845  // PrivateLinkServicesCheckPrivateLinkServiceVisibilityFuture an abstraction for monitoring and retrieving
 27846  // the results of a long-running operation.
 27847  type PrivateLinkServicesCheckPrivateLinkServiceVisibilityFuture struct {
 27848  	azure.FutureAPI
 27849  	// Result returns the result of the asynchronous operation.
 27850  	// If the operation has not completed it will return an error.
 27851  	Result func(PrivateLinkServicesClient) (PrivateLinkServiceVisibility, error)
 27852  }
 27853  
 27854  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 27855  func (future *PrivateLinkServicesCheckPrivateLinkServiceVisibilityFuture) UnmarshalJSON(body []byte) error {
 27856  	var azFuture azure.Future
 27857  	if err := json.Unmarshal(body, &azFuture); err != nil {
 27858  		return err
 27859  	}
 27860  	future.FutureAPI = &azFuture
 27861  	future.Result = future.result
 27862  	return nil
 27863  }
 27864  
 27865  // result is the default implementation for PrivateLinkServicesCheckPrivateLinkServiceVisibilityFuture.Result.
 27866  func (future *PrivateLinkServicesCheckPrivateLinkServiceVisibilityFuture) result(client PrivateLinkServicesClient) (plsv PrivateLinkServiceVisibility, err error) {
 27867  	var done bool
 27868  	done, err = future.DoneWithContext(context.Background(), client)
 27869  	if err != nil {
 27870  		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCheckPrivateLinkServiceVisibilityFuture", "Result", future.Response(), "Polling failure")
 27871  		return
 27872  	}
 27873  	if !done {
 27874  		plsv.Response.Response = future.Response()
 27875  		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesCheckPrivateLinkServiceVisibilityFuture")
 27876  		return
 27877  	}
 27878  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 27879  	if plsv.Response.Response, err = future.GetResult(sender); err == nil && plsv.Response.Response.StatusCode != http.StatusNoContent {
 27880  		plsv, err = client.CheckPrivateLinkServiceVisibilityResponder(plsv.Response.Response)
 27881  		if err != nil {
 27882  			err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCheckPrivateLinkServiceVisibilityFuture", "Result", plsv.Response.Response, "Failure responding to request")
 27883  		}
 27884  	}
 27885  	return
 27886  }
 27887  
 27888  // PrivateLinkServicesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 27889  // long-running operation.
 27890  type PrivateLinkServicesCreateOrUpdateFuture struct {
 27891  	azure.FutureAPI
 27892  	// Result returns the result of the asynchronous operation.
 27893  	// If the operation has not completed it will return an error.
 27894  	Result func(PrivateLinkServicesClient) (PrivateLinkService, error)
 27895  }
 27896  
 27897  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 27898  func (future *PrivateLinkServicesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 27899  	var azFuture azure.Future
 27900  	if err := json.Unmarshal(body, &azFuture); err != nil {
 27901  		return err
 27902  	}
 27903  	future.FutureAPI = &azFuture
 27904  	future.Result = future.result
 27905  	return nil
 27906  }
 27907  
 27908  // result is the default implementation for PrivateLinkServicesCreateOrUpdateFuture.Result.
 27909  func (future *PrivateLinkServicesCreateOrUpdateFuture) result(client PrivateLinkServicesClient) (pls PrivateLinkService, err error) {
 27910  	var done bool
 27911  	done, err = future.DoneWithContext(context.Background(), client)
 27912  	if err != nil {
 27913  		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 27914  		return
 27915  	}
 27916  	if !done {
 27917  		pls.Response.Response = future.Response()
 27918  		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesCreateOrUpdateFuture")
 27919  		return
 27920  	}
 27921  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 27922  	if pls.Response.Response, err = future.GetResult(sender); err == nil && pls.Response.Response.StatusCode != http.StatusNoContent {
 27923  		pls, err = client.CreateOrUpdateResponder(pls.Response.Response)
 27924  		if err != nil {
 27925  			err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesCreateOrUpdateFuture", "Result", pls.Response.Response, "Failure responding to request")
 27926  		}
 27927  	}
 27928  	return
 27929  }
 27930  
 27931  // PrivateLinkServicesDeleteFuture an abstraction for monitoring and retrieving the results of a
 27932  // long-running operation.
 27933  type PrivateLinkServicesDeleteFuture struct {
 27934  	azure.FutureAPI
 27935  	// Result returns the result of the asynchronous operation.
 27936  	// If the operation has not completed it will return an error.
 27937  	Result func(PrivateLinkServicesClient) (autorest.Response, error)
 27938  }
 27939  
 27940  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 27941  func (future *PrivateLinkServicesDeleteFuture) UnmarshalJSON(body []byte) error {
 27942  	var azFuture azure.Future
 27943  	if err := json.Unmarshal(body, &azFuture); err != nil {
 27944  		return err
 27945  	}
 27946  	future.FutureAPI = &azFuture
 27947  	future.Result = future.result
 27948  	return nil
 27949  }
 27950  
 27951  // result is the default implementation for PrivateLinkServicesDeleteFuture.Result.
 27952  func (future *PrivateLinkServicesDeleteFuture) result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
 27953  	var done bool
 27954  	done, err = future.DoneWithContext(context.Background(), client)
 27955  	if err != nil {
 27956  		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeleteFuture", "Result", future.Response(), "Polling failure")
 27957  		return
 27958  	}
 27959  	if !done {
 27960  		ar.Response = future.Response()
 27961  		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeleteFuture")
 27962  		return
 27963  	}
 27964  	ar.Response = future.Response()
 27965  	return
 27966  }
 27967  
 27968  // PrivateLinkServicesDeletePrivateEndpointConnectionFuture an abstraction for monitoring and retrieving
 27969  // the results of a long-running operation.
 27970  type PrivateLinkServicesDeletePrivateEndpointConnectionFuture struct {
 27971  	azure.FutureAPI
 27972  	// Result returns the result of the asynchronous operation.
 27973  	// If the operation has not completed it will return an error.
 27974  	Result func(PrivateLinkServicesClient) (autorest.Response, error)
 27975  }
 27976  
 27977  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 27978  func (future *PrivateLinkServicesDeletePrivateEndpointConnectionFuture) UnmarshalJSON(body []byte) error {
 27979  	var azFuture azure.Future
 27980  	if err := json.Unmarshal(body, &azFuture); err != nil {
 27981  		return err
 27982  	}
 27983  	future.FutureAPI = &azFuture
 27984  	future.Result = future.result
 27985  	return nil
 27986  }
 27987  
 27988  // result is the default implementation for PrivateLinkServicesDeletePrivateEndpointConnectionFuture.Result.
 27989  func (future *PrivateLinkServicesDeletePrivateEndpointConnectionFuture) result(client PrivateLinkServicesClient) (ar autorest.Response, err error) {
 27990  	var done bool
 27991  	done, err = future.DoneWithContext(context.Background(), client)
 27992  	if err != nil {
 27993  		err = autorest.NewErrorWithError(err, "network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture", "Result", future.Response(), "Polling failure")
 27994  		return
 27995  	}
 27996  	if !done {
 27997  		ar.Response = future.Response()
 27998  		err = azure.NewAsyncOpIncompleteError("network.PrivateLinkServicesDeletePrivateEndpointConnectionFuture")
 27999  		return
 28000  	}
 28001  	ar.Response = future.Response()
 28002  	return
 28003  }
 28004  
 28005  // PrivateLinkServiceVisibility response for the CheckPrivateLinkServiceVisibility API service call.
 28006  type PrivateLinkServiceVisibility struct {
 28007  	autorest.Response `json:"-"`
 28008  	// Visible - Private Link Service Visibility (True/False).
 28009  	Visible *bool `json:"visible,omitempty"`
 28010  }
 28011  
 28012  // Probe a load balancer probe.
 28013  type Probe struct {
 28014  	autorest.Response `json:"-"`
 28015  	// ProbePropertiesFormat - Properties of load balancer probe.
 28016  	*ProbePropertiesFormat `json:"properties,omitempty"`
 28017  	// Name - The name of the resource that is unique within the set of probes used by the load balancer. This name can be used to access the resource.
 28018  	Name *string `json:"name,omitempty"`
 28019  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 28020  	Etag *string `json:"etag,omitempty"`
 28021  	// Type - READ-ONLY; Type of the resource.
 28022  	Type *string `json:"type,omitempty"`
 28023  	// ID - Resource ID.
 28024  	ID *string `json:"id,omitempty"`
 28025  }
 28026  
 28027  // MarshalJSON is the custom marshaler for Probe.
 28028  func (p Probe) MarshalJSON() ([]byte, error) {
 28029  	objectMap := make(map[string]interface{})
 28030  	if p.ProbePropertiesFormat != nil {
 28031  		objectMap["properties"] = p.ProbePropertiesFormat
 28032  	}
 28033  	if p.Name != nil {
 28034  		objectMap["name"] = p.Name
 28035  	}
 28036  	if p.ID != nil {
 28037  		objectMap["id"] = p.ID
 28038  	}
 28039  	return json.Marshal(objectMap)
 28040  }
 28041  
 28042  // UnmarshalJSON is the custom unmarshaler for Probe struct.
 28043  func (p *Probe) UnmarshalJSON(body []byte) error {
 28044  	var m map[string]*json.RawMessage
 28045  	err := json.Unmarshal(body, &m)
 28046  	if err != nil {
 28047  		return err
 28048  	}
 28049  	for k, v := range m {
 28050  		switch k {
 28051  		case "properties":
 28052  			if v != nil {
 28053  				var probePropertiesFormat ProbePropertiesFormat
 28054  				err = json.Unmarshal(*v, &probePropertiesFormat)
 28055  				if err != nil {
 28056  					return err
 28057  				}
 28058  				p.ProbePropertiesFormat = &probePropertiesFormat
 28059  			}
 28060  		case "name":
 28061  			if v != nil {
 28062  				var name string
 28063  				err = json.Unmarshal(*v, &name)
 28064  				if err != nil {
 28065  					return err
 28066  				}
 28067  				p.Name = &name
 28068  			}
 28069  		case "etag":
 28070  			if v != nil {
 28071  				var etag string
 28072  				err = json.Unmarshal(*v, &etag)
 28073  				if err != nil {
 28074  					return err
 28075  				}
 28076  				p.Etag = &etag
 28077  			}
 28078  		case "type":
 28079  			if v != nil {
 28080  				var typeVar string
 28081  				err = json.Unmarshal(*v, &typeVar)
 28082  				if err != nil {
 28083  					return err
 28084  				}
 28085  				p.Type = &typeVar
 28086  			}
 28087  		case "id":
 28088  			if v != nil {
 28089  				var ID string
 28090  				err = json.Unmarshal(*v, &ID)
 28091  				if err != nil {
 28092  					return err
 28093  				}
 28094  				p.ID = &ID
 28095  			}
 28096  		}
 28097  	}
 28098  
 28099  	return nil
 28100  }
 28101  
 28102  // ProbePropertiesFormat load balancer probe resource.
 28103  type ProbePropertiesFormat struct {
 28104  	// LoadBalancingRules - READ-ONLY; The load balancer rules that use this probe.
 28105  	LoadBalancingRules *[]SubResource `json:"loadBalancingRules,omitempty"`
 28106  	// Protocol - The protocol of the end point. If 'Tcp' is specified, a received ACK is required for the probe to be successful. If 'Http' or 'Https' is specified, a 200 OK response from the specifies URI is required for the probe to be successful. Possible values include: 'ProbeProtocolHTTP', 'ProbeProtocolTCP', 'ProbeProtocolHTTPS'
 28107  	Protocol ProbeProtocol `json:"protocol,omitempty"`
 28108  	// Port - The port for communicating the probe. Possible values range from 1 to 65535, inclusive.
 28109  	Port *int32 `json:"port,omitempty"`
 28110  	// 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.
 28111  	IntervalInSeconds *int32 `json:"intervalInSeconds,omitempty"`
 28112  	// 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.
 28113  	NumberOfProbes *int32 `json:"numberOfProbes,omitempty"`
 28114  	// 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.
 28115  	RequestPath *string `json:"requestPath,omitempty"`
 28116  	// ProvisioningState - READ-ONLY; The provisioning state of the probe resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 28117  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 28118  }
 28119  
 28120  // MarshalJSON is the custom marshaler for ProbePropertiesFormat.
 28121  func (ppf ProbePropertiesFormat) MarshalJSON() ([]byte, error) {
 28122  	objectMap := make(map[string]interface{})
 28123  	if ppf.Protocol != "" {
 28124  		objectMap["protocol"] = ppf.Protocol
 28125  	}
 28126  	if ppf.Port != nil {
 28127  		objectMap["port"] = ppf.Port
 28128  	}
 28129  	if ppf.IntervalInSeconds != nil {
 28130  		objectMap["intervalInSeconds"] = ppf.IntervalInSeconds
 28131  	}
 28132  	if ppf.NumberOfProbes != nil {
 28133  		objectMap["numberOfProbes"] = ppf.NumberOfProbes
 28134  	}
 28135  	if ppf.RequestPath != nil {
 28136  		objectMap["requestPath"] = ppf.RequestPath
 28137  	}
 28138  	return json.Marshal(objectMap)
 28139  }
 28140  
 28141  // Profile network profile resource.
 28142  type Profile struct {
 28143  	autorest.Response `json:"-"`
 28144  	// ProfilePropertiesFormat - Network profile properties.
 28145  	*ProfilePropertiesFormat `json:"properties,omitempty"`
 28146  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 28147  	Etag *string `json:"etag,omitempty"`
 28148  	// ID - Resource ID.
 28149  	ID *string `json:"id,omitempty"`
 28150  	// Name - READ-ONLY; Resource name.
 28151  	Name *string `json:"name,omitempty"`
 28152  	// Type - READ-ONLY; Resource type.
 28153  	Type *string `json:"type,omitempty"`
 28154  	// Location - Resource location.
 28155  	Location *string `json:"location,omitempty"`
 28156  	// Tags - Resource tags.
 28157  	Tags map[string]*string `json:"tags"`
 28158  }
 28159  
 28160  // MarshalJSON is the custom marshaler for Profile.
 28161  func (p Profile) MarshalJSON() ([]byte, error) {
 28162  	objectMap := make(map[string]interface{})
 28163  	if p.ProfilePropertiesFormat != nil {
 28164  		objectMap["properties"] = p.ProfilePropertiesFormat
 28165  	}
 28166  	if p.ID != nil {
 28167  		objectMap["id"] = p.ID
 28168  	}
 28169  	if p.Location != nil {
 28170  		objectMap["location"] = p.Location
 28171  	}
 28172  	if p.Tags != nil {
 28173  		objectMap["tags"] = p.Tags
 28174  	}
 28175  	return json.Marshal(objectMap)
 28176  }
 28177  
 28178  // UnmarshalJSON is the custom unmarshaler for Profile struct.
 28179  func (p *Profile) UnmarshalJSON(body []byte) error {
 28180  	var m map[string]*json.RawMessage
 28181  	err := json.Unmarshal(body, &m)
 28182  	if err != nil {
 28183  		return err
 28184  	}
 28185  	for k, v := range m {
 28186  		switch k {
 28187  		case "properties":
 28188  			if v != nil {
 28189  				var profilePropertiesFormat ProfilePropertiesFormat
 28190  				err = json.Unmarshal(*v, &profilePropertiesFormat)
 28191  				if err != nil {
 28192  					return err
 28193  				}
 28194  				p.ProfilePropertiesFormat = &profilePropertiesFormat
 28195  			}
 28196  		case "etag":
 28197  			if v != nil {
 28198  				var etag string
 28199  				err = json.Unmarshal(*v, &etag)
 28200  				if err != nil {
 28201  					return err
 28202  				}
 28203  				p.Etag = &etag
 28204  			}
 28205  		case "id":
 28206  			if v != nil {
 28207  				var ID string
 28208  				err = json.Unmarshal(*v, &ID)
 28209  				if err != nil {
 28210  					return err
 28211  				}
 28212  				p.ID = &ID
 28213  			}
 28214  		case "name":
 28215  			if v != nil {
 28216  				var name string
 28217  				err = json.Unmarshal(*v, &name)
 28218  				if err != nil {
 28219  					return err
 28220  				}
 28221  				p.Name = &name
 28222  			}
 28223  		case "type":
 28224  			if v != nil {
 28225  				var typeVar string
 28226  				err = json.Unmarshal(*v, &typeVar)
 28227  				if err != nil {
 28228  					return err
 28229  				}
 28230  				p.Type = &typeVar
 28231  			}
 28232  		case "location":
 28233  			if v != nil {
 28234  				var location string
 28235  				err = json.Unmarshal(*v, &location)
 28236  				if err != nil {
 28237  					return err
 28238  				}
 28239  				p.Location = &location
 28240  			}
 28241  		case "tags":
 28242  			if v != nil {
 28243  				var tags map[string]*string
 28244  				err = json.Unmarshal(*v, &tags)
 28245  				if err != nil {
 28246  					return err
 28247  				}
 28248  				p.Tags = tags
 28249  			}
 28250  		}
 28251  	}
 28252  
 28253  	return nil
 28254  }
 28255  
 28256  // ProfileListResult response for ListNetworkProfiles API service call.
 28257  type ProfileListResult struct {
 28258  	autorest.Response `json:"-"`
 28259  	// Value - A list of network profiles that exist in a resource group.
 28260  	Value *[]Profile `json:"value,omitempty"`
 28261  	// NextLink - The URL to get the next set of results.
 28262  	NextLink *string `json:"nextLink,omitempty"`
 28263  }
 28264  
 28265  // ProfileListResultIterator provides access to a complete listing of Profile values.
 28266  type ProfileListResultIterator struct {
 28267  	i    int
 28268  	page ProfileListResultPage
 28269  }
 28270  
 28271  // NextWithContext advances to the next value.  If there was an error making
 28272  // the request the iterator does not advance and the error is returned.
 28273  func (iter *ProfileListResultIterator) NextWithContext(ctx context.Context) (err error) {
 28274  	if tracing.IsEnabled() {
 28275  		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultIterator.NextWithContext")
 28276  		defer func() {
 28277  			sc := -1
 28278  			if iter.Response().Response.Response != nil {
 28279  				sc = iter.Response().Response.Response.StatusCode
 28280  			}
 28281  			tracing.EndSpan(ctx, sc, err)
 28282  		}()
 28283  	}
 28284  	iter.i++
 28285  	if iter.i < len(iter.page.Values()) {
 28286  		return nil
 28287  	}
 28288  	err = iter.page.NextWithContext(ctx)
 28289  	if err != nil {
 28290  		iter.i--
 28291  		return err
 28292  	}
 28293  	iter.i = 0
 28294  	return nil
 28295  }
 28296  
 28297  // Next advances to the next value.  If there was an error making
 28298  // the request the iterator does not advance and the error is returned.
 28299  // Deprecated: Use NextWithContext() instead.
 28300  func (iter *ProfileListResultIterator) Next() error {
 28301  	return iter.NextWithContext(context.Background())
 28302  }
 28303  
 28304  // NotDone returns true if the enumeration should be started or is not yet complete.
 28305  func (iter ProfileListResultIterator) NotDone() bool {
 28306  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 28307  }
 28308  
 28309  // Response returns the raw server response from the last page request.
 28310  func (iter ProfileListResultIterator) Response() ProfileListResult {
 28311  	return iter.page.Response()
 28312  }
 28313  
 28314  // Value returns the current value or a zero-initialized value if the
 28315  // iterator has advanced beyond the end of the collection.
 28316  func (iter ProfileListResultIterator) Value() Profile {
 28317  	if !iter.page.NotDone() {
 28318  		return Profile{}
 28319  	}
 28320  	return iter.page.Values()[iter.i]
 28321  }
 28322  
 28323  // Creates a new instance of the ProfileListResultIterator type.
 28324  func NewProfileListResultIterator(page ProfileListResultPage) ProfileListResultIterator {
 28325  	return ProfileListResultIterator{page: page}
 28326  }
 28327  
 28328  // IsEmpty returns true if the ListResult contains no values.
 28329  func (plr ProfileListResult) IsEmpty() bool {
 28330  	return plr.Value == nil || len(*plr.Value) == 0
 28331  }
 28332  
 28333  // hasNextLink returns true if the NextLink is not empty.
 28334  func (plr ProfileListResult) hasNextLink() bool {
 28335  	return plr.NextLink != nil && len(*plr.NextLink) != 0
 28336  }
 28337  
 28338  // profileListResultPreparer prepares a request to retrieve the next set of results.
 28339  // It returns nil if no more results exist.
 28340  func (plr ProfileListResult) profileListResultPreparer(ctx context.Context) (*http.Request, error) {
 28341  	if !plr.hasNextLink() {
 28342  		return nil, nil
 28343  	}
 28344  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 28345  		autorest.AsJSON(),
 28346  		autorest.AsGet(),
 28347  		autorest.WithBaseURL(to.String(plr.NextLink)))
 28348  }
 28349  
 28350  // ProfileListResultPage contains a page of Profile values.
 28351  type ProfileListResultPage struct {
 28352  	fn  func(context.Context, ProfileListResult) (ProfileListResult, error)
 28353  	plr ProfileListResult
 28354  }
 28355  
 28356  // NextWithContext advances to the next page of values.  If there was an error making
 28357  // the request the page does not advance and the error is returned.
 28358  func (page *ProfileListResultPage) NextWithContext(ctx context.Context) (err error) {
 28359  	if tracing.IsEnabled() {
 28360  		ctx = tracing.StartSpan(ctx, fqdn+"/ProfileListResultPage.NextWithContext")
 28361  		defer func() {
 28362  			sc := -1
 28363  			if page.Response().Response.Response != nil {
 28364  				sc = page.Response().Response.Response.StatusCode
 28365  			}
 28366  			tracing.EndSpan(ctx, sc, err)
 28367  		}()
 28368  	}
 28369  	for {
 28370  		next, err := page.fn(ctx, page.plr)
 28371  		if err != nil {
 28372  			return err
 28373  		}
 28374  		page.plr = next
 28375  		if !next.hasNextLink() || !next.IsEmpty() {
 28376  			break
 28377  		}
 28378  	}
 28379  	return nil
 28380  }
 28381  
 28382  // Next advances to the next page of values.  If there was an error making
 28383  // the request the page does not advance and the error is returned.
 28384  // Deprecated: Use NextWithContext() instead.
 28385  func (page *ProfileListResultPage) Next() error {
 28386  	return page.NextWithContext(context.Background())
 28387  }
 28388  
 28389  // NotDone returns true if the page enumeration should be started or is not yet complete.
 28390  func (page ProfileListResultPage) NotDone() bool {
 28391  	return !page.plr.IsEmpty()
 28392  }
 28393  
 28394  // Response returns the raw server response from the last page request.
 28395  func (page ProfileListResultPage) Response() ProfileListResult {
 28396  	return page.plr
 28397  }
 28398  
 28399  // Values returns the slice of values for the current page or nil if there are no values.
 28400  func (page ProfileListResultPage) Values() []Profile {
 28401  	if page.plr.IsEmpty() {
 28402  		return nil
 28403  	}
 28404  	return *page.plr.Value
 28405  }
 28406  
 28407  // Creates a new instance of the ProfileListResultPage type.
 28408  func NewProfileListResultPage(cur ProfileListResult, getNextPage func(context.Context, ProfileListResult) (ProfileListResult, error)) ProfileListResultPage {
 28409  	return ProfileListResultPage{
 28410  		fn:  getNextPage,
 28411  		plr: cur,
 28412  	}
 28413  }
 28414  
 28415  // ProfilePropertiesFormat network profile properties.
 28416  type ProfilePropertiesFormat struct {
 28417  	// ContainerNetworkInterfaces - READ-ONLY; List of child container network interfaces.
 28418  	ContainerNetworkInterfaces *[]ContainerNetworkInterface `json:"containerNetworkInterfaces,omitempty"`
 28419  	// ContainerNetworkInterfaceConfigurations - List of chid container network interface configurations.
 28420  	ContainerNetworkInterfaceConfigurations *[]ContainerNetworkInterfaceConfiguration `json:"containerNetworkInterfaceConfigurations,omitempty"`
 28421  	// ResourceGUID - READ-ONLY; The resource GUID property of the network profile resource.
 28422  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 28423  	// ProvisioningState - READ-ONLY; The provisioning state of the network profile resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 28424  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 28425  }
 28426  
 28427  // MarshalJSON is the custom marshaler for ProfilePropertiesFormat.
 28428  func (ppf ProfilePropertiesFormat) MarshalJSON() ([]byte, error) {
 28429  	objectMap := make(map[string]interface{})
 28430  	if ppf.ContainerNetworkInterfaceConfigurations != nil {
 28431  		objectMap["containerNetworkInterfaceConfigurations"] = ppf.ContainerNetworkInterfaceConfigurations
 28432  	}
 28433  	return json.Marshal(objectMap)
 28434  }
 28435  
 28436  // ProfilesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 28437  // operation.
 28438  type ProfilesDeleteFuture struct {
 28439  	azure.FutureAPI
 28440  	// Result returns the result of the asynchronous operation.
 28441  	// If the operation has not completed it will return an error.
 28442  	Result func(ProfilesClient) (autorest.Response, error)
 28443  }
 28444  
 28445  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 28446  func (future *ProfilesDeleteFuture) UnmarshalJSON(body []byte) error {
 28447  	var azFuture azure.Future
 28448  	if err := json.Unmarshal(body, &azFuture); err != nil {
 28449  		return err
 28450  	}
 28451  	future.FutureAPI = &azFuture
 28452  	future.Result = future.result
 28453  	return nil
 28454  }
 28455  
 28456  // result is the default implementation for ProfilesDeleteFuture.Result.
 28457  func (future *ProfilesDeleteFuture) result(client ProfilesClient) (ar autorest.Response, err error) {
 28458  	var done bool
 28459  	done, err = future.DoneWithContext(context.Background(), client)
 28460  	if err != nil {
 28461  		err = autorest.NewErrorWithError(err, "network.ProfilesDeleteFuture", "Result", future.Response(), "Polling failure")
 28462  		return
 28463  	}
 28464  	if !done {
 28465  		ar.Response = future.Response()
 28466  		err = azure.NewAsyncOpIncompleteError("network.ProfilesDeleteFuture")
 28467  		return
 28468  	}
 28469  	ar.Response = future.Response()
 28470  	return
 28471  }
 28472  
 28473  // PropagatedRouteTable the list of RouteTables to advertise the routes to.
 28474  type PropagatedRouteTable struct {
 28475  	// Labels - The list of labels.
 28476  	Labels *[]string `json:"labels,omitempty"`
 28477  	// Ids - The list of resource ids of all the RouteTables.
 28478  	Ids *[]SubResource `json:"ids,omitempty"`
 28479  }
 28480  
 28481  // ProtocolConfiguration configuration of the protocol.
 28482  type ProtocolConfiguration struct {
 28483  	// HTTPConfiguration - HTTP configuration of the connectivity check.
 28484  	HTTPConfiguration *HTTPConfiguration `json:"HTTPConfiguration,omitempty"`
 28485  }
 28486  
 28487  // ProtocolCustomSettingsFormat dDoS custom policy properties.
 28488  type ProtocolCustomSettingsFormat struct {
 28489  	// Protocol - The protocol for which the DDoS protection policy is being customized. Possible values include: 'DdosCustomPolicyProtocolTCP', 'DdosCustomPolicyProtocolUDP', 'DdosCustomPolicyProtocolSyn'
 28490  	Protocol DdosCustomPolicyProtocol `json:"protocol,omitempty"`
 28491  	// TriggerRateOverride - The customized DDoS protection trigger rate.
 28492  	TriggerRateOverride *string `json:"triggerRateOverride,omitempty"`
 28493  	// SourceRateOverride - The customized DDoS protection source rate.
 28494  	SourceRateOverride *string `json:"sourceRateOverride,omitempty"`
 28495  	// TriggerSensitivityOverride - The customized DDoS protection trigger rate sensitivity degrees. High: Trigger rate set with most sensitivity w.r.t. normal traffic. Default: Trigger rate set with moderate sensitivity w.r.t. normal traffic. Low: Trigger rate set with less sensitivity w.r.t. normal traffic. Relaxed: Trigger rate set with least sensitivity w.r.t. normal traffic. Possible values include: 'Relaxed', 'Low', 'Default', 'High'
 28496  	TriggerSensitivityOverride DdosCustomPolicyTriggerSensitivityOverride `json:"triggerSensitivityOverride,omitempty"`
 28497  }
 28498  
 28499  // PublicIPAddress public IP address resource.
 28500  type PublicIPAddress struct {
 28501  	autorest.Response `json:"-"`
 28502  	// Sku - The public IP address SKU.
 28503  	Sku *PublicIPAddressSku `json:"sku,omitempty"`
 28504  	// PublicIPAddressPropertiesFormat - Public IP address properties.
 28505  	*PublicIPAddressPropertiesFormat `json:"properties,omitempty"`
 28506  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 28507  	Etag *string `json:"etag,omitempty"`
 28508  	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
 28509  	Zones *[]string `json:"zones,omitempty"`
 28510  	// ID - Resource ID.
 28511  	ID *string `json:"id,omitempty"`
 28512  	// Name - READ-ONLY; Resource name.
 28513  	Name *string `json:"name,omitempty"`
 28514  	// Type - READ-ONLY; Resource type.
 28515  	Type *string `json:"type,omitempty"`
 28516  	// Location - Resource location.
 28517  	Location *string `json:"location,omitempty"`
 28518  	// Tags - Resource tags.
 28519  	Tags map[string]*string `json:"tags"`
 28520  }
 28521  
 28522  // MarshalJSON is the custom marshaler for PublicIPAddress.
 28523  func (pia PublicIPAddress) MarshalJSON() ([]byte, error) {
 28524  	objectMap := make(map[string]interface{})
 28525  	if pia.Sku != nil {
 28526  		objectMap["sku"] = pia.Sku
 28527  	}
 28528  	if pia.PublicIPAddressPropertiesFormat != nil {
 28529  		objectMap["properties"] = pia.PublicIPAddressPropertiesFormat
 28530  	}
 28531  	if pia.Zones != nil {
 28532  		objectMap["zones"] = pia.Zones
 28533  	}
 28534  	if pia.ID != nil {
 28535  		objectMap["id"] = pia.ID
 28536  	}
 28537  	if pia.Location != nil {
 28538  		objectMap["location"] = pia.Location
 28539  	}
 28540  	if pia.Tags != nil {
 28541  		objectMap["tags"] = pia.Tags
 28542  	}
 28543  	return json.Marshal(objectMap)
 28544  }
 28545  
 28546  // UnmarshalJSON is the custom unmarshaler for PublicIPAddress struct.
 28547  func (pia *PublicIPAddress) UnmarshalJSON(body []byte) error {
 28548  	var m map[string]*json.RawMessage
 28549  	err := json.Unmarshal(body, &m)
 28550  	if err != nil {
 28551  		return err
 28552  	}
 28553  	for k, v := range m {
 28554  		switch k {
 28555  		case "sku":
 28556  			if v != nil {
 28557  				var sku PublicIPAddressSku
 28558  				err = json.Unmarshal(*v, &sku)
 28559  				if err != nil {
 28560  					return err
 28561  				}
 28562  				pia.Sku = &sku
 28563  			}
 28564  		case "properties":
 28565  			if v != nil {
 28566  				var publicIPAddressPropertiesFormat PublicIPAddressPropertiesFormat
 28567  				err = json.Unmarshal(*v, &publicIPAddressPropertiesFormat)
 28568  				if err != nil {
 28569  					return err
 28570  				}
 28571  				pia.PublicIPAddressPropertiesFormat = &publicIPAddressPropertiesFormat
 28572  			}
 28573  		case "etag":
 28574  			if v != nil {
 28575  				var etag string
 28576  				err = json.Unmarshal(*v, &etag)
 28577  				if err != nil {
 28578  					return err
 28579  				}
 28580  				pia.Etag = &etag
 28581  			}
 28582  		case "zones":
 28583  			if v != nil {
 28584  				var zones []string
 28585  				err = json.Unmarshal(*v, &zones)
 28586  				if err != nil {
 28587  					return err
 28588  				}
 28589  				pia.Zones = &zones
 28590  			}
 28591  		case "id":
 28592  			if v != nil {
 28593  				var ID string
 28594  				err = json.Unmarshal(*v, &ID)
 28595  				if err != nil {
 28596  					return err
 28597  				}
 28598  				pia.ID = &ID
 28599  			}
 28600  		case "name":
 28601  			if v != nil {
 28602  				var name string
 28603  				err = json.Unmarshal(*v, &name)
 28604  				if err != nil {
 28605  					return err
 28606  				}
 28607  				pia.Name = &name
 28608  			}
 28609  		case "type":
 28610  			if v != nil {
 28611  				var typeVar string
 28612  				err = json.Unmarshal(*v, &typeVar)
 28613  				if err != nil {
 28614  					return err
 28615  				}
 28616  				pia.Type = &typeVar
 28617  			}
 28618  		case "location":
 28619  			if v != nil {
 28620  				var location string
 28621  				err = json.Unmarshal(*v, &location)
 28622  				if err != nil {
 28623  					return err
 28624  				}
 28625  				pia.Location = &location
 28626  			}
 28627  		case "tags":
 28628  			if v != nil {
 28629  				var tags map[string]*string
 28630  				err = json.Unmarshal(*v, &tags)
 28631  				if err != nil {
 28632  					return err
 28633  				}
 28634  				pia.Tags = tags
 28635  			}
 28636  		}
 28637  	}
 28638  
 28639  	return nil
 28640  }
 28641  
 28642  // PublicIPAddressDNSSettings contains FQDN of the DNS record associated with the public IP address.
 28643  type PublicIPAddressDNSSettings struct {
 28644  	// DomainNameLabel - The domain name label. The concatenation of the domain name label and the regionalized DNS zone make up the fully qualified domain name associated with the public IP address. If a domain name label is specified, an A DNS record is created for the public IP in the Microsoft Azure DNS system.
 28645  	DomainNameLabel *string `json:"domainNameLabel,omitempty"`
 28646  	// Fqdn - The Fully Qualified Domain Name of the A DNS record associated with the public IP. This is the concatenation of the domainNameLabel and the regionalized DNS zone.
 28647  	Fqdn *string `json:"fqdn,omitempty"`
 28648  	// ReverseFqdn - The reverse FQDN. A user-visible, fully qualified domain name that resolves to this public IP address. If the reverseFqdn is specified, then a PTR DNS record is created pointing from the IP address in the in-addr.arpa domain to the reverse FQDN.
 28649  	ReverseFqdn *string `json:"reverseFqdn,omitempty"`
 28650  }
 28651  
 28652  // PublicIPAddressesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 28653  // long-running operation.
 28654  type PublicIPAddressesCreateOrUpdateFuture struct {
 28655  	azure.FutureAPI
 28656  	// Result returns the result of the asynchronous operation.
 28657  	// If the operation has not completed it will return an error.
 28658  	Result func(PublicIPAddressesClient) (PublicIPAddress, error)
 28659  }
 28660  
 28661  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 28662  func (future *PublicIPAddressesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 28663  	var azFuture azure.Future
 28664  	if err := json.Unmarshal(body, &azFuture); err != nil {
 28665  		return err
 28666  	}
 28667  	future.FutureAPI = &azFuture
 28668  	future.Result = future.result
 28669  	return nil
 28670  }
 28671  
 28672  // result is the default implementation for PublicIPAddressesCreateOrUpdateFuture.Result.
 28673  func (future *PublicIPAddressesCreateOrUpdateFuture) result(client PublicIPAddressesClient) (pia PublicIPAddress, err error) {
 28674  	var done bool
 28675  	done, err = future.DoneWithContext(context.Background(), client)
 28676  	if err != nil {
 28677  		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 28678  		return
 28679  	}
 28680  	if !done {
 28681  		pia.Response.Response = future.Response()
 28682  		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesCreateOrUpdateFuture")
 28683  		return
 28684  	}
 28685  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 28686  	if pia.Response.Response, err = future.GetResult(sender); err == nil && pia.Response.Response.StatusCode != http.StatusNoContent {
 28687  		pia, err = client.CreateOrUpdateResponder(pia.Response.Response)
 28688  		if err != nil {
 28689  			err = autorest.NewErrorWithError(err, "network.PublicIPAddressesCreateOrUpdateFuture", "Result", pia.Response.Response, "Failure responding to request")
 28690  		}
 28691  	}
 28692  	return
 28693  }
 28694  
 28695  // PublicIPAddressesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 28696  // operation.
 28697  type PublicIPAddressesDeleteFuture struct {
 28698  	azure.FutureAPI
 28699  	// Result returns the result of the asynchronous operation.
 28700  	// If the operation has not completed it will return an error.
 28701  	Result func(PublicIPAddressesClient) (autorest.Response, error)
 28702  }
 28703  
 28704  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 28705  func (future *PublicIPAddressesDeleteFuture) UnmarshalJSON(body []byte) error {
 28706  	var azFuture azure.Future
 28707  	if err := json.Unmarshal(body, &azFuture); err != nil {
 28708  		return err
 28709  	}
 28710  	future.FutureAPI = &azFuture
 28711  	future.Result = future.result
 28712  	return nil
 28713  }
 28714  
 28715  // result is the default implementation for PublicIPAddressesDeleteFuture.Result.
 28716  func (future *PublicIPAddressesDeleteFuture) result(client PublicIPAddressesClient) (ar autorest.Response, err error) {
 28717  	var done bool
 28718  	done, err = future.DoneWithContext(context.Background(), client)
 28719  	if err != nil {
 28720  		err = autorest.NewErrorWithError(err, "network.PublicIPAddressesDeleteFuture", "Result", future.Response(), "Polling failure")
 28721  		return
 28722  	}
 28723  	if !done {
 28724  		ar.Response = future.Response()
 28725  		err = azure.NewAsyncOpIncompleteError("network.PublicIPAddressesDeleteFuture")
 28726  		return
 28727  	}
 28728  	ar.Response = future.Response()
 28729  	return
 28730  }
 28731  
 28732  // PublicIPAddressListResult response for ListPublicIpAddresses API service call.
 28733  type PublicIPAddressListResult struct {
 28734  	autorest.Response `json:"-"`
 28735  	// Value - A list of public IP addresses that exists in a resource group.
 28736  	Value *[]PublicIPAddress `json:"value,omitempty"`
 28737  	// NextLink - The URL to get the next set of results.
 28738  	NextLink *string `json:"nextLink,omitempty"`
 28739  }
 28740  
 28741  // PublicIPAddressListResultIterator provides access to a complete listing of PublicIPAddress values.
 28742  type PublicIPAddressListResultIterator struct {
 28743  	i    int
 28744  	page PublicIPAddressListResultPage
 28745  }
 28746  
 28747  // NextWithContext advances to the next value.  If there was an error making
 28748  // the request the iterator does not advance and the error is returned.
 28749  func (iter *PublicIPAddressListResultIterator) NextWithContext(ctx context.Context) (err error) {
 28750  	if tracing.IsEnabled() {
 28751  		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultIterator.NextWithContext")
 28752  		defer func() {
 28753  			sc := -1
 28754  			if iter.Response().Response.Response != nil {
 28755  				sc = iter.Response().Response.Response.StatusCode
 28756  			}
 28757  			tracing.EndSpan(ctx, sc, err)
 28758  		}()
 28759  	}
 28760  	iter.i++
 28761  	if iter.i < len(iter.page.Values()) {
 28762  		return nil
 28763  	}
 28764  	err = iter.page.NextWithContext(ctx)
 28765  	if err != nil {
 28766  		iter.i--
 28767  		return err
 28768  	}
 28769  	iter.i = 0
 28770  	return nil
 28771  }
 28772  
 28773  // Next advances to the next value.  If there was an error making
 28774  // the request the iterator does not advance and the error is returned.
 28775  // Deprecated: Use NextWithContext() instead.
 28776  func (iter *PublicIPAddressListResultIterator) Next() error {
 28777  	return iter.NextWithContext(context.Background())
 28778  }
 28779  
 28780  // NotDone returns true if the enumeration should be started or is not yet complete.
 28781  func (iter PublicIPAddressListResultIterator) NotDone() bool {
 28782  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 28783  }
 28784  
 28785  // Response returns the raw server response from the last page request.
 28786  func (iter PublicIPAddressListResultIterator) Response() PublicIPAddressListResult {
 28787  	return iter.page.Response()
 28788  }
 28789  
 28790  // Value returns the current value or a zero-initialized value if the
 28791  // iterator has advanced beyond the end of the collection.
 28792  func (iter PublicIPAddressListResultIterator) Value() PublicIPAddress {
 28793  	if !iter.page.NotDone() {
 28794  		return PublicIPAddress{}
 28795  	}
 28796  	return iter.page.Values()[iter.i]
 28797  }
 28798  
 28799  // Creates a new instance of the PublicIPAddressListResultIterator type.
 28800  func NewPublicIPAddressListResultIterator(page PublicIPAddressListResultPage) PublicIPAddressListResultIterator {
 28801  	return PublicIPAddressListResultIterator{page: page}
 28802  }
 28803  
 28804  // IsEmpty returns true if the ListResult contains no values.
 28805  func (pialr PublicIPAddressListResult) IsEmpty() bool {
 28806  	return pialr.Value == nil || len(*pialr.Value) == 0
 28807  }
 28808  
 28809  // hasNextLink returns true if the NextLink is not empty.
 28810  func (pialr PublicIPAddressListResult) hasNextLink() bool {
 28811  	return pialr.NextLink != nil && len(*pialr.NextLink) != 0
 28812  }
 28813  
 28814  // publicIPAddressListResultPreparer prepares a request to retrieve the next set of results.
 28815  // It returns nil if no more results exist.
 28816  func (pialr PublicIPAddressListResult) publicIPAddressListResultPreparer(ctx context.Context) (*http.Request, error) {
 28817  	if !pialr.hasNextLink() {
 28818  		return nil, nil
 28819  	}
 28820  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 28821  		autorest.AsJSON(),
 28822  		autorest.AsGet(),
 28823  		autorest.WithBaseURL(to.String(pialr.NextLink)))
 28824  }
 28825  
 28826  // PublicIPAddressListResultPage contains a page of PublicIPAddress values.
 28827  type PublicIPAddressListResultPage struct {
 28828  	fn    func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)
 28829  	pialr PublicIPAddressListResult
 28830  }
 28831  
 28832  // NextWithContext advances to the next page of values.  If there was an error making
 28833  // the request the page does not advance and the error is returned.
 28834  func (page *PublicIPAddressListResultPage) NextWithContext(ctx context.Context) (err error) {
 28835  	if tracing.IsEnabled() {
 28836  		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPAddressListResultPage.NextWithContext")
 28837  		defer func() {
 28838  			sc := -1
 28839  			if page.Response().Response.Response != nil {
 28840  				sc = page.Response().Response.Response.StatusCode
 28841  			}
 28842  			tracing.EndSpan(ctx, sc, err)
 28843  		}()
 28844  	}
 28845  	for {
 28846  		next, err := page.fn(ctx, page.pialr)
 28847  		if err != nil {
 28848  			return err
 28849  		}
 28850  		page.pialr = next
 28851  		if !next.hasNextLink() || !next.IsEmpty() {
 28852  			break
 28853  		}
 28854  	}
 28855  	return nil
 28856  }
 28857  
 28858  // Next advances to the next page of values.  If there was an error making
 28859  // the request the page does not advance and the error is returned.
 28860  // Deprecated: Use NextWithContext() instead.
 28861  func (page *PublicIPAddressListResultPage) Next() error {
 28862  	return page.NextWithContext(context.Background())
 28863  }
 28864  
 28865  // NotDone returns true if the page enumeration should be started or is not yet complete.
 28866  func (page PublicIPAddressListResultPage) NotDone() bool {
 28867  	return !page.pialr.IsEmpty()
 28868  }
 28869  
 28870  // Response returns the raw server response from the last page request.
 28871  func (page PublicIPAddressListResultPage) Response() PublicIPAddressListResult {
 28872  	return page.pialr
 28873  }
 28874  
 28875  // Values returns the slice of values for the current page or nil if there are no values.
 28876  func (page PublicIPAddressListResultPage) Values() []PublicIPAddress {
 28877  	if page.pialr.IsEmpty() {
 28878  		return nil
 28879  	}
 28880  	return *page.pialr.Value
 28881  }
 28882  
 28883  // Creates a new instance of the PublicIPAddressListResultPage type.
 28884  func NewPublicIPAddressListResultPage(cur PublicIPAddressListResult, getNextPage func(context.Context, PublicIPAddressListResult) (PublicIPAddressListResult, error)) PublicIPAddressListResultPage {
 28885  	return PublicIPAddressListResultPage{
 28886  		fn:    getNextPage,
 28887  		pialr: cur,
 28888  	}
 28889  }
 28890  
 28891  // PublicIPAddressPropertiesFormat public IP address properties.
 28892  type PublicIPAddressPropertiesFormat struct {
 28893  	// PublicIPAllocationMethod - The public IP address allocation method. Possible values include: 'Static', 'Dynamic'
 28894  	PublicIPAllocationMethod IPAllocationMethod `json:"publicIPAllocationMethod,omitempty"`
 28895  	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
 28896  	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
 28897  	// IPConfiguration - READ-ONLY; The IP configuration associated with the public IP address.
 28898  	IPConfiguration *IPConfiguration `json:"ipConfiguration,omitempty"`
 28899  	// DNSSettings - The FQDN of the DNS record associated with the public IP address.
 28900  	DNSSettings *PublicIPAddressDNSSettings `json:"dnsSettings,omitempty"`
 28901  	// DdosSettings - The DDoS protection custom policy associated with the public IP address.
 28902  	DdosSettings *DdosSettings `json:"ddosSettings,omitempty"`
 28903  	// IPTags - The list of tags associated with the public IP address.
 28904  	IPTags *[]IPTag `json:"ipTags,omitempty"`
 28905  	// IPAddress - The IP address associated with the public IP address resource.
 28906  	IPAddress *string `json:"ipAddress,omitempty"`
 28907  	// PublicIPPrefix - The Public IP Prefix this Public IP Address should be allocated from.
 28908  	PublicIPPrefix *SubResource `json:"publicIPPrefix,omitempty"`
 28909  	// IdleTimeoutInMinutes - The idle timeout of the public IP address.
 28910  	IdleTimeoutInMinutes *int32 `json:"idleTimeoutInMinutes,omitempty"`
 28911  	// ResourceGUID - READ-ONLY; The resource GUID property of the public IP address resource.
 28912  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 28913  	// ProvisioningState - READ-ONLY; The provisioning state of the public IP address resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 28914  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 28915  }
 28916  
 28917  // MarshalJSON is the custom marshaler for PublicIPAddressPropertiesFormat.
 28918  func (piapf PublicIPAddressPropertiesFormat) MarshalJSON() ([]byte, error) {
 28919  	objectMap := make(map[string]interface{})
 28920  	if piapf.PublicIPAllocationMethod != "" {
 28921  		objectMap["publicIPAllocationMethod"] = piapf.PublicIPAllocationMethod
 28922  	}
 28923  	if piapf.PublicIPAddressVersion != "" {
 28924  		objectMap["publicIPAddressVersion"] = piapf.PublicIPAddressVersion
 28925  	}
 28926  	if piapf.DNSSettings != nil {
 28927  		objectMap["dnsSettings"] = piapf.DNSSettings
 28928  	}
 28929  	if piapf.DdosSettings != nil {
 28930  		objectMap["ddosSettings"] = piapf.DdosSettings
 28931  	}
 28932  	if piapf.IPTags != nil {
 28933  		objectMap["ipTags"] = piapf.IPTags
 28934  	}
 28935  	if piapf.IPAddress != nil {
 28936  		objectMap["ipAddress"] = piapf.IPAddress
 28937  	}
 28938  	if piapf.PublicIPPrefix != nil {
 28939  		objectMap["publicIPPrefix"] = piapf.PublicIPPrefix
 28940  	}
 28941  	if piapf.IdleTimeoutInMinutes != nil {
 28942  		objectMap["idleTimeoutInMinutes"] = piapf.IdleTimeoutInMinutes
 28943  	}
 28944  	return json.Marshal(objectMap)
 28945  }
 28946  
 28947  // PublicIPAddressSku SKU of a public IP address.
 28948  type PublicIPAddressSku struct {
 28949  	// Name - Name of a public IP address SKU. Possible values include: 'PublicIPAddressSkuNameBasic', 'PublicIPAddressSkuNameStandard'
 28950  	Name PublicIPAddressSkuName `json:"name,omitempty"`
 28951  }
 28952  
 28953  // PublicIPPrefix public IP prefix resource.
 28954  type PublicIPPrefix struct {
 28955  	autorest.Response `json:"-"`
 28956  	// Sku - The public IP prefix SKU.
 28957  	Sku *PublicIPPrefixSku `json:"sku,omitempty"`
 28958  	// PublicIPPrefixPropertiesFormat - Public IP prefix properties.
 28959  	*PublicIPPrefixPropertiesFormat `json:"properties,omitempty"`
 28960  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 28961  	Etag *string `json:"etag,omitempty"`
 28962  	// Zones - A list of availability zones denoting the IP allocated for the resource needs to come from.
 28963  	Zones *[]string `json:"zones,omitempty"`
 28964  	// ID - Resource ID.
 28965  	ID *string `json:"id,omitempty"`
 28966  	// Name - READ-ONLY; Resource name.
 28967  	Name *string `json:"name,omitempty"`
 28968  	// Type - READ-ONLY; Resource type.
 28969  	Type *string `json:"type,omitempty"`
 28970  	// Location - Resource location.
 28971  	Location *string `json:"location,omitempty"`
 28972  	// Tags - Resource tags.
 28973  	Tags map[string]*string `json:"tags"`
 28974  }
 28975  
 28976  // MarshalJSON is the custom marshaler for PublicIPPrefix.
 28977  func (pip PublicIPPrefix) MarshalJSON() ([]byte, error) {
 28978  	objectMap := make(map[string]interface{})
 28979  	if pip.Sku != nil {
 28980  		objectMap["sku"] = pip.Sku
 28981  	}
 28982  	if pip.PublicIPPrefixPropertiesFormat != nil {
 28983  		objectMap["properties"] = pip.PublicIPPrefixPropertiesFormat
 28984  	}
 28985  	if pip.Zones != nil {
 28986  		objectMap["zones"] = pip.Zones
 28987  	}
 28988  	if pip.ID != nil {
 28989  		objectMap["id"] = pip.ID
 28990  	}
 28991  	if pip.Location != nil {
 28992  		objectMap["location"] = pip.Location
 28993  	}
 28994  	if pip.Tags != nil {
 28995  		objectMap["tags"] = pip.Tags
 28996  	}
 28997  	return json.Marshal(objectMap)
 28998  }
 28999  
 29000  // UnmarshalJSON is the custom unmarshaler for PublicIPPrefix struct.
 29001  func (pip *PublicIPPrefix) UnmarshalJSON(body []byte) error {
 29002  	var m map[string]*json.RawMessage
 29003  	err := json.Unmarshal(body, &m)
 29004  	if err != nil {
 29005  		return err
 29006  	}
 29007  	for k, v := range m {
 29008  		switch k {
 29009  		case "sku":
 29010  			if v != nil {
 29011  				var sku PublicIPPrefixSku
 29012  				err = json.Unmarshal(*v, &sku)
 29013  				if err != nil {
 29014  					return err
 29015  				}
 29016  				pip.Sku = &sku
 29017  			}
 29018  		case "properties":
 29019  			if v != nil {
 29020  				var publicIPPrefixPropertiesFormat PublicIPPrefixPropertiesFormat
 29021  				err = json.Unmarshal(*v, &publicIPPrefixPropertiesFormat)
 29022  				if err != nil {
 29023  					return err
 29024  				}
 29025  				pip.PublicIPPrefixPropertiesFormat = &publicIPPrefixPropertiesFormat
 29026  			}
 29027  		case "etag":
 29028  			if v != nil {
 29029  				var etag string
 29030  				err = json.Unmarshal(*v, &etag)
 29031  				if err != nil {
 29032  					return err
 29033  				}
 29034  				pip.Etag = &etag
 29035  			}
 29036  		case "zones":
 29037  			if v != nil {
 29038  				var zones []string
 29039  				err = json.Unmarshal(*v, &zones)
 29040  				if err != nil {
 29041  					return err
 29042  				}
 29043  				pip.Zones = &zones
 29044  			}
 29045  		case "id":
 29046  			if v != nil {
 29047  				var ID string
 29048  				err = json.Unmarshal(*v, &ID)
 29049  				if err != nil {
 29050  					return err
 29051  				}
 29052  				pip.ID = &ID
 29053  			}
 29054  		case "name":
 29055  			if v != nil {
 29056  				var name string
 29057  				err = json.Unmarshal(*v, &name)
 29058  				if err != nil {
 29059  					return err
 29060  				}
 29061  				pip.Name = &name
 29062  			}
 29063  		case "type":
 29064  			if v != nil {
 29065  				var typeVar string
 29066  				err = json.Unmarshal(*v, &typeVar)
 29067  				if err != nil {
 29068  					return err
 29069  				}
 29070  				pip.Type = &typeVar
 29071  			}
 29072  		case "location":
 29073  			if v != nil {
 29074  				var location string
 29075  				err = json.Unmarshal(*v, &location)
 29076  				if err != nil {
 29077  					return err
 29078  				}
 29079  				pip.Location = &location
 29080  			}
 29081  		case "tags":
 29082  			if v != nil {
 29083  				var tags map[string]*string
 29084  				err = json.Unmarshal(*v, &tags)
 29085  				if err != nil {
 29086  					return err
 29087  				}
 29088  				pip.Tags = tags
 29089  			}
 29090  		}
 29091  	}
 29092  
 29093  	return nil
 29094  }
 29095  
 29096  // PublicIPPrefixesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 29097  // long-running operation.
 29098  type PublicIPPrefixesCreateOrUpdateFuture struct {
 29099  	azure.FutureAPI
 29100  	// Result returns the result of the asynchronous operation.
 29101  	// If the operation has not completed it will return an error.
 29102  	Result func(PublicIPPrefixesClient) (PublicIPPrefix, error)
 29103  }
 29104  
 29105  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 29106  func (future *PublicIPPrefixesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 29107  	var azFuture azure.Future
 29108  	if err := json.Unmarshal(body, &azFuture); err != nil {
 29109  		return err
 29110  	}
 29111  	future.FutureAPI = &azFuture
 29112  	future.Result = future.result
 29113  	return nil
 29114  }
 29115  
 29116  // result is the default implementation for PublicIPPrefixesCreateOrUpdateFuture.Result.
 29117  func (future *PublicIPPrefixesCreateOrUpdateFuture) result(client PublicIPPrefixesClient) (pip PublicIPPrefix, err error) {
 29118  	var done bool
 29119  	done, err = future.DoneWithContext(context.Background(), client)
 29120  	if err != nil {
 29121  		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 29122  		return
 29123  	}
 29124  	if !done {
 29125  		pip.Response.Response = future.Response()
 29126  		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesCreateOrUpdateFuture")
 29127  		return
 29128  	}
 29129  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 29130  	if pip.Response.Response, err = future.GetResult(sender); err == nil && pip.Response.Response.StatusCode != http.StatusNoContent {
 29131  		pip, err = client.CreateOrUpdateResponder(pip.Response.Response)
 29132  		if err != nil {
 29133  			err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesCreateOrUpdateFuture", "Result", pip.Response.Response, "Failure responding to request")
 29134  		}
 29135  	}
 29136  	return
 29137  }
 29138  
 29139  // PublicIPPrefixesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 29140  // operation.
 29141  type PublicIPPrefixesDeleteFuture struct {
 29142  	azure.FutureAPI
 29143  	// Result returns the result of the asynchronous operation.
 29144  	// If the operation has not completed it will return an error.
 29145  	Result func(PublicIPPrefixesClient) (autorest.Response, error)
 29146  }
 29147  
 29148  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 29149  func (future *PublicIPPrefixesDeleteFuture) UnmarshalJSON(body []byte) error {
 29150  	var azFuture azure.Future
 29151  	if err := json.Unmarshal(body, &azFuture); err != nil {
 29152  		return err
 29153  	}
 29154  	future.FutureAPI = &azFuture
 29155  	future.Result = future.result
 29156  	return nil
 29157  }
 29158  
 29159  // result is the default implementation for PublicIPPrefixesDeleteFuture.Result.
 29160  func (future *PublicIPPrefixesDeleteFuture) result(client PublicIPPrefixesClient) (ar autorest.Response, err error) {
 29161  	var done bool
 29162  	done, err = future.DoneWithContext(context.Background(), client)
 29163  	if err != nil {
 29164  		err = autorest.NewErrorWithError(err, "network.PublicIPPrefixesDeleteFuture", "Result", future.Response(), "Polling failure")
 29165  		return
 29166  	}
 29167  	if !done {
 29168  		ar.Response = future.Response()
 29169  		err = azure.NewAsyncOpIncompleteError("network.PublicIPPrefixesDeleteFuture")
 29170  		return
 29171  	}
 29172  	ar.Response = future.Response()
 29173  	return
 29174  }
 29175  
 29176  // PublicIPPrefixListResult response for ListPublicIpPrefixes API service call.
 29177  type PublicIPPrefixListResult struct {
 29178  	autorest.Response `json:"-"`
 29179  	// Value - A list of public IP prefixes that exists in a resource group.
 29180  	Value *[]PublicIPPrefix `json:"value,omitempty"`
 29181  	// NextLink - The URL to get the next set of results.
 29182  	NextLink *string `json:"nextLink,omitempty"`
 29183  }
 29184  
 29185  // PublicIPPrefixListResultIterator provides access to a complete listing of PublicIPPrefix values.
 29186  type PublicIPPrefixListResultIterator struct {
 29187  	i    int
 29188  	page PublicIPPrefixListResultPage
 29189  }
 29190  
 29191  // NextWithContext advances to the next value.  If there was an error making
 29192  // the request the iterator does not advance and the error is returned.
 29193  func (iter *PublicIPPrefixListResultIterator) NextWithContext(ctx context.Context) (err error) {
 29194  	if tracing.IsEnabled() {
 29195  		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultIterator.NextWithContext")
 29196  		defer func() {
 29197  			sc := -1
 29198  			if iter.Response().Response.Response != nil {
 29199  				sc = iter.Response().Response.Response.StatusCode
 29200  			}
 29201  			tracing.EndSpan(ctx, sc, err)
 29202  		}()
 29203  	}
 29204  	iter.i++
 29205  	if iter.i < len(iter.page.Values()) {
 29206  		return nil
 29207  	}
 29208  	err = iter.page.NextWithContext(ctx)
 29209  	if err != nil {
 29210  		iter.i--
 29211  		return err
 29212  	}
 29213  	iter.i = 0
 29214  	return nil
 29215  }
 29216  
 29217  // Next advances to the next value.  If there was an error making
 29218  // the request the iterator does not advance and the error is returned.
 29219  // Deprecated: Use NextWithContext() instead.
 29220  func (iter *PublicIPPrefixListResultIterator) Next() error {
 29221  	return iter.NextWithContext(context.Background())
 29222  }
 29223  
 29224  // NotDone returns true if the enumeration should be started or is not yet complete.
 29225  func (iter PublicIPPrefixListResultIterator) NotDone() bool {
 29226  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 29227  }
 29228  
 29229  // Response returns the raw server response from the last page request.
 29230  func (iter PublicIPPrefixListResultIterator) Response() PublicIPPrefixListResult {
 29231  	return iter.page.Response()
 29232  }
 29233  
 29234  // Value returns the current value or a zero-initialized value if the
 29235  // iterator has advanced beyond the end of the collection.
 29236  func (iter PublicIPPrefixListResultIterator) Value() PublicIPPrefix {
 29237  	if !iter.page.NotDone() {
 29238  		return PublicIPPrefix{}
 29239  	}
 29240  	return iter.page.Values()[iter.i]
 29241  }
 29242  
 29243  // Creates a new instance of the PublicIPPrefixListResultIterator type.
 29244  func NewPublicIPPrefixListResultIterator(page PublicIPPrefixListResultPage) PublicIPPrefixListResultIterator {
 29245  	return PublicIPPrefixListResultIterator{page: page}
 29246  }
 29247  
 29248  // IsEmpty returns true if the ListResult contains no values.
 29249  func (piplr PublicIPPrefixListResult) IsEmpty() bool {
 29250  	return piplr.Value == nil || len(*piplr.Value) == 0
 29251  }
 29252  
 29253  // hasNextLink returns true if the NextLink is not empty.
 29254  func (piplr PublicIPPrefixListResult) hasNextLink() bool {
 29255  	return piplr.NextLink != nil && len(*piplr.NextLink) != 0
 29256  }
 29257  
 29258  // publicIPPrefixListResultPreparer prepares a request to retrieve the next set of results.
 29259  // It returns nil if no more results exist.
 29260  func (piplr PublicIPPrefixListResult) publicIPPrefixListResultPreparer(ctx context.Context) (*http.Request, error) {
 29261  	if !piplr.hasNextLink() {
 29262  		return nil, nil
 29263  	}
 29264  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 29265  		autorest.AsJSON(),
 29266  		autorest.AsGet(),
 29267  		autorest.WithBaseURL(to.String(piplr.NextLink)))
 29268  }
 29269  
 29270  // PublicIPPrefixListResultPage contains a page of PublicIPPrefix values.
 29271  type PublicIPPrefixListResultPage struct {
 29272  	fn    func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)
 29273  	piplr PublicIPPrefixListResult
 29274  }
 29275  
 29276  // NextWithContext advances to the next page of values.  If there was an error making
 29277  // the request the page does not advance and the error is returned.
 29278  func (page *PublicIPPrefixListResultPage) NextWithContext(ctx context.Context) (err error) {
 29279  	if tracing.IsEnabled() {
 29280  		ctx = tracing.StartSpan(ctx, fqdn+"/PublicIPPrefixListResultPage.NextWithContext")
 29281  		defer func() {
 29282  			sc := -1
 29283  			if page.Response().Response.Response != nil {
 29284  				sc = page.Response().Response.Response.StatusCode
 29285  			}
 29286  			tracing.EndSpan(ctx, sc, err)
 29287  		}()
 29288  	}
 29289  	for {
 29290  		next, err := page.fn(ctx, page.piplr)
 29291  		if err != nil {
 29292  			return err
 29293  		}
 29294  		page.piplr = next
 29295  		if !next.hasNextLink() || !next.IsEmpty() {
 29296  			break
 29297  		}
 29298  	}
 29299  	return nil
 29300  }
 29301  
 29302  // Next advances to the next page of values.  If there was an error making
 29303  // the request the page does not advance and the error is returned.
 29304  // Deprecated: Use NextWithContext() instead.
 29305  func (page *PublicIPPrefixListResultPage) Next() error {
 29306  	return page.NextWithContext(context.Background())
 29307  }
 29308  
 29309  // NotDone returns true if the page enumeration should be started or is not yet complete.
 29310  func (page PublicIPPrefixListResultPage) NotDone() bool {
 29311  	return !page.piplr.IsEmpty()
 29312  }
 29313  
 29314  // Response returns the raw server response from the last page request.
 29315  func (page PublicIPPrefixListResultPage) Response() PublicIPPrefixListResult {
 29316  	return page.piplr
 29317  }
 29318  
 29319  // Values returns the slice of values for the current page or nil if there are no values.
 29320  func (page PublicIPPrefixListResultPage) Values() []PublicIPPrefix {
 29321  	if page.piplr.IsEmpty() {
 29322  		return nil
 29323  	}
 29324  	return *page.piplr.Value
 29325  }
 29326  
 29327  // Creates a new instance of the PublicIPPrefixListResultPage type.
 29328  func NewPublicIPPrefixListResultPage(cur PublicIPPrefixListResult, getNextPage func(context.Context, PublicIPPrefixListResult) (PublicIPPrefixListResult, error)) PublicIPPrefixListResultPage {
 29329  	return PublicIPPrefixListResultPage{
 29330  		fn:    getNextPage,
 29331  		piplr: cur,
 29332  	}
 29333  }
 29334  
 29335  // PublicIPPrefixPropertiesFormat public IP prefix properties.
 29336  type PublicIPPrefixPropertiesFormat struct {
 29337  	// PublicIPAddressVersion - The public IP address version. Possible values include: 'IPv4', 'IPv6'
 29338  	PublicIPAddressVersion IPVersion `json:"publicIPAddressVersion,omitempty"`
 29339  	// IPTags - The list of tags associated with the public IP prefix.
 29340  	IPTags *[]IPTag `json:"ipTags,omitempty"`
 29341  	// PrefixLength - The Length of the Public IP Prefix.
 29342  	PrefixLength *int32 `json:"prefixLength,omitempty"`
 29343  	// IPPrefix - READ-ONLY; The allocated Prefix.
 29344  	IPPrefix *string `json:"ipPrefix,omitempty"`
 29345  	// PublicIPAddresses - READ-ONLY; The list of all referenced PublicIPAddresses.
 29346  	PublicIPAddresses *[]ReferencedPublicIPAddress `json:"publicIPAddresses,omitempty"`
 29347  	// LoadBalancerFrontendIPConfiguration - READ-ONLY; The reference to load balancer frontend IP configuration associated with the public IP prefix.
 29348  	LoadBalancerFrontendIPConfiguration *SubResource `json:"loadBalancerFrontendIpConfiguration,omitempty"`
 29349  	// ResourceGUID - READ-ONLY; The resource GUID property of the public IP prefix resource.
 29350  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 29351  	// ProvisioningState - READ-ONLY; The provisioning state of the public IP prefix resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 29352  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 29353  }
 29354  
 29355  // MarshalJSON is the custom marshaler for PublicIPPrefixPropertiesFormat.
 29356  func (pippf PublicIPPrefixPropertiesFormat) MarshalJSON() ([]byte, error) {
 29357  	objectMap := make(map[string]interface{})
 29358  	if pippf.PublicIPAddressVersion != "" {
 29359  		objectMap["publicIPAddressVersion"] = pippf.PublicIPAddressVersion
 29360  	}
 29361  	if pippf.IPTags != nil {
 29362  		objectMap["ipTags"] = pippf.IPTags
 29363  	}
 29364  	if pippf.PrefixLength != nil {
 29365  		objectMap["prefixLength"] = pippf.PrefixLength
 29366  	}
 29367  	return json.Marshal(objectMap)
 29368  }
 29369  
 29370  // PublicIPPrefixSku SKU of a public IP prefix.
 29371  type PublicIPPrefixSku struct {
 29372  	// Name - Name of a public IP prefix SKU. Possible values include: 'PublicIPPrefixSkuNameStandard'
 29373  	Name PublicIPPrefixSkuName `json:"name,omitempty"`
 29374  }
 29375  
 29376  // PutBastionShareableLinkAllFuture an abstraction for monitoring and retrieving the results of a
 29377  // long-running operation.
 29378  type PutBastionShareableLinkAllFuture struct {
 29379  	azure.FutureAPI
 29380  	// Result returns the result of the asynchronous operation.
 29381  	// If the operation has not completed it will return an error.
 29382  	Result func(BaseClient) (BastionShareableLinkListResultPage, error)
 29383  }
 29384  
 29385  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 29386  func (future *PutBastionShareableLinkAllFuture) UnmarshalJSON(body []byte) error {
 29387  	var azFuture azure.Future
 29388  	if err := json.Unmarshal(body, &azFuture); err != nil {
 29389  		return err
 29390  	}
 29391  	future.FutureAPI = &azFuture
 29392  	future.Result = future.result
 29393  	return nil
 29394  }
 29395  
 29396  // result is the default implementation for PutBastionShareableLinkAllFuture.Result.
 29397  func (future *PutBastionShareableLinkAllFuture) result(client BaseClient) (bsllrp BastionShareableLinkListResultPage, err error) {
 29398  	var done bool
 29399  	done, err = future.DoneWithContext(context.Background(), client)
 29400  	if err != nil {
 29401  		err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkAllFuture", "Result", future.Response(), "Polling failure")
 29402  		return
 29403  	}
 29404  	if !done {
 29405  		bsllrp.bsllr.Response.Response = future.Response()
 29406  		err = azure.NewAsyncOpIncompleteError("network.PutBastionShareableLinkAllFuture")
 29407  		return
 29408  	}
 29409  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 29410  	if bsllrp.bsllr.Response.Response, err = future.GetResult(sender); err == nil && bsllrp.bsllr.Response.Response.StatusCode != http.StatusNoContent {
 29411  		bsllrp, err = client.PutBastionShareableLinkResponder(bsllrp.bsllr.Response.Response)
 29412  		if err != nil {
 29413  			err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkAllFuture", "Result", bsllrp.bsllr.Response.Response, "Failure responding to request")
 29414  		}
 29415  	}
 29416  	return
 29417  }
 29418  
 29419  // PutBastionShareableLinkFuture an abstraction for monitoring and retrieving the results of a long-running
 29420  // operation.
 29421  type PutBastionShareableLinkFuture struct {
 29422  	azure.FutureAPI
 29423  	// Result returns the result of the asynchronous operation.
 29424  	// If the operation has not completed it will return an error.
 29425  	Result func(BaseClient) (BastionShareableLinkListResultPage, error)
 29426  }
 29427  
 29428  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 29429  func (future *PutBastionShareableLinkFuture) UnmarshalJSON(body []byte) error {
 29430  	var azFuture azure.Future
 29431  	if err := json.Unmarshal(body, &azFuture); err != nil {
 29432  		return err
 29433  	}
 29434  	future.FutureAPI = &azFuture
 29435  	future.Result = future.result
 29436  	return nil
 29437  }
 29438  
 29439  // result is the default implementation for PutBastionShareableLinkFuture.Result.
 29440  func (future *PutBastionShareableLinkFuture) result(client BaseClient) (bsllrp BastionShareableLinkListResultPage, err error) {
 29441  	var done bool
 29442  	done, err = future.DoneWithContext(context.Background(), client)
 29443  	if err != nil {
 29444  		err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkFuture", "Result", future.Response(), "Polling failure")
 29445  		return
 29446  	}
 29447  	if !done {
 29448  		bsllrp.bsllr.Response.Response = future.Response()
 29449  		err = azure.NewAsyncOpIncompleteError("network.PutBastionShareableLinkFuture")
 29450  		return
 29451  	}
 29452  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 29453  	if bsllrp.bsllr.Response.Response, err = future.GetResult(sender); err == nil && bsllrp.bsllr.Response.Response.StatusCode != http.StatusNoContent {
 29454  		bsllrp, err = client.PutBastionShareableLinkResponder(bsllrp.bsllr.Response.Response)
 29455  		if err != nil {
 29456  			err = autorest.NewErrorWithError(err, "network.PutBastionShareableLinkFuture", "Result", bsllrp.bsllr.Response.Response, "Failure responding to request")
 29457  		}
 29458  	}
 29459  	return
 29460  }
 29461  
 29462  // QueryTroubleshootingParameters parameters that define the resource to query the troubleshooting result.
 29463  type QueryTroubleshootingParameters struct {
 29464  	// TargetResourceID - The target resource ID to query the troubleshooting result.
 29465  	TargetResourceID *string `json:"targetResourceId,omitempty"`
 29466  }
 29467  
 29468  // RadiusServer radius Server Settings.
 29469  type RadiusServer struct {
 29470  	// RadiusServerAddress - The address of this radius server.
 29471  	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
 29472  	// RadiusServerScore - The initial score assigned to this radius server.
 29473  	RadiusServerScore *int64 `json:"radiusServerScore,omitempty"`
 29474  	// RadiusServerSecret - The secret used for this radius server.
 29475  	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
 29476  }
 29477  
 29478  // RecordSet a collective group of information about the record set information.
 29479  type RecordSet struct {
 29480  	// RecordType - Resource record type.
 29481  	RecordType *string `json:"recordType,omitempty"`
 29482  	// RecordSetName - Recordset name.
 29483  	RecordSetName *string `json:"recordSetName,omitempty"`
 29484  	// Fqdn - Fqdn that resolves to private endpoint ip address.
 29485  	Fqdn *string `json:"fqdn,omitempty"`
 29486  	// ProvisioningState - READ-ONLY; The provisioning state of the recordset. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 29487  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 29488  	// TTL - Recordset time to live.
 29489  	TTL *int32 `json:"ttl,omitempty"`
 29490  	// IPAddresses - The private ip address of the private endpoint.
 29491  	IPAddresses *[]string `json:"ipAddresses,omitempty"`
 29492  }
 29493  
 29494  // MarshalJSON is the custom marshaler for RecordSet.
 29495  func (rs RecordSet) MarshalJSON() ([]byte, error) {
 29496  	objectMap := make(map[string]interface{})
 29497  	if rs.RecordType != nil {
 29498  		objectMap["recordType"] = rs.RecordType
 29499  	}
 29500  	if rs.RecordSetName != nil {
 29501  		objectMap["recordSetName"] = rs.RecordSetName
 29502  	}
 29503  	if rs.Fqdn != nil {
 29504  		objectMap["fqdn"] = rs.Fqdn
 29505  	}
 29506  	if rs.TTL != nil {
 29507  		objectMap["ttl"] = rs.TTL
 29508  	}
 29509  	if rs.IPAddresses != nil {
 29510  		objectMap["ipAddresses"] = rs.IPAddresses
 29511  	}
 29512  	return json.Marshal(objectMap)
 29513  }
 29514  
 29515  // ReferencedPublicIPAddress reference to a public IP address.
 29516  type ReferencedPublicIPAddress struct {
 29517  	// ID - The PublicIPAddress Reference.
 29518  	ID *string `json:"id,omitempty"`
 29519  }
 29520  
 29521  // Resource common resource representation.
 29522  type Resource struct {
 29523  	// ID - Resource ID.
 29524  	ID *string `json:"id,omitempty"`
 29525  	// Name - READ-ONLY; Resource name.
 29526  	Name *string `json:"name,omitempty"`
 29527  	// Type - READ-ONLY; Resource type.
 29528  	Type *string `json:"type,omitempty"`
 29529  	// Location - Resource location.
 29530  	Location *string `json:"location,omitempty"`
 29531  	// Tags - Resource tags.
 29532  	Tags map[string]*string `json:"tags"`
 29533  }
 29534  
 29535  // MarshalJSON is the custom marshaler for Resource.
 29536  func (r Resource) MarshalJSON() ([]byte, error) {
 29537  	objectMap := make(map[string]interface{})
 29538  	if r.ID != nil {
 29539  		objectMap["id"] = r.ID
 29540  	}
 29541  	if r.Location != nil {
 29542  		objectMap["location"] = r.Location
 29543  	}
 29544  	if r.Tags != nil {
 29545  		objectMap["tags"] = r.Tags
 29546  	}
 29547  	return json.Marshal(objectMap)
 29548  }
 29549  
 29550  // ResourceNavigationLink resourceNavigationLink resource.
 29551  type ResourceNavigationLink struct {
 29552  	// ResourceNavigationLinkFormat - Resource navigation link properties format.
 29553  	*ResourceNavigationLinkFormat `json:"properties,omitempty"`
 29554  	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
 29555  	Name *string `json:"name,omitempty"`
 29556  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 29557  	Etag *string `json:"etag,omitempty"`
 29558  	// Type - READ-ONLY; Resource type.
 29559  	Type *string `json:"type,omitempty"`
 29560  	// ID - Resource ID.
 29561  	ID *string `json:"id,omitempty"`
 29562  }
 29563  
 29564  // MarshalJSON is the custom marshaler for ResourceNavigationLink.
 29565  func (rnl ResourceNavigationLink) MarshalJSON() ([]byte, error) {
 29566  	objectMap := make(map[string]interface{})
 29567  	if rnl.ResourceNavigationLinkFormat != nil {
 29568  		objectMap["properties"] = rnl.ResourceNavigationLinkFormat
 29569  	}
 29570  	if rnl.Name != nil {
 29571  		objectMap["name"] = rnl.Name
 29572  	}
 29573  	if rnl.ID != nil {
 29574  		objectMap["id"] = rnl.ID
 29575  	}
 29576  	return json.Marshal(objectMap)
 29577  }
 29578  
 29579  // UnmarshalJSON is the custom unmarshaler for ResourceNavigationLink struct.
 29580  func (rnl *ResourceNavigationLink) UnmarshalJSON(body []byte) error {
 29581  	var m map[string]*json.RawMessage
 29582  	err := json.Unmarshal(body, &m)
 29583  	if err != nil {
 29584  		return err
 29585  	}
 29586  	for k, v := range m {
 29587  		switch k {
 29588  		case "properties":
 29589  			if v != nil {
 29590  				var resourceNavigationLinkFormat ResourceNavigationLinkFormat
 29591  				err = json.Unmarshal(*v, &resourceNavigationLinkFormat)
 29592  				if err != nil {
 29593  					return err
 29594  				}
 29595  				rnl.ResourceNavigationLinkFormat = &resourceNavigationLinkFormat
 29596  			}
 29597  		case "name":
 29598  			if v != nil {
 29599  				var name string
 29600  				err = json.Unmarshal(*v, &name)
 29601  				if err != nil {
 29602  					return err
 29603  				}
 29604  				rnl.Name = &name
 29605  			}
 29606  		case "etag":
 29607  			if v != nil {
 29608  				var etag string
 29609  				err = json.Unmarshal(*v, &etag)
 29610  				if err != nil {
 29611  					return err
 29612  				}
 29613  				rnl.Etag = &etag
 29614  			}
 29615  		case "type":
 29616  			if v != nil {
 29617  				var typeVar string
 29618  				err = json.Unmarshal(*v, &typeVar)
 29619  				if err != nil {
 29620  					return err
 29621  				}
 29622  				rnl.Type = &typeVar
 29623  			}
 29624  		case "id":
 29625  			if v != nil {
 29626  				var ID string
 29627  				err = json.Unmarshal(*v, &ID)
 29628  				if err != nil {
 29629  					return err
 29630  				}
 29631  				rnl.ID = &ID
 29632  			}
 29633  		}
 29634  	}
 29635  
 29636  	return nil
 29637  }
 29638  
 29639  // ResourceNavigationLinkFormat properties of ResourceNavigationLink.
 29640  type ResourceNavigationLinkFormat struct {
 29641  	// LinkedResourceType - Resource type of the linked resource.
 29642  	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
 29643  	// Link - Link to the external resource.
 29644  	Link *string `json:"link,omitempty"`
 29645  	// ProvisioningState - READ-ONLY; The provisioning state of the resource navigation link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 29646  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 29647  }
 29648  
 29649  // MarshalJSON is the custom marshaler for ResourceNavigationLinkFormat.
 29650  func (rnlf ResourceNavigationLinkFormat) MarshalJSON() ([]byte, error) {
 29651  	objectMap := make(map[string]interface{})
 29652  	if rnlf.LinkedResourceType != nil {
 29653  		objectMap["linkedResourceType"] = rnlf.LinkedResourceType
 29654  	}
 29655  	if rnlf.Link != nil {
 29656  		objectMap["link"] = rnlf.Link
 29657  	}
 29658  	return json.Marshal(objectMap)
 29659  }
 29660  
 29661  // ResourceNavigationLinksListResult response for ResourceNavigationLinks_List operation.
 29662  type ResourceNavigationLinksListResult struct {
 29663  	autorest.Response `json:"-"`
 29664  	// Value - The resource navigation links in a subnet.
 29665  	Value *[]ResourceNavigationLink `json:"value,omitempty"`
 29666  	// NextLink - READ-ONLY; The URL to get the next set of results.
 29667  	NextLink *string `json:"nextLink,omitempty"`
 29668  }
 29669  
 29670  // MarshalJSON is the custom marshaler for ResourceNavigationLinksListResult.
 29671  func (rnllr ResourceNavigationLinksListResult) MarshalJSON() ([]byte, error) {
 29672  	objectMap := make(map[string]interface{})
 29673  	if rnllr.Value != nil {
 29674  		objectMap["value"] = rnllr.Value
 29675  	}
 29676  	return json.Marshal(objectMap)
 29677  }
 29678  
 29679  // ResourceSet the base resource set for visibility and auto-approval.
 29680  type ResourceSet struct {
 29681  	// Subscriptions - The list of subscriptions.
 29682  	Subscriptions *[]string `json:"subscriptions,omitempty"`
 29683  }
 29684  
 29685  // RetentionPolicyParameters parameters that define the retention policy for flow log.
 29686  type RetentionPolicyParameters struct {
 29687  	// Days - Number of days to retain flow log records.
 29688  	Days *int32 `json:"days,omitempty"`
 29689  	// Enabled - Flag to enable/disable retention.
 29690  	Enabled *bool `json:"enabled,omitempty"`
 29691  }
 29692  
 29693  // Route route resource.
 29694  type Route struct {
 29695  	autorest.Response `json:"-"`
 29696  	// RoutePropertiesFormat - Properties of the route.
 29697  	*RoutePropertiesFormat `json:"properties,omitempty"`
 29698  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 29699  	Name *string `json:"name,omitempty"`
 29700  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 29701  	Etag *string `json:"etag,omitempty"`
 29702  	// ID - Resource ID.
 29703  	ID *string `json:"id,omitempty"`
 29704  }
 29705  
 29706  // MarshalJSON is the custom marshaler for Route.
 29707  func (r Route) MarshalJSON() ([]byte, error) {
 29708  	objectMap := make(map[string]interface{})
 29709  	if r.RoutePropertiesFormat != nil {
 29710  		objectMap["properties"] = r.RoutePropertiesFormat
 29711  	}
 29712  	if r.Name != nil {
 29713  		objectMap["name"] = r.Name
 29714  	}
 29715  	if r.ID != nil {
 29716  		objectMap["id"] = r.ID
 29717  	}
 29718  	return json.Marshal(objectMap)
 29719  }
 29720  
 29721  // UnmarshalJSON is the custom unmarshaler for Route struct.
 29722  func (r *Route) UnmarshalJSON(body []byte) error {
 29723  	var m map[string]*json.RawMessage
 29724  	err := json.Unmarshal(body, &m)
 29725  	if err != nil {
 29726  		return err
 29727  	}
 29728  	for k, v := range m {
 29729  		switch k {
 29730  		case "properties":
 29731  			if v != nil {
 29732  				var routePropertiesFormat RoutePropertiesFormat
 29733  				err = json.Unmarshal(*v, &routePropertiesFormat)
 29734  				if err != nil {
 29735  					return err
 29736  				}
 29737  				r.RoutePropertiesFormat = &routePropertiesFormat
 29738  			}
 29739  		case "name":
 29740  			if v != nil {
 29741  				var name string
 29742  				err = json.Unmarshal(*v, &name)
 29743  				if err != nil {
 29744  					return err
 29745  				}
 29746  				r.Name = &name
 29747  			}
 29748  		case "etag":
 29749  			if v != nil {
 29750  				var etag string
 29751  				err = json.Unmarshal(*v, &etag)
 29752  				if err != nil {
 29753  					return err
 29754  				}
 29755  				r.Etag = &etag
 29756  			}
 29757  		case "id":
 29758  			if v != nil {
 29759  				var ID string
 29760  				err = json.Unmarshal(*v, &ID)
 29761  				if err != nil {
 29762  					return err
 29763  				}
 29764  				r.ID = &ID
 29765  			}
 29766  		}
 29767  	}
 29768  
 29769  	return nil
 29770  }
 29771  
 29772  // RouteFilter route Filter Resource.
 29773  type RouteFilter struct {
 29774  	autorest.Response `json:"-"`
 29775  	// RouteFilterPropertiesFormat - Properties of the route filter.
 29776  	*RouteFilterPropertiesFormat `json:"properties,omitempty"`
 29777  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 29778  	Etag *string `json:"etag,omitempty"`
 29779  	// ID - Resource ID.
 29780  	ID *string `json:"id,omitempty"`
 29781  	// Name - READ-ONLY; Resource name.
 29782  	Name *string `json:"name,omitempty"`
 29783  	// Type - READ-ONLY; Resource type.
 29784  	Type *string `json:"type,omitempty"`
 29785  	// Location - Resource location.
 29786  	Location *string `json:"location,omitempty"`
 29787  	// Tags - Resource tags.
 29788  	Tags map[string]*string `json:"tags"`
 29789  }
 29790  
 29791  // MarshalJSON is the custom marshaler for RouteFilter.
 29792  func (rf RouteFilter) MarshalJSON() ([]byte, error) {
 29793  	objectMap := make(map[string]interface{})
 29794  	if rf.RouteFilterPropertiesFormat != nil {
 29795  		objectMap["properties"] = rf.RouteFilterPropertiesFormat
 29796  	}
 29797  	if rf.ID != nil {
 29798  		objectMap["id"] = rf.ID
 29799  	}
 29800  	if rf.Location != nil {
 29801  		objectMap["location"] = rf.Location
 29802  	}
 29803  	if rf.Tags != nil {
 29804  		objectMap["tags"] = rf.Tags
 29805  	}
 29806  	return json.Marshal(objectMap)
 29807  }
 29808  
 29809  // UnmarshalJSON is the custom unmarshaler for RouteFilter struct.
 29810  func (rf *RouteFilter) UnmarshalJSON(body []byte) error {
 29811  	var m map[string]*json.RawMessage
 29812  	err := json.Unmarshal(body, &m)
 29813  	if err != nil {
 29814  		return err
 29815  	}
 29816  	for k, v := range m {
 29817  		switch k {
 29818  		case "properties":
 29819  			if v != nil {
 29820  				var routeFilterPropertiesFormat RouteFilterPropertiesFormat
 29821  				err = json.Unmarshal(*v, &routeFilterPropertiesFormat)
 29822  				if err != nil {
 29823  					return err
 29824  				}
 29825  				rf.RouteFilterPropertiesFormat = &routeFilterPropertiesFormat
 29826  			}
 29827  		case "etag":
 29828  			if v != nil {
 29829  				var etag string
 29830  				err = json.Unmarshal(*v, &etag)
 29831  				if err != nil {
 29832  					return err
 29833  				}
 29834  				rf.Etag = &etag
 29835  			}
 29836  		case "id":
 29837  			if v != nil {
 29838  				var ID string
 29839  				err = json.Unmarshal(*v, &ID)
 29840  				if err != nil {
 29841  					return err
 29842  				}
 29843  				rf.ID = &ID
 29844  			}
 29845  		case "name":
 29846  			if v != nil {
 29847  				var name string
 29848  				err = json.Unmarshal(*v, &name)
 29849  				if err != nil {
 29850  					return err
 29851  				}
 29852  				rf.Name = &name
 29853  			}
 29854  		case "type":
 29855  			if v != nil {
 29856  				var typeVar string
 29857  				err = json.Unmarshal(*v, &typeVar)
 29858  				if err != nil {
 29859  					return err
 29860  				}
 29861  				rf.Type = &typeVar
 29862  			}
 29863  		case "location":
 29864  			if v != nil {
 29865  				var location string
 29866  				err = json.Unmarshal(*v, &location)
 29867  				if err != nil {
 29868  					return err
 29869  				}
 29870  				rf.Location = &location
 29871  			}
 29872  		case "tags":
 29873  			if v != nil {
 29874  				var tags map[string]*string
 29875  				err = json.Unmarshal(*v, &tags)
 29876  				if err != nil {
 29877  					return err
 29878  				}
 29879  				rf.Tags = tags
 29880  			}
 29881  		}
 29882  	}
 29883  
 29884  	return nil
 29885  }
 29886  
 29887  // RouteFilterListResult response for the ListRouteFilters API service call.
 29888  type RouteFilterListResult struct {
 29889  	autorest.Response `json:"-"`
 29890  	// Value - A list of route filters in a resource group.
 29891  	Value *[]RouteFilter `json:"value,omitempty"`
 29892  	// NextLink - The URL to get the next set of results.
 29893  	NextLink *string `json:"nextLink,omitempty"`
 29894  }
 29895  
 29896  // RouteFilterListResultIterator provides access to a complete listing of RouteFilter values.
 29897  type RouteFilterListResultIterator struct {
 29898  	i    int
 29899  	page RouteFilterListResultPage
 29900  }
 29901  
 29902  // NextWithContext advances to the next value.  If there was an error making
 29903  // the request the iterator does not advance and the error is returned.
 29904  func (iter *RouteFilterListResultIterator) NextWithContext(ctx context.Context) (err error) {
 29905  	if tracing.IsEnabled() {
 29906  		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultIterator.NextWithContext")
 29907  		defer func() {
 29908  			sc := -1
 29909  			if iter.Response().Response.Response != nil {
 29910  				sc = iter.Response().Response.Response.StatusCode
 29911  			}
 29912  			tracing.EndSpan(ctx, sc, err)
 29913  		}()
 29914  	}
 29915  	iter.i++
 29916  	if iter.i < len(iter.page.Values()) {
 29917  		return nil
 29918  	}
 29919  	err = iter.page.NextWithContext(ctx)
 29920  	if err != nil {
 29921  		iter.i--
 29922  		return err
 29923  	}
 29924  	iter.i = 0
 29925  	return nil
 29926  }
 29927  
 29928  // Next advances to the next value.  If there was an error making
 29929  // the request the iterator does not advance and the error is returned.
 29930  // Deprecated: Use NextWithContext() instead.
 29931  func (iter *RouteFilterListResultIterator) Next() error {
 29932  	return iter.NextWithContext(context.Background())
 29933  }
 29934  
 29935  // NotDone returns true if the enumeration should be started or is not yet complete.
 29936  func (iter RouteFilterListResultIterator) NotDone() bool {
 29937  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 29938  }
 29939  
 29940  // Response returns the raw server response from the last page request.
 29941  func (iter RouteFilterListResultIterator) Response() RouteFilterListResult {
 29942  	return iter.page.Response()
 29943  }
 29944  
 29945  // Value returns the current value or a zero-initialized value if the
 29946  // iterator has advanced beyond the end of the collection.
 29947  func (iter RouteFilterListResultIterator) Value() RouteFilter {
 29948  	if !iter.page.NotDone() {
 29949  		return RouteFilter{}
 29950  	}
 29951  	return iter.page.Values()[iter.i]
 29952  }
 29953  
 29954  // Creates a new instance of the RouteFilterListResultIterator type.
 29955  func NewRouteFilterListResultIterator(page RouteFilterListResultPage) RouteFilterListResultIterator {
 29956  	return RouteFilterListResultIterator{page: page}
 29957  }
 29958  
 29959  // IsEmpty returns true if the ListResult contains no values.
 29960  func (rflr RouteFilterListResult) IsEmpty() bool {
 29961  	return rflr.Value == nil || len(*rflr.Value) == 0
 29962  }
 29963  
 29964  // hasNextLink returns true if the NextLink is not empty.
 29965  func (rflr RouteFilterListResult) hasNextLink() bool {
 29966  	return rflr.NextLink != nil && len(*rflr.NextLink) != 0
 29967  }
 29968  
 29969  // routeFilterListResultPreparer prepares a request to retrieve the next set of results.
 29970  // It returns nil if no more results exist.
 29971  func (rflr RouteFilterListResult) routeFilterListResultPreparer(ctx context.Context) (*http.Request, error) {
 29972  	if !rflr.hasNextLink() {
 29973  		return nil, nil
 29974  	}
 29975  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 29976  		autorest.AsJSON(),
 29977  		autorest.AsGet(),
 29978  		autorest.WithBaseURL(to.String(rflr.NextLink)))
 29979  }
 29980  
 29981  // RouteFilterListResultPage contains a page of RouteFilter values.
 29982  type RouteFilterListResultPage struct {
 29983  	fn   func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)
 29984  	rflr RouteFilterListResult
 29985  }
 29986  
 29987  // NextWithContext advances to the next page of values.  If there was an error making
 29988  // the request the page does not advance and the error is returned.
 29989  func (page *RouteFilterListResultPage) NextWithContext(ctx context.Context) (err error) {
 29990  	if tracing.IsEnabled() {
 29991  		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterListResultPage.NextWithContext")
 29992  		defer func() {
 29993  			sc := -1
 29994  			if page.Response().Response.Response != nil {
 29995  				sc = page.Response().Response.Response.StatusCode
 29996  			}
 29997  			tracing.EndSpan(ctx, sc, err)
 29998  		}()
 29999  	}
 30000  	for {
 30001  		next, err := page.fn(ctx, page.rflr)
 30002  		if err != nil {
 30003  			return err
 30004  		}
 30005  		page.rflr = next
 30006  		if !next.hasNextLink() || !next.IsEmpty() {
 30007  			break
 30008  		}
 30009  	}
 30010  	return nil
 30011  }
 30012  
 30013  // Next advances to the next page of values.  If there was an error making
 30014  // the request the page does not advance and the error is returned.
 30015  // Deprecated: Use NextWithContext() instead.
 30016  func (page *RouteFilterListResultPage) Next() error {
 30017  	return page.NextWithContext(context.Background())
 30018  }
 30019  
 30020  // NotDone returns true if the page enumeration should be started or is not yet complete.
 30021  func (page RouteFilterListResultPage) NotDone() bool {
 30022  	return !page.rflr.IsEmpty()
 30023  }
 30024  
 30025  // Response returns the raw server response from the last page request.
 30026  func (page RouteFilterListResultPage) Response() RouteFilterListResult {
 30027  	return page.rflr
 30028  }
 30029  
 30030  // Values returns the slice of values for the current page or nil if there are no values.
 30031  func (page RouteFilterListResultPage) Values() []RouteFilter {
 30032  	if page.rflr.IsEmpty() {
 30033  		return nil
 30034  	}
 30035  	return *page.rflr.Value
 30036  }
 30037  
 30038  // Creates a new instance of the RouteFilterListResultPage type.
 30039  func NewRouteFilterListResultPage(cur RouteFilterListResult, getNextPage func(context.Context, RouteFilterListResult) (RouteFilterListResult, error)) RouteFilterListResultPage {
 30040  	return RouteFilterListResultPage{
 30041  		fn:   getNextPage,
 30042  		rflr: cur,
 30043  	}
 30044  }
 30045  
 30046  // RouteFilterPropertiesFormat route Filter Resource.
 30047  type RouteFilterPropertiesFormat struct {
 30048  	// Rules - Collection of RouteFilterRules contained within a route filter.
 30049  	Rules *[]RouteFilterRule `json:"rules,omitempty"`
 30050  	// Peerings - READ-ONLY; A collection of references to express route circuit peerings.
 30051  	Peerings *[]ExpressRouteCircuitPeering `json:"peerings,omitempty"`
 30052  	// Ipv6Peerings - READ-ONLY; A collection of references to express route circuit ipv6 peerings.
 30053  	Ipv6Peerings *[]ExpressRouteCircuitPeering `json:"ipv6Peerings,omitempty"`
 30054  	// ProvisioningState - READ-ONLY; The provisioning state of the route filter resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 30055  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 30056  }
 30057  
 30058  // MarshalJSON is the custom marshaler for RouteFilterPropertiesFormat.
 30059  func (rfpf RouteFilterPropertiesFormat) MarshalJSON() ([]byte, error) {
 30060  	objectMap := make(map[string]interface{})
 30061  	if rfpf.Rules != nil {
 30062  		objectMap["rules"] = rfpf.Rules
 30063  	}
 30064  	return json.Marshal(objectMap)
 30065  }
 30066  
 30067  // RouteFilterRule route Filter Rule Resource.
 30068  type RouteFilterRule struct {
 30069  	autorest.Response `json:"-"`
 30070  	// RouteFilterRulePropertiesFormat - Properties of the route filter rule.
 30071  	*RouteFilterRulePropertiesFormat `json:"properties,omitempty"`
 30072  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 30073  	Name *string `json:"name,omitempty"`
 30074  	// Location - Resource location.
 30075  	Location *string `json:"location,omitempty"`
 30076  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 30077  	Etag *string `json:"etag,omitempty"`
 30078  	// ID - Resource ID.
 30079  	ID *string `json:"id,omitempty"`
 30080  }
 30081  
 30082  // MarshalJSON is the custom marshaler for RouteFilterRule.
 30083  func (rfr RouteFilterRule) MarshalJSON() ([]byte, error) {
 30084  	objectMap := make(map[string]interface{})
 30085  	if rfr.RouteFilterRulePropertiesFormat != nil {
 30086  		objectMap["properties"] = rfr.RouteFilterRulePropertiesFormat
 30087  	}
 30088  	if rfr.Name != nil {
 30089  		objectMap["name"] = rfr.Name
 30090  	}
 30091  	if rfr.Location != nil {
 30092  		objectMap["location"] = rfr.Location
 30093  	}
 30094  	if rfr.ID != nil {
 30095  		objectMap["id"] = rfr.ID
 30096  	}
 30097  	return json.Marshal(objectMap)
 30098  }
 30099  
 30100  // UnmarshalJSON is the custom unmarshaler for RouteFilterRule struct.
 30101  func (rfr *RouteFilterRule) UnmarshalJSON(body []byte) error {
 30102  	var m map[string]*json.RawMessage
 30103  	err := json.Unmarshal(body, &m)
 30104  	if err != nil {
 30105  		return err
 30106  	}
 30107  	for k, v := range m {
 30108  		switch k {
 30109  		case "properties":
 30110  			if v != nil {
 30111  				var routeFilterRulePropertiesFormat RouteFilterRulePropertiesFormat
 30112  				err = json.Unmarshal(*v, &routeFilterRulePropertiesFormat)
 30113  				if err != nil {
 30114  					return err
 30115  				}
 30116  				rfr.RouteFilterRulePropertiesFormat = &routeFilterRulePropertiesFormat
 30117  			}
 30118  		case "name":
 30119  			if v != nil {
 30120  				var name string
 30121  				err = json.Unmarshal(*v, &name)
 30122  				if err != nil {
 30123  					return err
 30124  				}
 30125  				rfr.Name = &name
 30126  			}
 30127  		case "location":
 30128  			if v != nil {
 30129  				var location string
 30130  				err = json.Unmarshal(*v, &location)
 30131  				if err != nil {
 30132  					return err
 30133  				}
 30134  				rfr.Location = &location
 30135  			}
 30136  		case "etag":
 30137  			if v != nil {
 30138  				var etag string
 30139  				err = json.Unmarshal(*v, &etag)
 30140  				if err != nil {
 30141  					return err
 30142  				}
 30143  				rfr.Etag = &etag
 30144  			}
 30145  		case "id":
 30146  			if v != nil {
 30147  				var ID string
 30148  				err = json.Unmarshal(*v, &ID)
 30149  				if err != nil {
 30150  					return err
 30151  				}
 30152  				rfr.ID = &ID
 30153  			}
 30154  		}
 30155  	}
 30156  
 30157  	return nil
 30158  }
 30159  
 30160  // RouteFilterRuleListResult response for the ListRouteFilterRules API service call.
 30161  type RouteFilterRuleListResult struct {
 30162  	autorest.Response `json:"-"`
 30163  	// Value - A list of RouteFilterRules in a resource group.
 30164  	Value *[]RouteFilterRule `json:"value,omitempty"`
 30165  	// NextLink - The URL to get the next set of results.
 30166  	NextLink *string `json:"nextLink,omitempty"`
 30167  }
 30168  
 30169  // RouteFilterRuleListResultIterator provides access to a complete listing of RouteFilterRule values.
 30170  type RouteFilterRuleListResultIterator struct {
 30171  	i    int
 30172  	page RouteFilterRuleListResultPage
 30173  }
 30174  
 30175  // NextWithContext advances to the next value.  If there was an error making
 30176  // the request the iterator does not advance and the error is returned.
 30177  func (iter *RouteFilterRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
 30178  	if tracing.IsEnabled() {
 30179  		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultIterator.NextWithContext")
 30180  		defer func() {
 30181  			sc := -1
 30182  			if iter.Response().Response.Response != nil {
 30183  				sc = iter.Response().Response.Response.StatusCode
 30184  			}
 30185  			tracing.EndSpan(ctx, sc, err)
 30186  		}()
 30187  	}
 30188  	iter.i++
 30189  	if iter.i < len(iter.page.Values()) {
 30190  		return nil
 30191  	}
 30192  	err = iter.page.NextWithContext(ctx)
 30193  	if err != nil {
 30194  		iter.i--
 30195  		return err
 30196  	}
 30197  	iter.i = 0
 30198  	return nil
 30199  }
 30200  
 30201  // Next advances to the next value.  If there was an error making
 30202  // the request the iterator does not advance and the error is returned.
 30203  // Deprecated: Use NextWithContext() instead.
 30204  func (iter *RouteFilterRuleListResultIterator) Next() error {
 30205  	return iter.NextWithContext(context.Background())
 30206  }
 30207  
 30208  // NotDone returns true if the enumeration should be started or is not yet complete.
 30209  func (iter RouteFilterRuleListResultIterator) NotDone() bool {
 30210  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 30211  }
 30212  
 30213  // Response returns the raw server response from the last page request.
 30214  func (iter RouteFilterRuleListResultIterator) Response() RouteFilterRuleListResult {
 30215  	return iter.page.Response()
 30216  }
 30217  
 30218  // Value returns the current value or a zero-initialized value if the
 30219  // iterator has advanced beyond the end of the collection.
 30220  func (iter RouteFilterRuleListResultIterator) Value() RouteFilterRule {
 30221  	if !iter.page.NotDone() {
 30222  		return RouteFilterRule{}
 30223  	}
 30224  	return iter.page.Values()[iter.i]
 30225  }
 30226  
 30227  // Creates a new instance of the RouteFilterRuleListResultIterator type.
 30228  func NewRouteFilterRuleListResultIterator(page RouteFilterRuleListResultPage) RouteFilterRuleListResultIterator {
 30229  	return RouteFilterRuleListResultIterator{page: page}
 30230  }
 30231  
 30232  // IsEmpty returns true if the ListResult contains no values.
 30233  func (rfrlr RouteFilterRuleListResult) IsEmpty() bool {
 30234  	return rfrlr.Value == nil || len(*rfrlr.Value) == 0
 30235  }
 30236  
 30237  // hasNextLink returns true if the NextLink is not empty.
 30238  func (rfrlr RouteFilterRuleListResult) hasNextLink() bool {
 30239  	return rfrlr.NextLink != nil && len(*rfrlr.NextLink) != 0
 30240  }
 30241  
 30242  // routeFilterRuleListResultPreparer prepares a request to retrieve the next set of results.
 30243  // It returns nil if no more results exist.
 30244  func (rfrlr RouteFilterRuleListResult) routeFilterRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
 30245  	if !rfrlr.hasNextLink() {
 30246  		return nil, nil
 30247  	}
 30248  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 30249  		autorest.AsJSON(),
 30250  		autorest.AsGet(),
 30251  		autorest.WithBaseURL(to.String(rfrlr.NextLink)))
 30252  }
 30253  
 30254  // RouteFilterRuleListResultPage contains a page of RouteFilterRule values.
 30255  type RouteFilterRuleListResultPage struct {
 30256  	fn    func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)
 30257  	rfrlr RouteFilterRuleListResult
 30258  }
 30259  
 30260  // NextWithContext advances to the next page of values.  If there was an error making
 30261  // the request the page does not advance and the error is returned.
 30262  func (page *RouteFilterRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
 30263  	if tracing.IsEnabled() {
 30264  		ctx = tracing.StartSpan(ctx, fqdn+"/RouteFilterRuleListResultPage.NextWithContext")
 30265  		defer func() {
 30266  			sc := -1
 30267  			if page.Response().Response.Response != nil {
 30268  				sc = page.Response().Response.Response.StatusCode
 30269  			}
 30270  			tracing.EndSpan(ctx, sc, err)
 30271  		}()
 30272  	}
 30273  	for {
 30274  		next, err := page.fn(ctx, page.rfrlr)
 30275  		if err != nil {
 30276  			return err
 30277  		}
 30278  		page.rfrlr = next
 30279  		if !next.hasNextLink() || !next.IsEmpty() {
 30280  			break
 30281  		}
 30282  	}
 30283  	return nil
 30284  }
 30285  
 30286  // Next advances to the next page of values.  If there was an error making
 30287  // the request the page does not advance and the error is returned.
 30288  // Deprecated: Use NextWithContext() instead.
 30289  func (page *RouteFilterRuleListResultPage) Next() error {
 30290  	return page.NextWithContext(context.Background())
 30291  }
 30292  
 30293  // NotDone returns true if the page enumeration should be started or is not yet complete.
 30294  func (page RouteFilterRuleListResultPage) NotDone() bool {
 30295  	return !page.rfrlr.IsEmpty()
 30296  }
 30297  
 30298  // Response returns the raw server response from the last page request.
 30299  func (page RouteFilterRuleListResultPage) Response() RouteFilterRuleListResult {
 30300  	return page.rfrlr
 30301  }
 30302  
 30303  // Values returns the slice of values for the current page or nil if there are no values.
 30304  func (page RouteFilterRuleListResultPage) Values() []RouteFilterRule {
 30305  	if page.rfrlr.IsEmpty() {
 30306  		return nil
 30307  	}
 30308  	return *page.rfrlr.Value
 30309  }
 30310  
 30311  // Creates a new instance of the RouteFilterRuleListResultPage type.
 30312  func NewRouteFilterRuleListResultPage(cur RouteFilterRuleListResult, getNextPage func(context.Context, RouteFilterRuleListResult) (RouteFilterRuleListResult, error)) RouteFilterRuleListResultPage {
 30313  	return RouteFilterRuleListResultPage{
 30314  		fn:    getNextPage,
 30315  		rfrlr: cur,
 30316  	}
 30317  }
 30318  
 30319  // RouteFilterRulePropertiesFormat route Filter Rule Resource.
 30320  type RouteFilterRulePropertiesFormat struct {
 30321  	// Access - The access type of the rule. Possible values include: 'Allow', 'Deny'
 30322  	Access Access `json:"access,omitempty"`
 30323  	// RouteFilterRuleType - The rule type of the rule.
 30324  	RouteFilterRuleType *string `json:"routeFilterRuleType,omitempty"`
 30325  	// Communities - The collection for bgp community values to filter on. e.g. ['12076:5010','12076:5020'].
 30326  	Communities *[]string `json:"communities,omitempty"`
 30327  	// ProvisioningState - READ-ONLY; The provisioning state of the route filter rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 30328  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 30329  }
 30330  
 30331  // MarshalJSON is the custom marshaler for RouteFilterRulePropertiesFormat.
 30332  func (rfrpf RouteFilterRulePropertiesFormat) MarshalJSON() ([]byte, error) {
 30333  	objectMap := make(map[string]interface{})
 30334  	if rfrpf.Access != "" {
 30335  		objectMap["access"] = rfrpf.Access
 30336  	}
 30337  	if rfrpf.RouteFilterRuleType != nil {
 30338  		objectMap["routeFilterRuleType"] = rfrpf.RouteFilterRuleType
 30339  	}
 30340  	if rfrpf.Communities != nil {
 30341  		objectMap["communities"] = rfrpf.Communities
 30342  	}
 30343  	return json.Marshal(objectMap)
 30344  }
 30345  
 30346  // RouteFilterRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 30347  // long-running operation.
 30348  type RouteFilterRulesCreateOrUpdateFuture struct {
 30349  	azure.FutureAPI
 30350  	// Result returns the result of the asynchronous operation.
 30351  	// If the operation has not completed it will return an error.
 30352  	Result func(RouteFilterRulesClient) (RouteFilterRule, error)
 30353  }
 30354  
 30355  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 30356  func (future *RouteFilterRulesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 30357  	var azFuture azure.Future
 30358  	if err := json.Unmarshal(body, &azFuture); err != nil {
 30359  		return err
 30360  	}
 30361  	future.FutureAPI = &azFuture
 30362  	future.Result = future.result
 30363  	return nil
 30364  }
 30365  
 30366  // result is the default implementation for RouteFilterRulesCreateOrUpdateFuture.Result.
 30367  func (future *RouteFilterRulesCreateOrUpdateFuture) result(client RouteFilterRulesClient) (rfr RouteFilterRule, err error) {
 30368  	var done bool
 30369  	done, err = future.DoneWithContext(context.Background(), client)
 30370  	if err != nil {
 30371  		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 30372  		return
 30373  	}
 30374  	if !done {
 30375  		rfr.Response.Response = future.Response()
 30376  		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesCreateOrUpdateFuture")
 30377  		return
 30378  	}
 30379  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 30380  	if rfr.Response.Response, err = future.GetResult(sender); err == nil && rfr.Response.Response.StatusCode != http.StatusNoContent {
 30381  		rfr, err = client.CreateOrUpdateResponder(rfr.Response.Response)
 30382  		if err != nil {
 30383  			err = autorest.NewErrorWithError(err, "network.RouteFilterRulesCreateOrUpdateFuture", "Result", rfr.Response.Response, "Failure responding to request")
 30384  		}
 30385  	}
 30386  	return
 30387  }
 30388  
 30389  // RouteFilterRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 30390  // operation.
 30391  type RouteFilterRulesDeleteFuture struct {
 30392  	azure.FutureAPI
 30393  	// Result returns the result of the asynchronous operation.
 30394  	// If the operation has not completed it will return an error.
 30395  	Result func(RouteFilterRulesClient) (autorest.Response, error)
 30396  }
 30397  
 30398  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 30399  func (future *RouteFilterRulesDeleteFuture) UnmarshalJSON(body []byte) error {
 30400  	var azFuture azure.Future
 30401  	if err := json.Unmarshal(body, &azFuture); err != nil {
 30402  		return err
 30403  	}
 30404  	future.FutureAPI = &azFuture
 30405  	future.Result = future.result
 30406  	return nil
 30407  }
 30408  
 30409  // result is the default implementation for RouteFilterRulesDeleteFuture.Result.
 30410  func (future *RouteFilterRulesDeleteFuture) result(client RouteFilterRulesClient) (ar autorest.Response, err error) {
 30411  	var done bool
 30412  	done, err = future.DoneWithContext(context.Background(), client)
 30413  	if err != nil {
 30414  		err = autorest.NewErrorWithError(err, "network.RouteFilterRulesDeleteFuture", "Result", future.Response(), "Polling failure")
 30415  		return
 30416  	}
 30417  	if !done {
 30418  		ar.Response = future.Response()
 30419  		err = azure.NewAsyncOpIncompleteError("network.RouteFilterRulesDeleteFuture")
 30420  		return
 30421  	}
 30422  	ar.Response = future.Response()
 30423  	return
 30424  }
 30425  
 30426  // RouteFiltersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 30427  // long-running operation.
 30428  type RouteFiltersCreateOrUpdateFuture struct {
 30429  	azure.FutureAPI
 30430  	// Result returns the result of the asynchronous operation.
 30431  	// If the operation has not completed it will return an error.
 30432  	Result func(RouteFiltersClient) (RouteFilter, error)
 30433  }
 30434  
 30435  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 30436  func (future *RouteFiltersCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 30437  	var azFuture azure.Future
 30438  	if err := json.Unmarshal(body, &azFuture); err != nil {
 30439  		return err
 30440  	}
 30441  	future.FutureAPI = &azFuture
 30442  	future.Result = future.result
 30443  	return nil
 30444  }
 30445  
 30446  // result is the default implementation for RouteFiltersCreateOrUpdateFuture.Result.
 30447  func (future *RouteFiltersCreateOrUpdateFuture) result(client RouteFiltersClient) (rf RouteFilter, err error) {
 30448  	var done bool
 30449  	done, err = future.DoneWithContext(context.Background(), client)
 30450  	if err != nil {
 30451  		err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 30452  		return
 30453  	}
 30454  	if !done {
 30455  		rf.Response.Response = future.Response()
 30456  		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersCreateOrUpdateFuture")
 30457  		return
 30458  	}
 30459  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 30460  	if rf.Response.Response, err = future.GetResult(sender); err == nil && rf.Response.Response.StatusCode != http.StatusNoContent {
 30461  		rf, err = client.CreateOrUpdateResponder(rf.Response.Response)
 30462  		if err != nil {
 30463  			err = autorest.NewErrorWithError(err, "network.RouteFiltersCreateOrUpdateFuture", "Result", rf.Response.Response, "Failure responding to request")
 30464  		}
 30465  	}
 30466  	return
 30467  }
 30468  
 30469  // RouteFiltersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 30470  // operation.
 30471  type RouteFiltersDeleteFuture struct {
 30472  	azure.FutureAPI
 30473  	// Result returns the result of the asynchronous operation.
 30474  	// If the operation has not completed it will return an error.
 30475  	Result func(RouteFiltersClient) (autorest.Response, error)
 30476  }
 30477  
 30478  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 30479  func (future *RouteFiltersDeleteFuture) UnmarshalJSON(body []byte) error {
 30480  	var azFuture azure.Future
 30481  	if err := json.Unmarshal(body, &azFuture); err != nil {
 30482  		return err
 30483  	}
 30484  	future.FutureAPI = &azFuture
 30485  	future.Result = future.result
 30486  	return nil
 30487  }
 30488  
 30489  // result is the default implementation for RouteFiltersDeleteFuture.Result.
 30490  func (future *RouteFiltersDeleteFuture) result(client RouteFiltersClient) (ar autorest.Response, err error) {
 30491  	var done bool
 30492  	done, err = future.DoneWithContext(context.Background(), client)
 30493  	if err != nil {
 30494  		err = autorest.NewErrorWithError(err, "network.RouteFiltersDeleteFuture", "Result", future.Response(), "Polling failure")
 30495  		return
 30496  	}
 30497  	if !done {
 30498  		ar.Response = future.Response()
 30499  		err = azure.NewAsyncOpIncompleteError("network.RouteFiltersDeleteFuture")
 30500  		return
 30501  	}
 30502  	ar.Response = future.Response()
 30503  	return
 30504  }
 30505  
 30506  // RouteListResult response for the ListRoute API service call.
 30507  type RouteListResult struct {
 30508  	autorest.Response `json:"-"`
 30509  	// Value - A list of routes in a resource group.
 30510  	Value *[]Route `json:"value,omitempty"`
 30511  	// NextLink - The URL to get the next set of results.
 30512  	NextLink *string `json:"nextLink,omitempty"`
 30513  }
 30514  
 30515  // RouteListResultIterator provides access to a complete listing of Route values.
 30516  type RouteListResultIterator struct {
 30517  	i    int
 30518  	page RouteListResultPage
 30519  }
 30520  
 30521  // NextWithContext advances to the next value.  If there was an error making
 30522  // the request the iterator does not advance and the error is returned.
 30523  func (iter *RouteListResultIterator) NextWithContext(ctx context.Context) (err error) {
 30524  	if tracing.IsEnabled() {
 30525  		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultIterator.NextWithContext")
 30526  		defer func() {
 30527  			sc := -1
 30528  			if iter.Response().Response.Response != nil {
 30529  				sc = iter.Response().Response.Response.StatusCode
 30530  			}
 30531  			tracing.EndSpan(ctx, sc, err)
 30532  		}()
 30533  	}
 30534  	iter.i++
 30535  	if iter.i < len(iter.page.Values()) {
 30536  		return nil
 30537  	}
 30538  	err = iter.page.NextWithContext(ctx)
 30539  	if err != nil {
 30540  		iter.i--
 30541  		return err
 30542  	}
 30543  	iter.i = 0
 30544  	return nil
 30545  }
 30546  
 30547  // Next advances to the next value.  If there was an error making
 30548  // the request the iterator does not advance and the error is returned.
 30549  // Deprecated: Use NextWithContext() instead.
 30550  func (iter *RouteListResultIterator) Next() error {
 30551  	return iter.NextWithContext(context.Background())
 30552  }
 30553  
 30554  // NotDone returns true if the enumeration should be started or is not yet complete.
 30555  func (iter RouteListResultIterator) NotDone() bool {
 30556  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 30557  }
 30558  
 30559  // Response returns the raw server response from the last page request.
 30560  func (iter RouteListResultIterator) Response() RouteListResult {
 30561  	return iter.page.Response()
 30562  }
 30563  
 30564  // Value returns the current value or a zero-initialized value if the
 30565  // iterator has advanced beyond the end of the collection.
 30566  func (iter RouteListResultIterator) Value() Route {
 30567  	if !iter.page.NotDone() {
 30568  		return Route{}
 30569  	}
 30570  	return iter.page.Values()[iter.i]
 30571  }
 30572  
 30573  // Creates a new instance of the RouteListResultIterator type.
 30574  func NewRouteListResultIterator(page RouteListResultPage) RouteListResultIterator {
 30575  	return RouteListResultIterator{page: page}
 30576  }
 30577  
 30578  // IsEmpty returns true if the ListResult contains no values.
 30579  func (rlr RouteListResult) IsEmpty() bool {
 30580  	return rlr.Value == nil || len(*rlr.Value) == 0
 30581  }
 30582  
 30583  // hasNextLink returns true if the NextLink is not empty.
 30584  func (rlr RouteListResult) hasNextLink() bool {
 30585  	return rlr.NextLink != nil && len(*rlr.NextLink) != 0
 30586  }
 30587  
 30588  // routeListResultPreparer prepares a request to retrieve the next set of results.
 30589  // It returns nil if no more results exist.
 30590  func (rlr RouteListResult) routeListResultPreparer(ctx context.Context) (*http.Request, error) {
 30591  	if !rlr.hasNextLink() {
 30592  		return nil, nil
 30593  	}
 30594  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 30595  		autorest.AsJSON(),
 30596  		autorest.AsGet(),
 30597  		autorest.WithBaseURL(to.String(rlr.NextLink)))
 30598  }
 30599  
 30600  // RouteListResultPage contains a page of Route values.
 30601  type RouteListResultPage struct {
 30602  	fn  func(context.Context, RouteListResult) (RouteListResult, error)
 30603  	rlr RouteListResult
 30604  }
 30605  
 30606  // NextWithContext advances to the next page of values.  If there was an error making
 30607  // the request the page does not advance and the error is returned.
 30608  func (page *RouteListResultPage) NextWithContext(ctx context.Context) (err error) {
 30609  	if tracing.IsEnabled() {
 30610  		ctx = tracing.StartSpan(ctx, fqdn+"/RouteListResultPage.NextWithContext")
 30611  		defer func() {
 30612  			sc := -1
 30613  			if page.Response().Response.Response != nil {
 30614  				sc = page.Response().Response.Response.StatusCode
 30615  			}
 30616  			tracing.EndSpan(ctx, sc, err)
 30617  		}()
 30618  	}
 30619  	for {
 30620  		next, err := page.fn(ctx, page.rlr)
 30621  		if err != nil {
 30622  			return err
 30623  		}
 30624  		page.rlr = next
 30625  		if !next.hasNextLink() || !next.IsEmpty() {
 30626  			break
 30627  		}
 30628  	}
 30629  	return nil
 30630  }
 30631  
 30632  // Next advances to the next page of values.  If there was an error making
 30633  // the request the page does not advance and the error is returned.
 30634  // Deprecated: Use NextWithContext() instead.
 30635  func (page *RouteListResultPage) Next() error {
 30636  	return page.NextWithContext(context.Background())
 30637  }
 30638  
 30639  // NotDone returns true if the page enumeration should be started or is not yet complete.
 30640  func (page RouteListResultPage) NotDone() bool {
 30641  	return !page.rlr.IsEmpty()
 30642  }
 30643  
 30644  // Response returns the raw server response from the last page request.
 30645  func (page RouteListResultPage) Response() RouteListResult {
 30646  	return page.rlr
 30647  }
 30648  
 30649  // Values returns the slice of values for the current page or nil if there are no values.
 30650  func (page RouteListResultPage) Values() []Route {
 30651  	if page.rlr.IsEmpty() {
 30652  		return nil
 30653  	}
 30654  	return *page.rlr.Value
 30655  }
 30656  
 30657  // Creates a new instance of the RouteListResultPage type.
 30658  func NewRouteListResultPage(cur RouteListResult, getNextPage func(context.Context, RouteListResult) (RouteListResult, error)) RouteListResultPage {
 30659  	return RouteListResultPage{
 30660  		fn:  getNextPage,
 30661  		rlr: cur,
 30662  	}
 30663  }
 30664  
 30665  // RoutePropertiesFormat route resource.
 30666  type RoutePropertiesFormat struct {
 30667  	// AddressPrefix - The destination CIDR to which the route applies.
 30668  	AddressPrefix *string `json:"addressPrefix,omitempty"`
 30669  	// NextHopType - The type of Azure hop the packet should be sent to. Possible values include: 'RouteNextHopTypeVirtualNetworkGateway', 'RouteNextHopTypeVnetLocal', 'RouteNextHopTypeInternet', 'RouteNextHopTypeVirtualAppliance', 'RouteNextHopTypeNone'
 30670  	NextHopType RouteNextHopType `json:"nextHopType,omitempty"`
 30671  	// NextHopIPAddress - The IP address packets should be forwarded to. Next hop values are only allowed in routes where the next hop type is VirtualAppliance.
 30672  	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
 30673  	// ProvisioningState - READ-ONLY; The provisioning state of the route resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 30674  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 30675  }
 30676  
 30677  // MarshalJSON is the custom marshaler for RoutePropertiesFormat.
 30678  func (rpf RoutePropertiesFormat) MarshalJSON() ([]byte, error) {
 30679  	objectMap := make(map[string]interface{})
 30680  	if rpf.AddressPrefix != nil {
 30681  		objectMap["addressPrefix"] = rpf.AddressPrefix
 30682  	}
 30683  	if rpf.NextHopType != "" {
 30684  		objectMap["nextHopType"] = rpf.NextHopType
 30685  	}
 30686  	if rpf.NextHopIPAddress != nil {
 30687  		objectMap["nextHopIpAddress"] = rpf.NextHopIPAddress
 30688  	}
 30689  	return json.Marshal(objectMap)
 30690  }
 30691  
 30692  // RoutesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
 30693  // operation.
 30694  type RoutesCreateOrUpdateFuture struct {
 30695  	azure.FutureAPI
 30696  	// Result returns the result of the asynchronous operation.
 30697  	// If the operation has not completed it will return an error.
 30698  	Result func(RoutesClient) (Route, error)
 30699  }
 30700  
 30701  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 30702  func (future *RoutesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 30703  	var azFuture azure.Future
 30704  	if err := json.Unmarshal(body, &azFuture); err != nil {
 30705  		return err
 30706  	}
 30707  	future.FutureAPI = &azFuture
 30708  	future.Result = future.result
 30709  	return nil
 30710  }
 30711  
 30712  // result is the default implementation for RoutesCreateOrUpdateFuture.Result.
 30713  func (future *RoutesCreateOrUpdateFuture) result(client RoutesClient) (r Route, err error) {
 30714  	var done bool
 30715  	done, err = future.DoneWithContext(context.Background(), client)
 30716  	if err != nil {
 30717  		err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 30718  		return
 30719  	}
 30720  	if !done {
 30721  		r.Response.Response = future.Response()
 30722  		err = azure.NewAsyncOpIncompleteError("network.RoutesCreateOrUpdateFuture")
 30723  		return
 30724  	}
 30725  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 30726  	if r.Response.Response, err = future.GetResult(sender); err == nil && r.Response.Response.StatusCode != http.StatusNoContent {
 30727  		r, err = client.CreateOrUpdateResponder(r.Response.Response)
 30728  		if err != nil {
 30729  			err = autorest.NewErrorWithError(err, "network.RoutesCreateOrUpdateFuture", "Result", r.Response.Response, "Failure responding to request")
 30730  		}
 30731  	}
 30732  	return
 30733  }
 30734  
 30735  // RoutesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running operation.
 30736  type RoutesDeleteFuture struct {
 30737  	azure.FutureAPI
 30738  	// Result returns the result of the asynchronous operation.
 30739  	// If the operation has not completed it will return an error.
 30740  	Result func(RoutesClient) (autorest.Response, error)
 30741  }
 30742  
 30743  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 30744  func (future *RoutesDeleteFuture) UnmarshalJSON(body []byte) error {
 30745  	var azFuture azure.Future
 30746  	if err := json.Unmarshal(body, &azFuture); err != nil {
 30747  		return err
 30748  	}
 30749  	future.FutureAPI = &azFuture
 30750  	future.Result = future.result
 30751  	return nil
 30752  }
 30753  
 30754  // result is the default implementation for RoutesDeleteFuture.Result.
 30755  func (future *RoutesDeleteFuture) result(client RoutesClient) (ar autorest.Response, err error) {
 30756  	var done bool
 30757  	done, err = future.DoneWithContext(context.Background(), client)
 30758  	if err != nil {
 30759  		err = autorest.NewErrorWithError(err, "network.RoutesDeleteFuture", "Result", future.Response(), "Polling failure")
 30760  		return
 30761  	}
 30762  	if !done {
 30763  		ar.Response = future.Response()
 30764  		err = azure.NewAsyncOpIncompleteError("network.RoutesDeleteFuture")
 30765  		return
 30766  	}
 30767  	ar.Response = future.Response()
 30768  	return
 30769  }
 30770  
 30771  // RouteTable route table resource.
 30772  type RouteTable struct {
 30773  	autorest.Response `json:"-"`
 30774  	// RouteTablePropertiesFormat - Properties of the route table.
 30775  	*RouteTablePropertiesFormat `json:"properties,omitempty"`
 30776  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 30777  	Etag *string `json:"etag,omitempty"`
 30778  	// ID - Resource ID.
 30779  	ID *string `json:"id,omitempty"`
 30780  	// Name - READ-ONLY; Resource name.
 30781  	Name *string `json:"name,omitempty"`
 30782  	// Type - READ-ONLY; Resource type.
 30783  	Type *string `json:"type,omitempty"`
 30784  	// Location - Resource location.
 30785  	Location *string `json:"location,omitempty"`
 30786  	// Tags - Resource tags.
 30787  	Tags map[string]*string `json:"tags"`
 30788  }
 30789  
 30790  // MarshalJSON is the custom marshaler for RouteTable.
 30791  func (rt RouteTable) MarshalJSON() ([]byte, error) {
 30792  	objectMap := make(map[string]interface{})
 30793  	if rt.RouteTablePropertiesFormat != nil {
 30794  		objectMap["properties"] = rt.RouteTablePropertiesFormat
 30795  	}
 30796  	if rt.ID != nil {
 30797  		objectMap["id"] = rt.ID
 30798  	}
 30799  	if rt.Location != nil {
 30800  		objectMap["location"] = rt.Location
 30801  	}
 30802  	if rt.Tags != nil {
 30803  		objectMap["tags"] = rt.Tags
 30804  	}
 30805  	return json.Marshal(objectMap)
 30806  }
 30807  
 30808  // UnmarshalJSON is the custom unmarshaler for RouteTable struct.
 30809  func (rt *RouteTable) UnmarshalJSON(body []byte) error {
 30810  	var m map[string]*json.RawMessage
 30811  	err := json.Unmarshal(body, &m)
 30812  	if err != nil {
 30813  		return err
 30814  	}
 30815  	for k, v := range m {
 30816  		switch k {
 30817  		case "properties":
 30818  			if v != nil {
 30819  				var routeTablePropertiesFormat RouteTablePropertiesFormat
 30820  				err = json.Unmarshal(*v, &routeTablePropertiesFormat)
 30821  				if err != nil {
 30822  					return err
 30823  				}
 30824  				rt.RouteTablePropertiesFormat = &routeTablePropertiesFormat
 30825  			}
 30826  		case "etag":
 30827  			if v != nil {
 30828  				var etag string
 30829  				err = json.Unmarshal(*v, &etag)
 30830  				if err != nil {
 30831  					return err
 30832  				}
 30833  				rt.Etag = &etag
 30834  			}
 30835  		case "id":
 30836  			if v != nil {
 30837  				var ID string
 30838  				err = json.Unmarshal(*v, &ID)
 30839  				if err != nil {
 30840  					return err
 30841  				}
 30842  				rt.ID = &ID
 30843  			}
 30844  		case "name":
 30845  			if v != nil {
 30846  				var name string
 30847  				err = json.Unmarshal(*v, &name)
 30848  				if err != nil {
 30849  					return err
 30850  				}
 30851  				rt.Name = &name
 30852  			}
 30853  		case "type":
 30854  			if v != nil {
 30855  				var typeVar string
 30856  				err = json.Unmarshal(*v, &typeVar)
 30857  				if err != nil {
 30858  					return err
 30859  				}
 30860  				rt.Type = &typeVar
 30861  			}
 30862  		case "location":
 30863  			if v != nil {
 30864  				var location string
 30865  				err = json.Unmarshal(*v, &location)
 30866  				if err != nil {
 30867  					return err
 30868  				}
 30869  				rt.Location = &location
 30870  			}
 30871  		case "tags":
 30872  			if v != nil {
 30873  				var tags map[string]*string
 30874  				err = json.Unmarshal(*v, &tags)
 30875  				if err != nil {
 30876  					return err
 30877  				}
 30878  				rt.Tags = tags
 30879  			}
 30880  		}
 30881  	}
 30882  
 30883  	return nil
 30884  }
 30885  
 30886  // RouteTableListResult response for the ListRouteTable API service call.
 30887  type RouteTableListResult struct {
 30888  	autorest.Response `json:"-"`
 30889  	// Value - A list of route tables in a resource group.
 30890  	Value *[]RouteTable `json:"value,omitempty"`
 30891  	// NextLink - The URL to get the next set of results.
 30892  	NextLink *string `json:"nextLink,omitempty"`
 30893  }
 30894  
 30895  // RouteTableListResultIterator provides access to a complete listing of RouteTable values.
 30896  type RouteTableListResultIterator struct {
 30897  	i    int
 30898  	page RouteTableListResultPage
 30899  }
 30900  
 30901  // NextWithContext advances to the next value.  If there was an error making
 30902  // the request the iterator does not advance and the error is returned.
 30903  func (iter *RouteTableListResultIterator) NextWithContext(ctx context.Context) (err error) {
 30904  	if tracing.IsEnabled() {
 30905  		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultIterator.NextWithContext")
 30906  		defer func() {
 30907  			sc := -1
 30908  			if iter.Response().Response.Response != nil {
 30909  				sc = iter.Response().Response.Response.StatusCode
 30910  			}
 30911  			tracing.EndSpan(ctx, sc, err)
 30912  		}()
 30913  	}
 30914  	iter.i++
 30915  	if iter.i < len(iter.page.Values()) {
 30916  		return nil
 30917  	}
 30918  	err = iter.page.NextWithContext(ctx)
 30919  	if err != nil {
 30920  		iter.i--
 30921  		return err
 30922  	}
 30923  	iter.i = 0
 30924  	return nil
 30925  }
 30926  
 30927  // Next advances to the next value.  If there was an error making
 30928  // the request the iterator does not advance and the error is returned.
 30929  // Deprecated: Use NextWithContext() instead.
 30930  func (iter *RouteTableListResultIterator) Next() error {
 30931  	return iter.NextWithContext(context.Background())
 30932  }
 30933  
 30934  // NotDone returns true if the enumeration should be started or is not yet complete.
 30935  func (iter RouteTableListResultIterator) NotDone() bool {
 30936  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 30937  }
 30938  
 30939  // Response returns the raw server response from the last page request.
 30940  func (iter RouteTableListResultIterator) Response() RouteTableListResult {
 30941  	return iter.page.Response()
 30942  }
 30943  
 30944  // Value returns the current value or a zero-initialized value if the
 30945  // iterator has advanced beyond the end of the collection.
 30946  func (iter RouteTableListResultIterator) Value() RouteTable {
 30947  	if !iter.page.NotDone() {
 30948  		return RouteTable{}
 30949  	}
 30950  	return iter.page.Values()[iter.i]
 30951  }
 30952  
 30953  // Creates a new instance of the RouteTableListResultIterator type.
 30954  func NewRouteTableListResultIterator(page RouteTableListResultPage) RouteTableListResultIterator {
 30955  	return RouteTableListResultIterator{page: page}
 30956  }
 30957  
 30958  // IsEmpty returns true if the ListResult contains no values.
 30959  func (rtlr RouteTableListResult) IsEmpty() bool {
 30960  	return rtlr.Value == nil || len(*rtlr.Value) == 0
 30961  }
 30962  
 30963  // hasNextLink returns true if the NextLink is not empty.
 30964  func (rtlr RouteTableListResult) hasNextLink() bool {
 30965  	return rtlr.NextLink != nil && len(*rtlr.NextLink) != 0
 30966  }
 30967  
 30968  // routeTableListResultPreparer prepares a request to retrieve the next set of results.
 30969  // It returns nil if no more results exist.
 30970  func (rtlr RouteTableListResult) routeTableListResultPreparer(ctx context.Context) (*http.Request, error) {
 30971  	if !rtlr.hasNextLink() {
 30972  		return nil, nil
 30973  	}
 30974  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 30975  		autorest.AsJSON(),
 30976  		autorest.AsGet(),
 30977  		autorest.WithBaseURL(to.String(rtlr.NextLink)))
 30978  }
 30979  
 30980  // RouteTableListResultPage contains a page of RouteTable values.
 30981  type RouteTableListResultPage struct {
 30982  	fn   func(context.Context, RouteTableListResult) (RouteTableListResult, error)
 30983  	rtlr RouteTableListResult
 30984  }
 30985  
 30986  // NextWithContext advances to the next page of values.  If there was an error making
 30987  // the request the page does not advance and the error is returned.
 30988  func (page *RouteTableListResultPage) NextWithContext(ctx context.Context) (err error) {
 30989  	if tracing.IsEnabled() {
 30990  		ctx = tracing.StartSpan(ctx, fqdn+"/RouteTableListResultPage.NextWithContext")
 30991  		defer func() {
 30992  			sc := -1
 30993  			if page.Response().Response.Response != nil {
 30994  				sc = page.Response().Response.Response.StatusCode
 30995  			}
 30996  			tracing.EndSpan(ctx, sc, err)
 30997  		}()
 30998  	}
 30999  	for {
 31000  		next, err := page.fn(ctx, page.rtlr)
 31001  		if err != nil {
 31002  			return err
 31003  		}
 31004  		page.rtlr = next
 31005  		if !next.hasNextLink() || !next.IsEmpty() {
 31006  			break
 31007  		}
 31008  	}
 31009  	return nil
 31010  }
 31011  
 31012  // Next advances to the next page of values.  If there was an error making
 31013  // the request the page does not advance and the error is returned.
 31014  // Deprecated: Use NextWithContext() instead.
 31015  func (page *RouteTableListResultPage) Next() error {
 31016  	return page.NextWithContext(context.Background())
 31017  }
 31018  
 31019  // NotDone returns true if the page enumeration should be started or is not yet complete.
 31020  func (page RouteTableListResultPage) NotDone() bool {
 31021  	return !page.rtlr.IsEmpty()
 31022  }
 31023  
 31024  // Response returns the raw server response from the last page request.
 31025  func (page RouteTableListResultPage) Response() RouteTableListResult {
 31026  	return page.rtlr
 31027  }
 31028  
 31029  // Values returns the slice of values for the current page or nil if there are no values.
 31030  func (page RouteTableListResultPage) Values() []RouteTable {
 31031  	if page.rtlr.IsEmpty() {
 31032  		return nil
 31033  	}
 31034  	return *page.rtlr.Value
 31035  }
 31036  
 31037  // Creates a new instance of the RouteTableListResultPage type.
 31038  func NewRouteTableListResultPage(cur RouteTableListResult, getNextPage func(context.Context, RouteTableListResult) (RouteTableListResult, error)) RouteTableListResultPage {
 31039  	return RouteTableListResultPage{
 31040  		fn:   getNextPage,
 31041  		rtlr: cur,
 31042  	}
 31043  }
 31044  
 31045  // RouteTablePropertiesFormat route Table resource.
 31046  type RouteTablePropertiesFormat struct {
 31047  	// Routes - Collection of routes contained within a route table.
 31048  	Routes *[]Route `json:"routes,omitempty"`
 31049  	// Subnets - READ-ONLY; A collection of references to subnets.
 31050  	Subnets *[]Subnet `json:"subnets,omitempty"`
 31051  	// DisableBgpRoutePropagation - Whether to disable the routes learned by BGP on that route table. True means disable.
 31052  	DisableBgpRoutePropagation *bool `json:"disableBgpRoutePropagation,omitempty"`
 31053  	// ProvisioningState - READ-ONLY; The provisioning state of the route table resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 31054  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 31055  }
 31056  
 31057  // MarshalJSON is the custom marshaler for RouteTablePropertiesFormat.
 31058  func (rtpf RouteTablePropertiesFormat) MarshalJSON() ([]byte, error) {
 31059  	objectMap := make(map[string]interface{})
 31060  	if rtpf.Routes != nil {
 31061  		objectMap["routes"] = rtpf.Routes
 31062  	}
 31063  	if rtpf.DisableBgpRoutePropagation != nil {
 31064  		objectMap["disableBgpRoutePropagation"] = rtpf.DisableBgpRoutePropagation
 31065  	}
 31066  	return json.Marshal(objectMap)
 31067  }
 31068  
 31069  // RouteTablesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 31070  // long-running operation.
 31071  type RouteTablesCreateOrUpdateFuture struct {
 31072  	azure.FutureAPI
 31073  	// Result returns the result of the asynchronous operation.
 31074  	// If the operation has not completed it will return an error.
 31075  	Result func(RouteTablesClient) (RouteTable, error)
 31076  }
 31077  
 31078  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 31079  func (future *RouteTablesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 31080  	var azFuture azure.Future
 31081  	if err := json.Unmarshal(body, &azFuture); err != nil {
 31082  		return err
 31083  	}
 31084  	future.FutureAPI = &azFuture
 31085  	future.Result = future.result
 31086  	return nil
 31087  }
 31088  
 31089  // result is the default implementation for RouteTablesCreateOrUpdateFuture.Result.
 31090  func (future *RouteTablesCreateOrUpdateFuture) result(client RouteTablesClient) (rt RouteTable, err error) {
 31091  	var done bool
 31092  	done, err = future.DoneWithContext(context.Background(), client)
 31093  	if err != nil {
 31094  		err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 31095  		return
 31096  	}
 31097  	if !done {
 31098  		rt.Response.Response = future.Response()
 31099  		err = azure.NewAsyncOpIncompleteError("network.RouteTablesCreateOrUpdateFuture")
 31100  		return
 31101  	}
 31102  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 31103  	if rt.Response.Response, err = future.GetResult(sender); err == nil && rt.Response.Response.StatusCode != http.StatusNoContent {
 31104  		rt, err = client.CreateOrUpdateResponder(rt.Response.Response)
 31105  		if err != nil {
 31106  			err = autorest.NewErrorWithError(err, "network.RouteTablesCreateOrUpdateFuture", "Result", rt.Response.Response, "Failure responding to request")
 31107  		}
 31108  	}
 31109  	return
 31110  }
 31111  
 31112  // RouteTablesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 31113  // operation.
 31114  type RouteTablesDeleteFuture struct {
 31115  	azure.FutureAPI
 31116  	// Result returns the result of the asynchronous operation.
 31117  	// If the operation has not completed it will return an error.
 31118  	Result func(RouteTablesClient) (autorest.Response, error)
 31119  }
 31120  
 31121  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 31122  func (future *RouteTablesDeleteFuture) UnmarshalJSON(body []byte) error {
 31123  	var azFuture azure.Future
 31124  	if err := json.Unmarshal(body, &azFuture); err != nil {
 31125  		return err
 31126  	}
 31127  	future.FutureAPI = &azFuture
 31128  	future.Result = future.result
 31129  	return nil
 31130  }
 31131  
 31132  // result is the default implementation for RouteTablesDeleteFuture.Result.
 31133  func (future *RouteTablesDeleteFuture) result(client RouteTablesClient) (ar autorest.Response, err error) {
 31134  	var done bool
 31135  	done, err = future.DoneWithContext(context.Background(), client)
 31136  	if err != nil {
 31137  		err = autorest.NewErrorWithError(err, "network.RouteTablesDeleteFuture", "Result", future.Response(), "Polling failure")
 31138  		return
 31139  	}
 31140  	if !done {
 31141  		ar.Response = future.Response()
 31142  		err = azure.NewAsyncOpIncompleteError("network.RouteTablesDeleteFuture")
 31143  		return
 31144  	}
 31145  	ar.Response = future.Response()
 31146  	return
 31147  }
 31148  
 31149  // RoutingConfiguration routing Configuration indicating the associated and propagated route tables for
 31150  // this connection.
 31151  type RoutingConfiguration struct {
 31152  	// AssociatedRouteTable - The resource id RouteTable associated with this RoutingConfiguration.
 31153  	AssociatedRouteTable *SubResource `json:"associatedRouteTable,omitempty"`
 31154  	// PropagatedRouteTables - The list of RouteTables to advertise the routes to.
 31155  	PropagatedRouteTables *PropagatedRouteTable `json:"propagatedRouteTables,omitempty"`
 31156  	// VnetRoutes - List of routes that control routing from VirtualHub into a virtual network connection.
 31157  	VnetRoutes *VnetRoute `json:"vnetRoutes,omitempty"`
 31158  }
 31159  
 31160  // RuleCondition rule condition of type network.
 31161  type RuleCondition struct {
 31162  	// IPProtocols - Array of FirewallPolicyRuleConditionNetworkProtocols.
 31163  	IPProtocols *[]FirewallPolicyRuleConditionNetworkProtocol `json:"ipProtocols,omitempty"`
 31164  	// SourceAddresses - List of source IP addresses for this rule.
 31165  	SourceAddresses *[]string `json:"sourceAddresses,omitempty"`
 31166  	// DestinationAddresses - List of destination IP addresses or Service Tags.
 31167  	DestinationAddresses *[]string `json:"destinationAddresses,omitempty"`
 31168  	// DestinationPorts - List of destination ports.
 31169  	DestinationPorts *[]string `json:"destinationPorts,omitempty"`
 31170  	// SourceIPGroups - List of source IpGroups for this rule.
 31171  	SourceIPGroups *[]string `json:"sourceIpGroups,omitempty"`
 31172  	// DestinationIPGroups - List of destination IpGroups for this rule.
 31173  	DestinationIPGroups *[]string `json:"destinationIpGroups,omitempty"`
 31174  	// Name - Name of the rule condition.
 31175  	Name *string `json:"name,omitempty"`
 31176  	// Description - Description of the rule condition.
 31177  	Description *string `json:"description,omitempty"`
 31178  	// RuleConditionType - Possible values include: 'RuleConditionTypeFirewallPolicyRuleCondition', 'RuleConditionTypeApplicationRuleCondition', 'RuleConditionTypeNatRuleCondition', 'RuleConditionTypeNetworkRuleCondition'
 31179  	RuleConditionType RuleConditionType `json:"ruleConditionType,omitempty"`
 31180  }
 31181  
 31182  // MarshalJSON is the custom marshaler for RuleCondition.
 31183  func (rc RuleCondition) MarshalJSON() ([]byte, error) {
 31184  	rc.RuleConditionType = RuleConditionTypeNetworkRuleCondition
 31185  	objectMap := make(map[string]interface{})
 31186  	if rc.IPProtocols != nil {
 31187  		objectMap["ipProtocols"] = rc.IPProtocols
 31188  	}
 31189  	if rc.SourceAddresses != nil {
 31190  		objectMap["sourceAddresses"] = rc.SourceAddresses
 31191  	}
 31192  	if rc.DestinationAddresses != nil {
 31193  		objectMap["destinationAddresses"] = rc.DestinationAddresses
 31194  	}
 31195  	if rc.DestinationPorts != nil {
 31196  		objectMap["destinationPorts"] = rc.DestinationPorts
 31197  	}
 31198  	if rc.SourceIPGroups != nil {
 31199  		objectMap["sourceIpGroups"] = rc.SourceIPGroups
 31200  	}
 31201  	if rc.DestinationIPGroups != nil {
 31202  		objectMap["destinationIpGroups"] = rc.DestinationIPGroups
 31203  	}
 31204  	if rc.Name != nil {
 31205  		objectMap["name"] = rc.Name
 31206  	}
 31207  	if rc.Description != nil {
 31208  		objectMap["description"] = rc.Description
 31209  	}
 31210  	if rc.RuleConditionType != "" {
 31211  		objectMap["ruleConditionType"] = rc.RuleConditionType
 31212  	}
 31213  	return json.Marshal(objectMap)
 31214  }
 31215  
 31216  // AsApplicationRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
 31217  func (rc RuleCondition) AsApplicationRuleCondition() (*ApplicationRuleCondition, bool) {
 31218  	return nil, false
 31219  }
 31220  
 31221  // AsNatRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
 31222  func (rc RuleCondition) AsNatRuleCondition() (*NatRuleCondition, bool) {
 31223  	return nil, false
 31224  }
 31225  
 31226  // AsRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
 31227  func (rc RuleCondition) AsRuleCondition() (*RuleCondition, bool) {
 31228  	return &rc, true
 31229  }
 31230  
 31231  // AsFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
 31232  func (rc RuleCondition) AsFirewallPolicyRuleCondition() (*FirewallPolicyRuleCondition, bool) {
 31233  	return nil, false
 31234  }
 31235  
 31236  // AsBasicFirewallPolicyRuleCondition is the BasicFirewallPolicyRuleCondition implementation for RuleCondition.
 31237  func (rc RuleCondition) AsBasicFirewallPolicyRuleCondition() (BasicFirewallPolicyRuleCondition, bool) {
 31238  	return &rc, true
 31239  }
 31240  
 31241  // SecurityGroup networkSecurityGroup resource.
 31242  type SecurityGroup struct {
 31243  	autorest.Response `json:"-"`
 31244  	// SecurityGroupPropertiesFormat - Properties of the network security group.
 31245  	*SecurityGroupPropertiesFormat `json:"properties,omitempty"`
 31246  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 31247  	Etag *string `json:"etag,omitempty"`
 31248  	// ID - Resource ID.
 31249  	ID *string `json:"id,omitempty"`
 31250  	// Name - READ-ONLY; Resource name.
 31251  	Name *string `json:"name,omitempty"`
 31252  	// Type - READ-ONLY; Resource type.
 31253  	Type *string `json:"type,omitempty"`
 31254  	// Location - Resource location.
 31255  	Location *string `json:"location,omitempty"`
 31256  	// Tags - Resource tags.
 31257  	Tags map[string]*string `json:"tags"`
 31258  }
 31259  
 31260  // MarshalJSON is the custom marshaler for SecurityGroup.
 31261  func (sg SecurityGroup) MarshalJSON() ([]byte, error) {
 31262  	objectMap := make(map[string]interface{})
 31263  	if sg.SecurityGroupPropertiesFormat != nil {
 31264  		objectMap["properties"] = sg.SecurityGroupPropertiesFormat
 31265  	}
 31266  	if sg.ID != nil {
 31267  		objectMap["id"] = sg.ID
 31268  	}
 31269  	if sg.Location != nil {
 31270  		objectMap["location"] = sg.Location
 31271  	}
 31272  	if sg.Tags != nil {
 31273  		objectMap["tags"] = sg.Tags
 31274  	}
 31275  	return json.Marshal(objectMap)
 31276  }
 31277  
 31278  // UnmarshalJSON is the custom unmarshaler for SecurityGroup struct.
 31279  func (sg *SecurityGroup) UnmarshalJSON(body []byte) error {
 31280  	var m map[string]*json.RawMessage
 31281  	err := json.Unmarshal(body, &m)
 31282  	if err != nil {
 31283  		return err
 31284  	}
 31285  	for k, v := range m {
 31286  		switch k {
 31287  		case "properties":
 31288  			if v != nil {
 31289  				var securityGroupPropertiesFormat SecurityGroupPropertiesFormat
 31290  				err = json.Unmarshal(*v, &securityGroupPropertiesFormat)
 31291  				if err != nil {
 31292  					return err
 31293  				}
 31294  				sg.SecurityGroupPropertiesFormat = &securityGroupPropertiesFormat
 31295  			}
 31296  		case "etag":
 31297  			if v != nil {
 31298  				var etag string
 31299  				err = json.Unmarshal(*v, &etag)
 31300  				if err != nil {
 31301  					return err
 31302  				}
 31303  				sg.Etag = &etag
 31304  			}
 31305  		case "id":
 31306  			if v != nil {
 31307  				var ID string
 31308  				err = json.Unmarshal(*v, &ID)
 31309  				if err != nil {
 31310  					return err
 31311  				}
 31312  				sg.ID = &ID
 31313  			}
 31314  		case "name":
 31315  			if v != nil {
 31316  				var name string
 31317  				err = json.Unmarshal(*v, &name)
 31318  				if err != nil {
 31319  					return err
 31320  				}
 31321  				sg.Name = &name
 31322  			}
 31323  		case "type":
 31324  			if v != nil {
 31325  				var typeVar string
 31326  				err = json.Unmarshal(*v, &typeVar)
 31327  				if err != nil {
 31328  					return err
 31329  				}
 31330  				sg.Type = &typeVar
 31331  			}
 31332  		case "location":
 31333  			if v != nil {
 31334  				var location string
 31335  				err = json.Unmarshal(*v, &location)
 31336  				if err != nil {
 31337  					return err
 31338  				}
 31339  				sg.Location = &location
 31340  			}
 31341  		case "tags":
 31342  			if v != nil {
 31343  				var tags map[string]*string
 31344  				err = json.Unmarshal(*v, &tags)
 31345  				if err != nil {
 31346  					return err
 31347  				}
 31348  				sg.Tags = tags
 31349  			}
 31350  		}
 31351  	}
 31352  
 31353  	return nil
 31354  }
 31355  
 31356  // SecurityGroupListResult response for ListNetworkSecurityGroups API service call.
 31357  type SecurityGroupListResult struct {
 31358  	autorest.Response `json:"-"`
 31359  	// Value - A list of NetworkSecurityGroup resources.
 31360  	Value *[]SecurityGroup `json:"value,omitempty"`
 31361  	// NextLink - The URL to get the next set of results.
 31362  	NextLink *string `json:"nextLink,omitempty"`
 31363  }
 31364  
 31365  // SecurityGroupListResultIterator provides access to a complete listing of SecurityGroup values.
 31366  type SecurityGroupListResultIterator struct {
 31367  	i    int
 31368  	page SecurityGroupListResultPage
 31369  }
 31370  
 31371  // NextWithContext advances to the next value.  If there was an error making
 31372  // the request the iterator does not advance and the error is returned.
 31373  func (iter *SecurityGroupListResultIterator) NextWithContext(ctx context.Context) (err error) {
 31374  	if tracing.IsEnabled() {
 31375  		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultIterator.NextWithContext")
 31376  		defer func() {
 31377  			sc := -1
 31378  			if iter.Response().Response.Response != nil {
 31379  				sc = iter.Response().Response.Response.StatusCode
 31380  			}
 31381  			tracing.EndSpan(ctx, sc, err)
 31382  		}()
 31383  	}
 31384  	iter.i++
 31385  	if iter.i < len(iter.page.Values()) {
 31386  		return nil
 31387  	}
 31388  	err = iter.page.NextWithContext(ctx)
 31389  	if err != nil {
 31390  		iter.i--
 31391  		return err
 31392  	}
 31393  	iter.i = 0
 31394  	return nil
 31395  }
 31396  
 31397  // Next advances to the next value.  If there was an error making
 31398  // the request the iterator does not advance and the error is returned.
 31399  // Deprecated: Use NextWithContext() instead.
 31400  func (iter *SecurityGroupListResultIterator) Next() error {
 31401  	return iter.NextWithContext(context.Background())
 31402  }
 31403  
 31404  // NotDone returns true if the enumeration should be started or is not yet complete.
 31405  func (iter SecurityGroupListResultIterator) NotDone() bool {
 31406  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 31407  }
 31408  
 31409  // Response returns the raw server response from the last page request.
 31410  func (iter SecurityGroupListResultIterator) Response() SecurityGroupListResult {
 31411  	return iter.page.Response()
 31412  }
 31413  
 31414  // Value returns the current value or a zero-initialized value if the
 31415  // iterator has advanced beyond the end of the collection.
 31416  func (iter SecurityGroupListResultIterator) Value() SecurityGroup {
 31417  	if !iter.page.NotDone() {
 31418  		return SecurityGroup{}
 31419  	}
 31420  	return iter.page.Values()[iter.i]
 31421  }
 31422  
 31423  // Creates a new instance of the SecurityGroupListResultIterator type.
 31424  func NewSecurityGroupListResultIterator(page SecurityGroupListResultPage) SecurityGroupListResultIterator {
 31425  	return SecurityGroupListResultIterator{page: page}
 31426  }
 31427  
 31428  // IsEmpty returns true if the ListResult contains no values.
 31429  func (sglr SecurityGroupListResult) IsEmpty() bool {
 31430  	return sglr.Value == nil || len(*sglr.Value) == 0
 31431  }
 31432  
 31433  // hasNextLink returns true if the NextLink is not empty.
 31434  func (sglr SecurityGroupListResult) hasNextLink() bool {
 31435  	return sglr.NextLink != nil && len(*sglr.NextLink) != 0
 31436  }
 31437  
 31438  // securityGroupListResultPreparer prepares a request to retrieve the next set of results.
 31439  // It returns nil if no more results exist.
 31440  func (sglr SecurityGroupListResult) securityGroupListResultPreparer(ctx context.Context) (*http.Request, error) {
 31441  	if !sglr.hasNextLink() {
 31442  		return nil, nil
 31443  	}
 31444  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 31445  		autorest.AsJSON(),
 31446  		autorest.AsGet(),
 31447  		autorest.WithBaseURL(to.String(sglr.NextLink)))
 31448  }
 31449  
 31450  // SecurityGroupListResultPage contains a page of SecurityGroup values.
 31451  type SecurityGroupListResultPage struct {
 31452  	fn   func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)
 31453  	sglr SecurityGroupListResult
 31454  }
 31455  
 31456  // NextWithContext advances to the next page of values.  If there was an error making
 31457  // the request the page does not advance and the error is returned.
 31458  func (page *SecurityGroupListResultPage) NextWithContext(ctx context.Context) (err error) {
 31459  	if tracing.IsEnabled() {
 31460  		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityGroupListResultPage.NextWithContext")
 31461  		defer func() {
 31462  			sc := -1
 31463  			if page.Response().Response.Response != nil {
 31464  				sc = page.Response().Response.Response.StatusCode
 31465  			}
 31466  			tracing.EndSpan(ctx, sc, err)
 31467  		}()
 31468  	}
 31469  	for {
 31470  		next, err := page.fn(ctx, page.sglr)
 31471  		if err != nil {
 31472  			return err
 31473  		}
 31474  		page.sglr = next
 31475  		if !next.hasNextLink() || !next.IsEmpty() {
 31476  			break
 31477  		}
 31478  	}
 31479  	return nil
 31480  }
 31481  
 31482  // Next advances to the next page of values.  If there was an error making
 31483  // the request the page does not advance and the error is returned.
 31484  // Deprecated: Use NextWithContext() instead.
 31485  func (page *SecurityGroupListResultPage) Next() error {
 31486  	return page.NextWithContext(context.Background())
 31487  }
 31488  
 31489  // NotDone returns true if the page enumeration should be started or is not yet complete.
 31490  func (page SecurityGroupListResultPage) NotDone() bool {
 31491  	return !page.sglr.IsEmpty()
 31492  }
 31493  
 31494  // Response returns the raw server response from the last page request.
 31495  func (page SecurityGroupListResultPage) Response() SecurityGroupListResult {
 31496  	return page.sglr
 31497  }
 31498  
 31499  // Values returns the slice of values for the current page or nil if there are no values.
 31500  func (page SecurityGroupListResultPage) Values() []SecurityGroup {
 31501  	if page.sglr.IsEmpty() {
 31502  		return nil
 31503  	}
 31504  	return *page.sglr.Value
 31505  }
 31506  
 31507  // Creates a new instance of the SecurityGroupListResultPage type.
 31508  func NewSecurityGroupListResultPage(cur SecurityGroupListResult, getNextPage func(context.Context, SecurityGroupListResult) (SecurityGroupListResult, error)) SecurityGroupListResultPage {
 31509  	return SecurityGroupListResultPage{
 31510  		fn:   getNextPage,
 31511  		sglr: cur,
 31512  	}
 31513  }
 31514  
 31515  // SecurityGroupNetworkInterface network interface and all its associated security rules.
 31516  type SecurityGroupNetworkInterface struct {
 31517  	// ID - ID of the network interface.
 31518  	ID *string `json:"id,omitempty"`
 31519  	// SecurityRuleAssociations - All security rules associated with the network interface.
 31520  	SecurityRuleAssociations *SecurityRuleAssociations `json:"securityRuleAssociations,omitempty"`
 31521  }
 31522  
 31523  // SecurityGroupPropertiesFormat network Security Group resource.
 31524  type SecurityGroupPropertiesFormat struct {
 31525  	// SecurityRules - A collection of security rules of the network security group.
 31526  	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
 31527  	// DefaultSecurityRules - READ-ONLY; The default security rules of network security group.
 31528  	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
 31529  	// NetworkInterfaces - READ-ONLY; A collection of references to network interfaces.
 31530  	NetworkInterfaces *[]Interface `json:"networkInterfaces,omitempty"`
 31531  	// Subnets - READ-ONLY; A collection of references to subnets.
 31532  	Subnets *[]Subnet `json:"subnets,omitempty"`
 31533  	// FlowLogs - READ-ONLY; A collection of references to flow log resources.
 31534  	FlowLogs *[]FlowLog `json:"flowLogs,omitempty"`
 31535  	// ResourceGUID - READ-ONLY; The resource GUID property of the network security group resource.
 31536  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 31537  	// ProvisioningState - READ-ONLY; The provisioning state of the network security group resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 31538  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 31539  }
 31540  
 31541  // MarshalJSON is the custom marshaler for SecurityGroupPropertiesFormat.
 31542  func (sgpf SecurityGroupPropertiesFormat) MarshalJSON() ([]byte, error) {
 31543  	objectMap := make(map[string]interface{})
 31544  	if sgpf.SecurityRules != nil {
 31545  		objectMap["securityRules"] = sgpf.SecurityRules
 31546  	}
 31547  	return json.Marshal(objectMap)
 31548  }
 31549  
 31550  // SecurityGroupResult network configuration diagnostic result corresponded provided traffic query.
 31551  type SecurityGroupResult struct {
 31552  	// SecurityRuleAccessResult - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
 31553  	SecurityRuleAccessResult SecurityRuleAccess `json:"securityRuleAccessResult,omitempty"`
 31554  	// EvaluatedNetworkSecurityGroups - READ-ONLY; List of results network security groups diagnostic.
 31555  	EvaluatedNetworkSecurityGroups *[]EvaluatedNetworkSecurityGroup `json:"evaluatedNetworkSecurityGroups,omitempty"`
 31556  }
 31557  
 31558  // MarshalJSON is the custom marshaler for SecurityGroupResult.
 31559  func (sgr SecurityGroupResult) MarshalJSON() ([]byte, error) {
 31560  	objectMap := make(map[string]interface{})
 31561  	if sgr.SecurityRuleAccessResult != "" {
 31562  		objectMap["securityRuleAccessResult"] = sgr.SecurityRuleAccessResult
 31563  	}
 31564  	return json.Marshal(objectMap)
 31565  }
 31566  
 31567  // SecurityGroupsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 31568  // long-running operation.
 31569  type SecurityGroupsCreateOrUpdateFuture struct {
 31570  	azure.FutureAPI
 31571  	// Result returns the result of the asynchronous operation.
 31572  	// If the operation has not completed it will return an error.
 31573  	Result func(SecurityGroupsClient) (SecurityGroup, error)
 31574  }
 31575  
 31576  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 31577  func (future *SecurityGroupsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 31578  	var azFuture azure.Future
 31579  	if err := json.Unmarshal(body, &azFuture); err != nil {
 31580  		return err
 31581  	}
 31582  	future.FutureAPI = &azFuture
 31583  	future.Result = future.result
 31584  	return nil
 31585  }
 31586  
 31587  // result is the default implementation for SecurityGroupsCreateOrUpdateFuture.Result.
 31588  func (future *SecurityGroupsCreateOrUpdateFuture) result(client SecurityGroupsClient) (sg SecurityGroup, err error) {
 31589  	var done bool
 31590  	done, err = future.DoneWithContext(context.Background(), client)
 31591  	if err != nil {
 31592  		err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 31593  		return
 31594  	}
 31595  	if !done {
 31596  		sg.Response.Response = future.Response()
 31597  		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsCreateOrUpdateFuture")
 31598  		return
 31599  	}
 31600  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 31601  	if sg.Response.Response, err = future.GetResult(sender); err == nil && sg.Response.Response.StatusCode != http.StatusNoContent {
 31602  		sg, err = client.CreateOrUpdateResponder(sg.Response.Response)
 31603  		if err != nil {
 31604  			err = autorest.NewErrorWithError(err, "network.SecurityGroupsCreateOrUpdateFuture", "Result", sg.Response.Response, "Failure responding to request")
 31605  		}
 31606  	}
 31607  	return
 31608  }
 31609  
 31610  // SecurityGroupsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 31611  // operation.
 31612  type SecurityGroupsDeleteFuture struct {
 31613  	azure.FutureAPI
 31614  	// Result returns the result of the asynchronous operation.
 31615  	// If the operation has not completed it will return an error.
 31616  	Result func(SecurityGroupsClient) (autorest.Response, error)
 31617  }
 31618  
 31619  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 31620  func (future *SecurityGroupsDeleteFuture) UnmarshalJSON(body []byte) error {
 31621  	var azFuture azure.Future
 31622  	if err := json.Unmarshal(body, &azFuture); err != nil {
 31623  		return err
 31624  	}
 31625  	future.FutureAPI = &azFuture
 31626  	future.Result = future.result
 31627  	return nil
 31628  }
 31629  
 31630  // result is the default implementation for SecurityGroupsDeleteFuture.Result.
 31631  func (future *SecurityGroupsDeleteFuture) result(client SecurityGroupsClient) (ar autorest.Response, err error) {
 31632  	var done bool
 31633  	done, err = future.DoneWithContext(context.Background(), client)
 31634  	if err != nil {
 31635  		err = autorest.NewErrorWithError(err, "network.SecurityGroupsDeleteFuture", "Result", future.Response(), "Polling failure")
 31636  		return
 31637  	}
 31638  	if !done {
 31639  		ar.Response = future.Response()
 31640  		err = azure.NewAsyncOpIncompleteError("network.SecurityGroupsDeleteFuture")
 31641  		return
 31642  	}
 31643  	ar.Response = future.Response()
 31644  	return
 31645  }
 31646  
 31647  // SecurityGroupViewParameters parameters that define the VM to check security groups for.
 31648  type SecurityGroupViewParameters struct {
 31649  	// TargetResourceID - ID of the target VM.
 31650  	TargetResourceID *string `json:"targetResourceId,omitempty"`
 31651  }
 31652  
 31653  // SecurityGroupViewResult the information about security rules applied to the specified VM.
 31654  type SecurityGroupViewResult struct {
 31655  	autorest.Response `json:"-"`
 31656  	// NetworkInterfaces - List of network interfaces on the specified VM.
 31657  	NetworkInterfaces *[]SecurityGroupNetworkInterface `json:"networkInterfaces,omitempty"`
 31658  }
 31659  
 31660  // SecurityPartnerProvider security Partner Provider resource.
 31661  type SecurityPartnerProvider struct {
 31662  	autorest.Response `json:"-"`
 31663  	// SecurityPartnerProviderPropertiesFormat - Properties of the Security Partner Provider.
 31664  	*SecurityPartnerProviderPropertiesFormat `json:"properties,omitempty"`
 31665  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 31666  	Etag *string `json:"etag,omitempty"`
 31667  	// ID - Resource ID.
 31668  	ID *string `json:"id,omitempty"`
 31669  	// Name - READ-ONLY; Resource name.
 31670  	Name *string `json:"name,omitempty"`
 31671  	// Type - READ-ONLY; Resource type.
 31672  	Type *string `json:"type,omitempty"`
 31673  	// Location - Resource location.
 31674  	Location *string `json:"location,omitempty"`
 31675  	// Tags - Resource tags.
 31676  	Tags map[string]*string `json:"tags"`
 31677  }
 31678  
 31679  // MarshalJSON is the custom marshaler for SecurityPartnerProvider.
 31680  func (spp SecurityPartnerProvider) MarshalJSON() ([]byte, error) {
 31681  	objectMap := make(map[string]interface{})
 31682  	if spp.SecurityPartnerProviderPropertiesFormat != nil {
 31683  		objectMap["properties"] = spp.SecurityPartnerProviderPropertiesFormat
 31684  	}
 31685  	if spp.ID != nil {
 31686  		objectMap["id"] = spp.ID
 31687  	}
 31688  	if spp.Location != nil {
 31689  		objectMap["location"] = spp.Location
 31690  	}
 31691  	if spp.Tags != nil {
 31692  		objectMap["tags"] = spp.Tags
 31693  	}
 31694  	return json.Marshal(objectMap)
 31695  }
 31696  
 31697  // UnmarshalJSON is the custom unmarshaler for SecurityPartnerProvider struct.
 31698  func (spp *SecurityPartnerProvider) UnmarshalJSON(body []byte) error {
 31699  	var m map[string]*json.RawMessage
 31700  	err := json.Unmarshal(body, &m)
 31701  	if err != nil {
 31702  		return err
 31703  	}
 31704  	for k, v := range m {
 31705  		switch k {
 31706  		case "properties":
 31707  			if v != nil {
 31708  				var securityPartnerProviderPropertiesFormat SecurityPartnerProviderPropertiesFormat
 31709  				err = json.Unmarshal(*v, &securityPartnerProviderPropertiesFormat)
 31710  				if err != nil {
 31711  					return err
 31712  				}
 31713  				spp.SecurityPartnerProviderPropertiesFormat = &securityPartnerProviderPropertiesFormat
 31714  			}
 31715  		case "etag":
 31716  			if v != nil {
 31717  				var etag string
 31718  				err = json.Unmarshal(*v, &etag)
 31719  				if err != nil {
 31720  					return err
 31721  				}
 31722  				spp.Etag = &etag
 31723  			}
 31724  		case "id":
 31725  			if v != nil {
 31726  				var ID string
 31727  				err = json.Unmarshal(*v, &ID)
 31728  				if err != nil {
 31729  					return err
 31730  				}
 31731  				spp.ID = &ID
 31732  			}
 31733  		case "name":
 31734  			if v != nil {
 31735  				var name string
 31736  				err = json.Unmarshal(*v, &name)
 31737  				if err != nil {
 31738  					return err
 31739  				}
 31740  				spp.Name = &name
 31741  			}
 31742  		case "type":
 31743  			if v != nil {
 31744  				var typeVar string
 31745  				err = json.Unmarshal(*v, &typeVar)
 31746  				if err != nil {
 31747  					return err
 31748  				}
 31749  				spp.Type = &typeVar
 31750  			}
 31751  		case "location":
 31752  			if v != nil {
 31753  				var location string
 31754  				err = json.Unmarshal(*v, &location)
 31755  				if err != nil {
 31756  					return err
 31757  				}
 31758  				spp.Location = &location
 31759  			}
 31760  		case "tags":
 31761  			if v != nil {
 31762  				var tags map[string]*string
 31763  				err = json.Unmarshal(*v, &tags)
 31764  				if err != nil {
 31765  					return err
 31766  				}
 31767  				spp.Tags = tags
 31768  			}
 31769  		}
 31770  	}
 31771  
 31772  	return nil
 31773  }
 31774  
 31775  // SecurityPartnerProviderListResult response for ListSecurityPartnerProviders API service call.
 31776  type SecurityPartnerProviderListResult struct {
 31777  	autorest.Response `json:"-"`
 31778  	// Value - List of Security Partner Providers in a resource group.
 31779  	Value *[]SecurityPartnerProvider `json:"value,omitempty"`
 31780  	// NextLink - URL to get the next set of results.
 31781  	NextLink *string `json:"nextLink,omitempty"`
 31782  }
 31783  
 31784  // SecurityPartnerProviderListResultIterator provides access to a complete listing of
 31785  // SecurityPartnerProvider values.
 31786  type SecurityPartnerProviderListResultIterator struct {
 31787  	i    int
 31788  	page SecurityPartnerProviderListResultPage
 31789  }
 31790  
 31791  // NextWithContext advances to the next value.  If there was an error making
 31792  // the request the iterator does not advance and the error is returned.
 31793  func (iter *SecurityPartnerProviderListResultIterator) NextWithContext(ctx context.Context) (err error) {
 31794  	if tracing.IsEnabled() {
 31795  		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityPartnerProviderListResultIterator.NextWithContext")
 31796  		defer func() {
 31797  			sc := -1
 31798  			if iter.Response().Response.Response != nil {
 31799  				sc = iter.Response().Response.Response.StatusCode
 31800  			}
 31801  			tracing.EndSpan(ctx, sc, err)
 31802  		}()
 31803  	}
 31804  	iter.i++
 31805  	if iter.i < len(iter.page.Values()) {
 31806  		return nil
 31807  	}
 31808  	err = iter.page.NextWithContext(ctx)
 31809  	if err != nil {
 31810  		iter.i--
 31811  		return err
 31812  	}
 31813  	iter.i = 0
 31814  	return nil
 31815  }
 31816  
 31817  // Next advances to the next value.  If there was an error making
 31818  // the request the iterator does not advance and the error is returned.
 31819  // Deprecated: Use NextWithContext() instead.
 31820  func (iter *SecurityPartnerProviderListResultIterator) Next() error {
 31821  	return iter.NextWithContext(context.Background())
 31822  }
 31823  
 31824  // NotDone returns true if the enumeration should be started or is not yet complete.
 31825  func (iter SecurityPartnerProviderListResultIterator) NotDone() bool {
 31826  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 31827  }
 31828  
 31829  // Response returns the raw server response from the last page request.
 31830  func (iter SecurityPartnerProviderListResultIterator) Response() SecurityPartnerProviderListResult {
 31831  	return iter.page.Response()
 31832  }
 31833  
 31834  // Value returns the current value or a zero-initialized value if the
 31835  // iterator has advanced beyond the end of the collection.
 31836  func (iter SecurityPartnerProviderListResultIterator) Value() SecurityPartnerProvider {
 31837  	if !iter.page.NotDone() {
 31838  		return SecurityPartnerProvider{}
 31839  	}
 31840  	return iter.page.Values()[iter.i]
 31841  }
 31842  
 31843  // Creates a new instance of the SecurityPartnerProviderListResultIterator type.
 31844  func NewSecurityPartnerProviderListResultIterator(page SecurityPartnerProviderListResultPage) SecurityPartnerProviderListResultIterator {
 31845  	return SecurityPartnerProviderListResultIterator{page: page}
 31846  }
 31847  
 31848  // IsEmpty returns true if the ListResult contains no values.
 31849  func (spplr SecurityPartnerProviderListResult) IsEmpty() bool {
 31850  	return spplr.Value == nil || len(*spplr.Value) == 0
 31851  }
 31852  
 31853  // hasNextLink returns true if the NextLink is not empty.
 31854  func (spplr SecurityPartnerProviderListResult) hasNextLink() bool {
 31855  	return spplr.NextLink != nil && len(*spplr.NextLink) != 0
 31856  }
 31857  
 31858  // securityPartnerProviderListResultPreparer prepares a request to retrieve the next set of results.
 31859  // It returns nil if no more results exist.
 31860  func (spplr SecurityPartnerProviderListResult) securityPartnerProviderListResultPreparer(ctx context.Context) (*http.Request, error) {
 31861  	if !spplr.hasNextLink() {
 31862  		return nil, nil
 31863  	}
 31864  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 31865  		autorest.AsJSON(),
 31866  		autorest.AsGet(),
 31867  		autorest.WithBaseURL(to.String(spplr.NextLink)))
 31868  }
 31869  
 31870  // SecurityPartnerProviderListResultPage contains a page of SecurityPartnerProvider values.
 31871  type SecurityPartnerProviderListResultPage struct {
 31872  	fn    func(context.Context, SecurityPartnerProviderListResult) (SecurityPartnerProviderListResult, error)
 31873  	spplr SecurityPartnerProviderListResult
 31874  }
 31875  
 31876  // NextWithContext advances to the next page of values.  If there was an error making
 31877  // the request the page does not advance and the error is returned.
 31878  func (page *SecurityPartnerProviderListResultPage) NextWithContext(ctx context.Context) (err error) {
 31879  	if tracing.IsEnabled() {
 31880  		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityPartnerProviderListResultPage.NextWithContext")
 31881  		defer func() {
 31882  			sc := -1
 31883  			if page.Response().Response.Response != nil {
 31884  				sc = page.Response().Response.Response.StatusCode
 31885  			}
 31886  			tracing.EndSpan(ctx, sc, err)
 31887  		}()
 31888  	}
 31889  	for {
 31890  		next, err := page.fn(ctx, page.spplr)
 31891  		if err != nil {
 31892  			return err
 31893  		}
 31894  		page.spplr = next
 31895  		if !next.hasNextLink() || !next.IsEmpty() {
 31896  			break
 31897  		}
 31898  	}
 31899  	return nil
 31900  }
 31901  
 31902  // Next advances to the next page of values.  If there was an error making
 31903  // the request the page does not advance and the error is returned.
 31904  // Deprecated: Use NextWithContext() instead.
 31905  func (page *SecurityPartnerProviderListResultPage) Next() error {
 31906  	return page.NextWithContext(context.Background())
 31907  }
 31908  
 31909  // NotDone returns true if the page enumeration should be started or is not yet complete.
 31910  func (page SecurityPartnerProviderListResultPage) NotDone() bool {
 31911  	return !page.spplr.IsEmpty()
 31912  }
 31913  
 31914  // Response returns the raw server response from the last page request.
 31915  func (page SecurityPartnerProviderListResultPage) Response() SecurityPartnerProviderListResult {
 31916  	return page.spplr
 31917  }
 31918  
 31919  // Values returns the slice of values for the current page or nil if there are no values.
 31920  func (page SecurityPartnerProviderListResultPage) Values() []SecurityPartnerProvider {
 31921  	if page.spplr.IsEmpty() {
 31922  		return nil
 31923  	}
 31924  	return *page.spplr.Value
 31925  }
 31926  
 31927  // Creates a new instance of the SecurityPartnerProviderListResultPage type.
 31928  func NewSecurityPartnerProviderListResultPage(cur SecurityPartnerProviderListResult, getNextPage func(context.Context, SecurityPartnerProviderListResult) (SecurityPartnerProviderListResult, error)) SecurityPartnerProviderListResultPage {
 31929  	return SecurityPartnerProviderListResultPage{
 31930  		fn:    getNextPage,
 31931  		spplr: cur,
 31932  	}
 31933  }
 31934  
 31935  // SecurityPartnerProviderPropertiesFormat properties of the Security Partner Provider.
 31936  type SecurityPartnerProviderPropertiesFormat struct {
 31937  	// ProvisioningState - READ-ONLY; The provisioning state of the Security Partner Provider resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 31938  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 31939  	// SecurityProviderName - The security provider name. Possible values include: 'ZScaler', 'IBoss', 'Checkpoint'
 31940  	SecurityProviderName SecurityProviderName `json:"securityProviderName,omitempty"`
 31941  	// ConnectionStatus - READ-ONLY; The connection status with the Security Partner Provider. Possible values include: 'SecurityPartnerProviderConnectionStatusUnknown', 'SecurityPartnerProviderConnectionStatusPartiallyConnected', 'SecurityPartnerProviderConnectionStatusConnected', 'SecurityPartnerProviderConnectionStatusNotConnected'
 31942  	ConnectionStatus SecurityPartnerProviderConnectionStatus `json:"connectionStatus,omitempty"`
 31943  	// VirtualHub - The virtualHub to which the Security Partner Provider belongs.
 31944  	VirtualHub *SubResource `json:"virtualHub,omitempty"`
 31945  }
 31946  
 31947  // MarshalJSON is the custom marshaler for SecurityPartnerProviderPropertiesFormat.
 31948  func (spppf SecurityPartnerProviderPropertiesFormat) MarshalJSON() ([]byte, error) {
 31949  	objectMap := make(map[string]interface{})
 31950  	if spppf.SecurityProviderName != "" {
 31951  		objectMap["securityProviderName"] = spppf.SecurityProviderName
 31952  	}
 31953  	if spppf.VirtualHub != nil {
 31954  		objectMap["virtualHub"] = spppf.VirtualHub
 31955  	}
 31956  	return json.Marshal(objectMap)
 31957  }
 31958  
 31959  // SecurityPartnerProvidersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
 31960  // a long-running operation.
 31961  type SecurityPartnerProvidersCreateOrUpdateFuture struct {
 31962  	azure.FutureAPI
 31963  	// Result returns the result of the asynchronous operation.
 31964  	// If the operation has not completed it will return an error.
 31965  	Result func(SecurityPartnerProvidersClient) (SecurityPartnerProvider, error)
 31966  }
 31967  
 31968  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 31969  func (future *SecurityPartnerProvidersCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 31970  	var azFuture azure.Future
 31971  	if err := json.Unmarshal(body, &azFuture); err != nil {
 31972  		return err
 31973  	}
 31974  	future.FutureAPI = &azFuture
 31975  	future.Result = future.result
 31976  	return nil
 31977  }
 31978  
 31979  // result is the default implementation for SecurityPartnerProvidersCreateOrUpdateFuture.Result.
 31980  func (future *SecurityPartnerProvidersCreateOrUpdateFuture) result(client SecurityPartnerProvidersClient) (spp SecurityPartnerProvider, err error) {
 31981  	var done bool
 31982  	done, err = future.DoneWithContext(context.Background(), client)
 31983  	if err != nil {
 31984  		err = autorest.NewErrorWithError(err, "network.SecurityPartnerProvidersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 31985  		return
 31986  	}
 31987  	if !done {
 31988  		spp.Response.Response = future.Response()
 31989  		err = azure.NewAsyncOpIncompleteError("network.SecurityPartnerProvidersCreateOrUpdateFuture")
 31990  		return
 31991  	}
 31992  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 31993  	if spp.Response.Response, err = future.GetResult(sender); err == nil && spp.Response.Response.StatusCode != http.StatusNoContent {
 31994  		spp, err = client.CreateOrUpdateResponder(spp.Response.Response)
 31995  		if err != nil {
 31996  			err = autorest.NewErrorWithError(err, "network.SecurityPartnerProvidersCreateOrUpdateFuture", "Result", spp.Response.Response, "Failure responding to request")
 31997  		}
 31998  	}
 31999  	return
 32000  }
 32001  
 32002  // SecurityPartnerProvidersDeleteFuture an abstraction for monitoring and retrieving the results of a
 32003  // long-running operation.
 32004  type SecurityPartnerProvidersDeleteFuture struct {
 32005  	azure.FutureAPI
 32006  	// Result returns the result of the asynchronous operation.
 32007  	// If the operation has not completed it will return an error.
 32008  	Result func(SecurityPartnerProvidersClient) (autorest.Response, error)
 32009  }
 32010  
 32011  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 32012  func (future *SecurityPartnerProvidersDeleteFuture) UnmarshalJSON(body []byte) error {
 32013  	var azFuture azure.Future
 32014  	if err := json.Unmarshal(body, &azFuture); err != nil {
 32015  		return err
 32016  	}
 32017  	future.FutureAPI = &azFuture
 32018  	future.Result = future.result
 32019  	return nil
 32020  }
 32021  
 32022  // result is the default implementation for SecurityPartnerProvidersDeleteFuture.Result.
 32023  func (future *SecurityPartnerProvidersDeleteFuture) result(client SecurityPartnerProvidersClient) (ar autorest.Response, err error) {
 32024  	var done bool
 32025  	done, err = future.DoneWithContext(context.Background(), client)
 32026  	if err != nil {
 32027  		err = autorest.NewErrorWithError(err, "network.SecurityPartnerProvidersDeleteFuture", "Result", future.Response(), "Polling failure")
 32028  		return
 32029  	}
 32030  	if !done {
 32031  		ar.Response = future.Response()
 32032  		err = azure.NewAsyncOpIncompleteError("network.SecurityPartnerProvidersDeleteFuture")
 32033  		return
 32034  	}
 32035  	ar.Response = future.Response()
 32036  	return
 32037  }
 32038  
 32039  // SecurityRule network security rule.
 32040  type SecurityRule struct {
 32041  	autorest.Response `json:"-"`
 32042  	// SecurityRulePropertiesFormat - Properties of the security rule.
 32043  	*SecurityRulePropertiesFormat `json:"properties,omitempty"`
 32044  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 32045  	Name *string `json:"name,omitempty"`
 32046  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 32047  	Etag *string `json:"etag,omitempty"`
 32048  	// ID - Resource ID.
 32049  	ID *string `json:"id,omitempty"`
 32050  }
 32051  
 32052  // MarshalJSON is the custom marshaler for SecurityRule.
 32053  func (sr SecurityRule) MarshalJSON() ([]byte, error) {
 32054  	objectMap := make(map[string]interface{})
 32055  	if sr.SecurityRulePropertiesFormat != nil {
 32056  		objectMap["properties"] = sr.SecurityRulePropertiesFormat
 32057  	}
 32058  	if sr.Name != nil {
 32059  		objectMap["name"] = sr.Name
 32060  	}
 32061  	if sr.ID != nil {
 32062  		objectMap["id"] = sr.ID
 32063  	}
 32064  	return json.Marshal(objectMap)
 32065  }
 32066  
 32067  // UnmarshalJSON is the custom unmarshaler for SecurityRule struct.
 32068  func (sr *SecurityRule) UnmarshalJSON(body []byte) error {
 32069  	var m map[string]*json.RawMessage
 32070  	err := json.Unmarshal(body, &m)
 32071  	if err != nil {
 32072  		return err
 32073  	}
 32074  	for k, v := range m {
 32075  		switch k {
 32076  		case "properties":
 32077  			if v != nil {
 32078  				var securityRulePropertiesFormat SecurityRulePropertiesFormat
 32079  				err = json.Unmarshal(*v, &securityRulePropertiesFormat)
 32080  				if err != nil {
 32081  					return err
 32082  				}
 32083  				sr.SecurityRulePropertiesFormat = &securityRulePropertiesFormat
 32084  			}
 32085  		case "name":
 32086  			if v != nil {
 32087  				var name string
 32088  				err = json.Unmarshal(*v, &name)
 32089  				if err != nil {
 32090  					return err
 32091  				}
 32092  				sr.Name = &name
 32093  			}
 32094  		case "etag":
 32095  			if v != nil {
 32096  				var etag string
 32097  				err = json.Unmarshal(*v, &etag)
 32098  				if err != nil {
 32099  					return err
 32100  				}
 32101  				sr.Etag = &etag
 32102  			}
 32103  		case "id":
 32104  			if v != nil {
 32105  				var ID string
 32106  				err = json.Unmarshal(*v, &ID)
 32107  				if err != nil {
 32108  					return err
 32109  				}
 32110  				sr.ID = &ID
 32111  			}
 32112  		}
 32113  	}
 32114  
 32115  	return nil
 32116  }
 32117  
 32118  // SecurityRuleAssociations all security rules associated with the network interface.
 32119  type SecurityRuleAssociations struct {
 32120  	// NetworkInterfaceAssociation - Network interface and it's custom security rules.
 32121  	NetworkInterfaceAssociation *InterfaceAssociation `json:"networkInterfaceAssociation,omitempty"`
 32122  	// SubnetAssociation - Subnet and it's custom security rules.
 32123  	SubnetAssociation *SubnetAssociation `json:"subnetAssociation,omitempty"`
 32124  	// DefaultSecurityRules - Collection of default security rules of the network security group.
 32125  	DefaultSecurityRules *[]SecurityRule `json:"defaultSecurityRules,omitempty"`
 32126  	// EffectiveSecurityRules - Collection of effective security rules.
 32127  	EffectiveSecurityRules *[]EffectiveNetworkSecurityRule `json:"effectiveSecurityRules,omitempty"`
 32128  }
 32129  
 32130  // SecurityRuleListResult response for ListSecurityRule API service call. Retrieves all security rules that
 32131  // belongs to a network security group.
 32132  type SecurityRuleListResult struct {
 32133  	autorest.Response `json:"-"`
 32134  	// Value - The security rules in a network security group.
 32135  	Value *[]SecurityRule `json:"value,omitempty"`
 32136  	// NextLink - The URL to get the next set of results.
 32137  	NextLink *string `json:"nextLink,omitempty"`
 32138  }
 32139  
 32140  // SecurityRuleListResultIterator provides access to a complete listing of SecurityRule values.
 32141  type SecurityRuleListResultIterator struct {
 32142  	i    int
 32143  	page SecurityRuleListResultPage
 32144  }
 32145  
 32146  // NextWithContext advances to the next value.  If there was an error making
 32147  // the request the iterator does not advance and the error is returned.
 32148  func (iter *SecurityRuleListResultIterator) NextWithContext(ctx context.Context) (err error) {
 32149  	if tracing.IsEnabled() {
 32150  		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultIterator.NextWithContext")
 32151  		defer func() {
 32152  			sc := -1
 32153  			if iter.Response().Response.Response != nil {
 32154  				sc = iter.Response().Response.Response.StatusCode
 32155  			}
 32156  			tracing.EndSpan(ctx, sc, err)
 32157  		}()
 32158  	}
 32159  	iter.i++
 32160  	if iter.i < len(iter.page.Values()) {
 32161  		return nil
 32162  	}
 32163  	err = iter.page.NextWithContext(ctx)
 32164  	if err != nil {
 32165  		iter.i--
 32166  		return err
 32167  	}
 32168  	iter.i = 0
 32169  	return nil
 32170  }
 32171  
 32172  // Next advances to the next value.  If there was an error making
 32173  // the request the iterator does not advance and the error is returned.
 32174  // Deprecated: Use NextWithContext() instead.
 32175  func (iter *SecurityRuleListResultIterator) Next() error {
 32176  	return iter.NextWithContext(context.Background())
 32177  }
 32178  
 32179  // NotDone returns true if the enumeration should be started or is not yet complete.
 32180  func (iter SecurityRuleListResultIterator) NotDone() bool {
 32181  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 32182  }
 32183  
 32184  // Response returns the raw server response from the last page request.
 32185  func (iter SecurityRuleListResultIterator) Response() SecurityRuleListResult {
 32186  	return iter.page.Response()
 32187  }
 32188  
 32189  // Value returns the current value or a zero-initialized value if the
 32190  // iterator has advanced beyond the end of the collection.
 32191  func (iter SecurityRuleListResultIterator) Value() SecurityRule {
 32192  	if !iter.page.NotDone() {
 32193  		return SecurityRule{}
 32194  	}
 32195  	return iter.page.Values()[iter.i]
 32196  }
 32197  
 32198  // Creates a new instance of the SecurityRuleListResultIterator type.
 32199  func NewSecurityRuleListResultIterator(page SecurityRuleListResultPage) SecurityRuleListResultIterator {
 32200  	return SecurityRuleListResultIterator{page: page}
 32201  }
 32202  
 32203  // IsEmpty returns true if the ListResult contains no values.
 32204  func (srlr SecurityRuleListResult) IsEmpty() bool {
 32205  	return srlr.Value == nil || len(*srlr.Value) == 0
 32206  }
 32207  
 32208  // hasNextLink returns true if the NextLink is not empty.
 32209  func (srlr SecurityRuleListResult) hasNextLink() bool {
 32210  	return srlr.NextLink != nil && len(*srlr.NextLink) != 0
 32211  }
 32212  
 32213  // securityRuleListResultPreparer prepares a request to retrieve the next set of results.
 32214  // It returns nil if no more results exist.
 32215  func (srlr SecurityRuleListResult) securityRuleListResultPreparer(ctx context.Context) (*http.Request, error) {
 32216  	if !srlr.hasNextLink() {
 32217  		return nil, nil
 32218  	}
 32219  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 32220  		autorest.AsJSON(),
 32221  		autorest.AsGet(),
 32222  		autorest.WithBaseURL(to.String(srlr.NextLink)))
 32223  }
 32224  
 32225  // SecurityRuleListResultPage contains a page of SecurityRule values.
 32226  type SecurityRuleListResultPage struct {
 32227  	fn   func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)
 32228  	srlr SecurityRuleListResult
 32229  }
 32230  
 32231  // NextWithContext advances to the next page of values.  If there was an error making
 32232  // the request the page does not advance and the error is returned.
 32233  func (page *SecurityRuleListResultPage) NextWithContext(ctx context.Context) (err error) {
 32234  	if tracing.IsEnabled() {
 32235  		ctx = tracing.StartSpan(ctx, fqdn+"/SecurityRuleListResultPage.NextWithContext")
 32236  		defer func() {
 32237  			sc := -1
 32238  			if page.Response().Response.Response != nil {
 32239  				sc = page.Response().Response.Response.StatusCode
 32240  			}
 32241  			tracing.EndSpan(ctx, sc, err)
 32242  		}()
 32243  	}
 32244  	for {
 32245  		next, err := page.fn(ctx, page.srlr)
 32246  		if err != nil {
 32247  			return err
 32248  		}
 32249  		page.srlr = next
 32250  		if !next.hasNextLink() || !next.IsEmpty() {
 32251  			break
 32252  		}
 32253  	}
 32254  	return nil
 32255  }
 32256  
 32257  // Next advances to the next page of values.  If there was an error making
 32258  // the request the page does not advance and the error is returned.
 32259  // Deprecated: Use NextWithContext() instead.
 32260  func (page *SecurityRuleListResultPage) Next() error {
 32261  	return page.NextWithContext(context.Background())
 32262  }
 32263  
 32264  // NotDone returns true if the page enumeration should be started or is not yet complete.
 32265  func (page SecurityRuleListResultPage) NotDone() bool {
 32266  	return !page.srlr.IsEmpty()
 32267  }
 32268  
 32269  // Response returns the raw server response from the last page request.
 32270  func (page SecurityRuleListResultPage) Response() SecurityRuleListResult {
 32271  	return page.srlr
 32272  }
 32273  
 32274  // Values returns the slice of values for the current page or nil if there are no values.
 32275  func (page SecurityRuleListResultPage) Values() []SecurityRule {
 32276  	if page.srlr.IsEmpty() {
 32277  		return nil
 32278  	}
 32279  	return *page.srlr.Value
 32280  }
 32281  
 32282  // Creates a new instance of the SecurityRuleListResultPage type.
 32283  func NewSecurityRuleListResultPage(cur SecurityRuleListResult, getNextPage func(context.Context, SecurityRuleListResult) (SecurityRuleListResult, error)) SecurityRuleListResultPage {
 32284  	return SecurityRuleListResultPage{
 32285  		fn:   getNextPage,
 32286  		srlr: cur,
 32287  	}
 32288  }
 32289  
 32290  // SecurityRulePropertiesFormat security rule resource.
 32291  type SecurityRulePropertiesFormat struct {
 32292  	// Description - A description for this rule. Restricted to 140 chars.
 32293  	Description *string `json:"description,omitempty"`
 32294  	// Protocol - Network protocol this rule applies to. Possible values include: 'SecurityRuleProtocolTCP', 'SecurityRuleProtocolUDP', 'SecurityRuleProtocolIcmp', 'SecurityRuleProtocolEsp', 'SecurityRuleProtocolAsterisk', 'SecurityRuleProtocolAh'
 32295  	Protocol SecurityRuleProtocol `json:"protocol,omitempty"`
 32296  	// SourcePortRange - The source port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
 32297  	SourcePortRange *string `json:"sourcePortRange,omitempty"`
 32298  	// DestinationPortRange - The destination port or range. Integer or range between 0 and 65535. Asterisk '*' can also be used to match all ports.
 32299  	DestinationPortRange *string `json:"destinationPortRange,omitempty"`
 32300  	// SourceAddressPrefix - The CIDR or source IP range. Asterisk '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used. If this is an ingress rule, specifies where network traffic originates from.
 32301  	SourceAddressPrefix *string `json:"sourceAddressPrefix,omitempty"`
 32302  	// SourceAddressPrefixes - The CIDR or source IP ranges.
 32303  	SourceAddressPrefixes *[]string `json:"sourceAddressPrefixes,omitempty"`
 32304  	// SourceApplicationSecurityGroups - The application security group specified as source.
 32305  	SourceApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"sourceApplicationSecurityGroups,omitempty"`
 32306  	// DestinationAddressPrefix - The destination address prefix. CIDR or destination IP range. Asterisk '*' can also be used to match all source IPs. Default tags such as 'VirtualNetwork', 'AzureLoadBalancer' and 'Internet' can also be used.
 32307  	DestinationAddressPrefix *string `json:"destinationAddressPrefix,omitempty"`
 32308  	// DestinationAddressPrefixes - The destination address prefixes. CIDR or destination IP ranges.
 32309  	DestinationAddressPrefixes *[]string `json:"destinationAddressPrefixes,omitempty"`
 32310  	// DestinationApplicationSecurityGroups - The application security group specified as destination.
 32311  	DestinationApplicationSecurityGroups *[]ApplicationSecurityGroup `json:"destinationApplicationSecurityGroups,omitempty"`
 32312  	// SourcePortRanges - The source port ranges.
 32313  	SourcePortRanges *[]string `json:"sourcePortRanges,omitempty"`
 32314  	// DestinationPortRanges - The destination port ranges.
 32315  	DestinationPortRanges *[]string `json:"destinationPortRanges,omitempty"`
 32316  	// Access - The network traffic is allowed or denied. Possible values include: 'SecurityRuleAccessAllow', 'SecurityRuleAccessDeny'
 32317  	Access SecurityRuleAccess `json:"access,omitempty"`
 32318  	// 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.
 32319  	Priority *int32 `json:"priority,omitempty"`
 32320  	// Direction - The direction of the rule. The direction specifies if rule will be evaluated on incoming or outgoing traffic. Possible values include: 'SecurityRuleDirectionInbound', 'SecurityRuleDirectionOutbound'
 32321  	Direction SecurityRuleDirection `json:"direction,omitempty"`
 32322  	// ProvisioningState - READ-ONLY; The provisioning state of the security rule resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 32323  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 32324  }
 32325  
 32326  // MarshalJSON is the custom marshaler for SecurityRulePropertiesFormat.
 32327  func (srpf SecurityRulePropertiesFormat) MarshalJSON() ([]byte, error) {
 32328  	objectMap := make(map[string]interface{})
 32329  	if srpf.Description != nil {
 32330  		objectMap["description"] = srpf.Description
 32331  	}
 32332  	if srpf.Protocol != "" {
 32333  		objectMap["protocol"] = srpf.Protocol
 32334  	}
 32335  	if srpf.SourcePortRange != nil {
 32336  		objectMap["sourcePortRange"] = srpf.SourcePortRange
 32337  	}
 32338  	if srpf.DestinationPortRange != nil {
 32339  		objectMap["destinationPortRange"] = srpf.DestinationPortRange
 32340  	}
 32341  	if srpf.SourceAddressPrefix != nil {
 32342  		objectMap["sourceAddressPrefix"] = srpf.SourceAddressPrefix
 32343  	}
 32344  	if srpf.SourceAddressPrefixes != nil {
 32345  		objectMap["sourceAddressPrefixes"] = srpf.SourceAddressPrefixes
 32346  	}
 32347  	if srpf.SourceApplicationSecurityGroups != nil {
 32348  		objectMap["sourceApplicationSecurityGroups"] = srpf.SourceApplicationSecurityGroups
 32349  	}
 32350  	if srpf.DestinationAddressPrefix != nil {
 32351  		objectMap["destinationAddressPrefix"] = srpf.DestinationAddressPrefix
 32352  	}
 32353  	if srpf.DestinationAddressPrefixes != nil {
 32354  		objectMap["destinationAddressPrefixes"] = srpf.DestinationAddressPrefixes
 32355  	}
 32356  	if srpf.DestinationApplicationSecurityGroups != nil {
 32357  		objectMap["destinationApplicationSecurityGroups"] = srpf.DestinationApplicationSecurityGroups
 32358  	}
 32359  	if srpf.SourcePortRanges != nil {
 32360  		objectMap["sourcePortRanges"] = srpf.SourcePortRanges
 32361  	}
 32362  	if srpf.DestinationPortRanges != nil {
 32363  		objectMap["destinationPortRanges"] = srpf.DestinationPortRanges
 32364  	}
 32365  	if srpf.Access != "" {
 32366  		objectMap["access"] = srpf.Access
 32367  	}
 32368  	if srpf.Priority != nil {
 32369  		objectMap["priority"] = srpf.Priority
 32370  	}
 32371  	if srpf.Direction != "" {
 32372  		objectMap["direction"] = srpf.Direction
 32373  	}
 32374  	return json.Marshal(objectMap)
 32375  }
 32376  
 32377  // SecurityRulesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 32378  // long-running operation.
 32379  type SecurityRulesCreateOrUpdateFuture struct {
 32380  	azure.FutureAPI
 32381  	// Result returns the result of the asynchronous operation.
 32382  	// If the operation has not completed it will return an error.
 32383  	Result func(SecurityRulesClient) (SecurityRule, error)
 32384  }
 32385  
 32386  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 32387  func (future *SecurityRulesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 32388  	var azFuture azure.Future
 32389  	if err := json.Unmarshal(body, &azFuture); err != nil {
 32390  		return err
 32391  	}
 32392  	future.FutureAPI = &azFuture
 32393  	future.Result = future.result
 32394  	return nil
 32395  }
 32396  
 32397  // result is the default implementation for SecurityRulesCreateOrUpdateFuture.Result.
 32398  func (future *SecurityRulesCreateOrUpdateFuture) result(client SecurityRulesClient) (sr SecurityRule, err error) {
 32399  	var done bool
 32400  	done, err = future.DoneWithContext(context.Background(), client)
 32401  	if err != nil {
 32402  		err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 32403  		return
 32404  	}
 32405  	if !done {
 32406  		sr.Response.Response = future.Response()
 32407  		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesCreateOrUpdateFuture")
 32408  		return
 32409  	}
 32410  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 32411  	if sr.Response.Response, err = future.GetResult(sender); err == nil && sr.Response.Response.StatusCode != http.StatusNoContent {
 32412  		sr, err = client.CreateOrUpdateResponder(sr.Response.Response)
 32413  		if err != nil {
 32414  			err = autorest.NewErrorWithError(err, "network.SecurityRulesCreateOrUpdateFuture", "Result", sr.Response.Response, "Failure responding to request")
 32415  		}
 32416  	}
 32417  	return
 32418  }
 32419  
 32420  // SecurityRulesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 32421  // operation.
 32422  type SecurityRulesDeleteFuture struct {
 32423  	azure.FutureAPI
 32424  	// Result returns the result of the asynchronous operation.
 32425  	// If the operation has not completed it will return an error.
 32426  	Result func(SecurityRulesClient) (autorest.Response, error)
 32427  }
 32428  
 32429  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 32430  func (future *SecurityRulesDeleteFuture) UnmarshalJSON(body []byte) error {
 32431  	var azFuture azure.Future
 32432  	if err := json.Unmarshal(body, &azFuture); err != nil {
 32433  		return err
 32434  	}
 32435  	future.FutureAPI = &azFuture
 32436  	future.Result = future.result
 32437  	return nil
 32438  }
 32439  
 32440  // result is the default implementation for SecurityRulesDeleteFuture.Result.
 32441  func (future *SecurityRulesDeleteFuture) result(client SecurityRulesClient) (ar autorest.Response, err error) {
 32442  	var done bool
 32443  	done, err = future.DoneWithContext(context.Background(), client)
 32444  	if err != nil {
 32445  		err = autorest.NewErrorWithError(err, "network.SecurityRulesDeleteFuture", "Result", future.Response(), "Polling failure")
 32446  		return
 32447  	}
 32448  	if !done {
 32449  		ar.Response = future.Response()
 32450  		err = azure.NewAsyncOpIncompleteError("network.SecurityRulesDeleteFuture")
 32451  		return
 32452  	}
 32453  	ar.Response = future.Response()
 32454  	return
 32455  }
 32456  
 32457  // SecurityRulesEvaluationResult network security rules evaluation result.
 32458  type SecurityRulesEvaluationResult struct {
 32459  	// Name - Name of the network security rule.
 32460  	Name *string `json:"name,omitempty"`
 32461  	// ProtocolMatched - Value indicating whether protocol is matched.
 32462  	ProtocolMatched *bool `json:"protocolMatched,omitempty"`
 32463  	// SourceMatched - Value indicating whether source is matched.
 32464  	SourceMatched *bool `json:"sourceMatched,omitempty"`
 32465  	// SourcePortMatched - Value indicating whether source port is matched.
 32466  	SourcePortMatched *bool `json:"sourcePortMatched,omitempty"`
 32467  	// DestinationMatched - Value indicating whether destination is matched.
 32468  	DestinationMatched *bool `json:"destinationMatched,omitempty"`
 32469  	// DestinationPortMatched - Value indicating whether destination port is matched.
 32470  	DestinationPortMatched *bool `json:"destinationPortMatched,omitempty"`
 32471  }
 32472  
 32473  // ServiceAssociationLink serviceAssociationLink resource.
 32474  type ServiceAssociationLink struct {
 32475  	// ServiceAssociationLinkPropertiesFormat - Resource navigation link properties format.
 32476  	*ServiceAssociationLinkPropertiesFormat `json:"properties,omitempty"`
 32477  	// Name - Name of the resource that is unique within a resource group. This name can be used to access the resource.
 32478  	Name *string `json:"name,omitempty"`
 32479  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 32480  	Etag *string `json:"etag,omitempty"`
 32481  	// Type - READ-ONLY; Resource type.
 32482  	Type *string `json:"type,omitempty"`
 32483  	// ID - Resource ID.
 32484  	ID *string `json:"id,omitempty"`
 32485  }
 32486  
 32487  // MarshalJSON is the custom marshaler for ServiceAssociationLink.
 32488  func (sal ServiceAssociationLink) MarshalJSON() ([]byte, error) {
 32489  	objectMap := make(map[string]interface{})
 32490  	if sal.ServiceAssociationLinkPropertiesFormat != nil {
 32491  		objectMap["properties"] = sal.ServiceAssociationLinkPropertiesFormat
 32492  	}
 32493  	if sal.Name != nil {
 32494  		objectMap["name"] = sal.Name
 32495  	}
 32496  	if sal.ID != nil {
 32497  		objectMap["id"] = sal.ID
 32498  	}
 32499  	return json.Marshal(objectMap)
 32500  }
 32501  
 32502  // UnmarshalJSON is the custom unmarshaler for ServiceAssociationLink struct.
 32503  func (sal *ServiceAssociationLink) UnmarshalJSON(body []byte) error {
 32504  	var m map[string]*json.RawMessage
 32505  	err := json.Unmarshal(body, &m)
 32506  	if err != nil {
 32507  		return err
 32508  	}
 32509  	for k, v := range m {
 32510  		switch k {
 32511  		case "properties":
 32512  			if v != nil {
 32513  				var serviceAssociationLinkPropertiesFormat ServiceAssociationLinkPropertiesFormat
 32514  				err = json.Unmarshal(*v, &serviceAssociationLinkPropertiesFormat)
 32515  				if err != nil {
 32516  					return err
 32517  				}
 32518  				sal.ServiceAssociationLinkPropertiesFormat = &serviceAssociationLinkPropertiesFormat
 32519  			}
 32520  		case "name":
 32521  			if v != nil {
 32522  				var name string
 32523  				err = json.Unmarshal(*v, &name)
 32524  				if err != nil {
 32525  					return err
 32526  				}
 32527  				sal.Name = &name
 32528  			}
 32529  		case "etag":
 32530  			if v != nil {
 32531  				var etag string
 32532  				err = json.Unmarshal(*v, &etag)
 32533  				if err != nil {
 32534  					return err
 32535  				}
 32536  				sal.Etag = &etag
 32537  			}
 32538  		case "type":
 32539  			if v != nil {
 32540  				var typeVar string
 32541  				err = json.Unmarshal(*v, &typeVar)
 32542  				if err != nil {
 32543  					return err
 32544  				}
 32545  				sal.Type = &typeVar
 32546  			}
 32547  		case "id":
 32548  			if v != nil {
 32549  				var ID string
 32550  				err = json.Unmarshal(*v, &ID)
 32551  				if err != nil {
 32552  					return err
 32553  				}
 32554  				sal.ID = &ID
 32555  			}
 32556  		}
 32557  	}
 32558  
 32559  	return nil
 32560  }
 32561  
 32562  // ServiceAssociationLinkPropertiesFormat properties of ServiceAssociationLink.
 32563  type ServiceAssociationLinkPropertiesFormat struct {
 32564  	// LinkedResourceType - Resource type of the linked resource.
 32565  	LinkedResourceType *string `json:"linkedResourceType,omitempty"`
 32566  	// Link - Link to the external resource.
 32567  	Link *string `json:"link,omitempty"`
 32568  	// ProvisioningState - READ-ONLY; The provisioning state of the service association link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 32569  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 32570  	// AllowDelete - If true, the resource can be deleted.
 32571  	AllowDelete *bool `json:"allowDelete,omitempty"`
 32572  	// Locations - A list of locations.
 32573  	Locations *[]string `json:"locations,omitempty"`
 32574  }
 32575  
 32576  // MarshalJSON is the custom marshaler for ServiceAssociationLinkPropertiesFormat.
 32577  func (salpf ServiceAssociationLinkPropertiesFormat) MarshalJSON() ([]byte, error) {
 32578  	objectMap := make(map[string]interface{})
 32579  	if salpf.LinkedResourceType != nil {
 32580  		objectMap["linkedResourceType"] = salpf.LinkedResourceType
 32581  	}
 32582  	if salpf.Link != nil {
 32583  		objectMap["link"] = salpf.Link
 32584  	}
 32585  	if salpf.AllowDelete != nil {
 32586  		objectMap["allowDelete"] = salpf.AllowDelete
 32587  	}
 32588  	if salpf.Locations != nil {
 32589  		objectMap["locations"] = salpf.Locations
 32590  	}
 32591  	return json.Marshal(objectMap)
 32592  }
 32593  
 32594  // ServiceAssociationLinksListResult response for ServiceAssociationLinks_List operation.
 32595  type ServiceAssociationLinksListResult struct {
 32596  	autorest.Response `json:"-"`
 32597  	// Value - The service association links in a subnet.
 32598  	Value *[]ServiceAssociationLink `json:"value,omitempty"`
 32599  	// NextLink - READ-ONLY; The URL to get the next set of results.
 32600  	NextLink *string `json:"nextLink,omitempty"`
 32601  }
 32602  
 32603  // MarshalJSON is the custom marshaler for ServiceAssociationLinksListResult.
 32604  func (sallr ServiceAssociationLinksListResult) MarshalJSON() ([]byte, error) {
 32605  	objectMap := make(map[string]interface{})
 32606  	if sallr.Value != nil {
 32607  		objectMap["value"] = sallr.Value
 32608  	}
 32609  	return json.Marshal(objectMap)
 32610  }
 32611  
 32612  // ServiceDelegationPropertiesFormat properties of a service delegation.
 32613  type ServiceDelegationPropertiesFormat struct {
 32614  	// ServiceName - The name of the service to whom the subnet should be delegated (e.g. Microsoft.Sql/servers).
 32615  	ServiceName *string `json:"serviceName,omitempty"`
 32616  	// Actions - READ-ONLY; The actions permitted to the service upon delegation.
 32617  	Actions *[]string `json:"actions,omitempty"`
 32618  	// ProvisioningState - READ-ONLY; The provisioning state of the service delegation resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 32619  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 32620  }
 32621  
 32622  // MarshalJSON is the custom marshaler for ServiceDelegationPropertiesFormat.
 32623  func (sdpf ServiceDelegationPropertiesFormat) MarshalJSON() ([]byte, error) {
 32624  	objectMap := make(map[string]interface{})
 32625  	if sdpf.ServiceName != nil {
 32626  		objectMap["serviceName"] = sdpf.ServiceName
 32627  	}
 32628  	return json.Marshal(objectMap)
 32629  }
 32630  
 32631  // ServiceEndpointPoliciesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
 32632  // a long-running operation.
 32633  type ServiceEndpointPoliciesCreateOrUpdateFuture struct {
 32634  	azure.FutureAPI
 32635  	// Result returns the result of the asynchronous operation.
 32636  	// If the operation has not completed it will return an error.
 32637  	Result func(ServiceEndpointPoliciesClient) (ServiceEndpointPolicy, error)
 32638  }
 32639  
 32640  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 32641  func (future *ServiceEndpointPoliciesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 32642  	var azFuture azure.Future
 32643  	if err := json.Unmarshal(body, &azFuture); err != nil {
 32644  		return err
 32645  	}
 32646  	future.FutureAPI = &azFuture
 32647  	future.Result = future.result
 32648  	return nil
 32649  }
 32650  
 32651  // result is the default implementation for ServiceEndpointPoliciesCreateOrUpdateFuture.Result.
 32652  func (future *ServiceEndpointPoliciesCreateOrUpdateFuture) result(client ServiceEndpointPoliciesClient) (sep ServiceEndpointPolicy, err error) {
 32653  	var done bool
 32654  	done, err = future.DoneWithContext(context.Background(), client)
 32655  	if err != nil {
 32656  		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 32657  		return
 32658  	}
 32659  	if !done {
 32660  		sep.Response.Response = future.Response()
 32661  		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesCreateOrUpdateFuture")
 32662  		return
 32663  	}
 32664  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 32665  	if sep.Response.Response, err = future.GetResult(sender); err == nil && sep.Response.Response.StatusCode != http.StatusNoContent {
 32666  		sep, err = client.CreateOrUpdateResponder(sep.Response.Response)
 32667  		if err != nil {
 32668  			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesCreateOrUpdateFuture", "Result", sep.Response.Response, "Failure responding to request")
 32669  		}
 32670  	}
 32671  	return
 32672  }
 32673  
 32674  // ServiceEndpointPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
 32675  // long-running operation.
 32676  type ServiceEndpointPoliciesDeleteFuture struct {
 32677  	azure.FutureAPI
 32678  	// Result returns the result of the asynchronous operation.
 32679  	// If the operation has not completed it will return an error.
 32680  	Result func(ServiceEndpointPoliciesClient) (autorest.Response, error)
 32681  }
 32682  
 32683  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 32684  func (future *ServiceEndpointPoliciesDeleteFuture) UnmarshalJSON(body []byte) error {
 32685  	var azFuture azure.Future
 32686  	if err := json.Unmarshal(body, &azFuture); err != nil {
 32687  		return err
 32688  	}
 32689  	future.FutureAPI = &azFuture
 32690  	future.Result = future.result
 32691  	return nil
 32692  }
 32693  
 32694  // result is the default implementation for ServiceEndpointPoliciesDeleteFuture.Result.
 32695  func (future *ServiceEndpointPoliciesDeleteFuture) result(client ServiceEndpointPoliciesClient) (ar autorest.Response, err error) {
 32696  	var done bool
 32697  	done, err = future.DoneWithContext(context.Background(), client)
 32698  	if err != nil {
 32699  		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
 32700  		return
 32701  	}
 32702  	if !done {
 32703  		ar.Response = future.Response()
 32704  		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPoliciesDeleteFuture")
 32705  		return
 32706  	}
 32707  	ar.Response = future.Response()
 32708  	return
 32709  }
 32710  
 32711  // ServiceEndpointPolicy service End point policy resource.
 32712  type ServiceEndpointPolicy struct {
 32713  	autorest.Response `json:"-"`
 32714  	// ServiceEndpointPolicyPropertiesFormat - Properties of the service end point policy.
 32715  	*ServiceEndpointPolicyPropertiesFormat `json:"properties,omitempty"`
 32716  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 32717  	Etag *string `json:"etag,omitempty"`
 32718  	// ID - Resource ID.
 32719  	ID *string `json:"id,omitempty"`
 32720  	// Name - READ-ONLY; Resource name.
 32721  	Name *string `json:"name,omitempty"`
 32722  	// Type - READ-ONLY; Resource type.
 32723  	Type *string `json:"type,omitempty"`
 32724  	// Location - Resource location.
 32725  	Location *string `json:"location,omitempty"`
 32726  	// Tags - Resource tags.
 32727  	Tags map[string]*string `json:"tags"`
 32728  }
 32729  
 32730  // MarshalJSON is the custom marshaler for ServiceEndpointPolicy.
 32731  func (sep ServiceEndpointPolicy) MarshalJSON() ([]byte, error) {
 32732  	objectMap := make(map[string]interface{})
 32733  	if sep.ServiceEndpointPolicyPropertiesFormat != nil {
 32734  		objectMap["properties"] = sep.ServiceEndpointPolicyPropertiesFormat
 32735  	}
 32736  	if sep.ID != nil {
 32737  		objectMap["id"] = sep.ID
 32738  	}
 32739  	if sep.Location != nil {
 32740  		objectMap["location"] = sep.Location
 32741  	}
 32742  	if sep.Tags != nil {
 32743  		objectMap["tags"] = sep.Tags
 32744  	}
 32745  	return json.Marshal(objectMap)
 32746  }
 32747  
 32748  // UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicy struct.
 32749  func (sep *ServiceEndpointPolicy) UnmarshalJSON(body []byte) error {
 32750  	var m map[string]*json.RawMessage
 32751  	err := json.Unmarshal(body, &m)
 32752  	if err != nil {
 32753  		return err
 32754  	}
 32755  	for k, v := range m {
 32756  		switch k {
 32757  		case "properties":
 32758  			if v != nil {
 32759  				var serviceEndpointPolicyPropertiesFormat ServiceEndpointPolicyPropertiesFormat
 32760  				err = json.Unmarshal(*v, &serviceEndpointPolicyPropertiesFormat)
 32761  				if err != nil {
 32762  					return err
 32763  				}
 32764  				sep.ServiceEndpointPolicyPropertiesFormat = &serviceEndpointPolicyPropertiesFormat
 32765  			}
 32766  		case "etag":
 32767  			if v != nil {
 32768  				var etag string
 32769  				err = json.Unmarshal(*v, &etag)
 32770  				if err != nil {
 32771  					return err
 32772  				}
 32773  				sep.Etag = &etag
 32774  			}
 32775  		case "id":
 32776  			if v != nil {
 32777  				var ID string
 32778  				err = json.Unmarshal(*v, &ID)
 32779  				if err != nil {
 32780  					return err
 32781  				}
 32782  				sep.ID = &ID
 32783  			}
 32784  		case "name":
 32785  			if v != nil {
 32786  				var name string
 32787  				err = json.Unmarshal(*v, &name)
 32788  				if err != nil {
 32789  					return err
 32790  				}
 32791  				sep.Name = &name
 32792  			}
 32793  		case "type":
 32794  			if v != nil {
 32795  				var typeVar string
 32796  				err = json.Unmarshal(*v, &typeVar)
 32797  				if err != nil {
 32798  					return err
 32799  				}
 32800  				sep.Type = &typeVar
 32801  			}
 32802  		case "location":
 32803  			if v != nil {
 32804  				var location string
 32805  				err = json.Unmarshal(*v, &location)
 32806  				if err != nil {
 32807  					return err
 32808  				}
 32809  				sep.Location = &location
 32810  			}
 32811  		case "tags":
 32812  			if v != nil {
 32813  				var tags map[string]*string
 32814  				err = json.Unmarshal(*v, &tags)
 32815  				if err != nil {
 32816  					return err
 32817  				}
 32818  				sep.Tags = tags
 32819  			}
 32820  		}
 32821  	}
 32822  
 32823  	return nil
 32824  }
 32825  
 32826  // ServiceEndpointPolicyDefinition service Endpoint policy definitions.
 32827  type ServiceEndpointPolicyDefinition struct {
 32828  	autorest.Response `json:"-"`
 32829  	// ServiceEndpointPolicyDefinitionPropertiesFormat - Properties of the service endpoint policy definition.
 32830  	*ServiceEndpointPolicyDefinitionPropertiesFormat `json:"properties,omitempty"`
 32831  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 32832  	Name *string `json:"name,omitempty"`
 32833  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 32834  	Etag *string `json:"etag,omitempty"`
 32835  	// ID - Resource ID.
 32836  	ID *string `json:"id,omitempty"`
 32837  }
 32838  
 32839  // MarshalJSON is the custom marshaler for ServiceEndpointPolicyDefinition.
 32840  func (sepd ServiceEndpointPolicyDefinition) MarshalJSON() ([]byte, error) {
 32841  	objectMap := make(map[string]interface{})
 32842  	if sepd.ServiceEndpointPolicyDefinitionPropertiesFormat != nil {
 32843  		objectMap["properties"] = sepd.ServiceEndpointPolicyDefinitionPropertiesFormat
 32844  	}
 32845  	if sepd.Name != nil {
 32846  		objectMap["name"] = sepd.Name
 32847  	}
 32848  	if sepd.ID != nil {
 32849  		objectMap["id"] = sepd.ID
 32850  	}
 32851  	return json.Marshal(objectMap)
 32852  }
 32853  
 32854  // UnmarshalJSON is the custom unmarshaler for ServiceEndpointPolicyDefinition struct.
 32855  func (sepd *ServiceEndpointPolicyDefinition) UnmarshalJSON(body []byte) error {
 32856  	var m map[string]*json.RawMessage
 32857  	err := json.Unmarshal(body, &m)
 32858  	if err != nil {
 32859  		return err
 32860  	}
 32861  	for k, v := range m {
 32862  		switch k {
 32863  		case "properties":
 32864  			if v != nil {
 32865  				var serviceEndpointPolicyDefinitionPropertiesFormat ServiceEndpointPolicyDefinitionPropertiesFormat
 32866  				err = json.Unmarshal(*v, &serviceEndpointPolicyDefinitionPropertiesFormat)
 32867  				if err != nil {
 32868  					return err
 32869  				}
 32870  				sepd.ServiceEndpointPolicyDefinitionPropertiesFormat = &serviceEndpointPolicyDefinitionPropertiesFormat
 32871  			}
 32872  		case "name":
 32873  			if v != nil {
 32874  				var name string
 32875  				err = json.Unmarshal(*v, &name)
 32876  				if err != nil {
 32877  					return err
 32878  				}
 32879  				sepd.Name = &name
 32880  			}
 32881  		case "etag":
 32882  			if v != nil {
 32883  				var etag string
 32884  				err = json.Unmarshal(*v, &etag)
 32885  				if err != nil {
 32886  					return err
 32887  				}
 32888  				sepd.Etag = &etag
 32889  			}
 32890  		case "id":
 32891  			if v != nil {
 32892  				var ID string
 32893  				err = json.Unmarshal(*v, &ID)
 32894  				if err != nil {
 32895  					return err
 32896  				}
 32897  				sepd.ID = &ID
 32898  			}
 32899  		}
 32900  	}
 32901  
 32902  	return nil
 32903  }
 32904  
 32905  // ServiceEndpointPolicyDefinitionListResult response for ListServiceEndpointPolicyDefinition API service
 32906  // call. Retrieves all service endpoint policy definition that belongs to a service endpoint policy.
 32907  type ServiceEndpointPolicyDefinitionListResult struct {
 32908  	autorest.Response `json:"-"`
 32909  	// Value - The service endpoint policy definition in a service endpoint policy.
 32910  	Value *[]ServiceEndpointPolicyDefinition `json:"value,omitempty"`
 32911  	// NextLink - The URL to get the next set of results.
 32912  	NextLink *string `json:"nextLink,omitempty"`
 32913  }
 32914  
 32915  // ServiceEndpointPolicyDefinitionListResultIterator provides access to a complete listing of
 32916  // ServiceEndpointPolicyDefinition values.
 32917  type ServiceEndpointPolicyDefinitionListResultIterator struct {
 32918  	i    int
 32919  	page ServiceEndpointPolicyDefinitionListResultPage
 32920  }
 32921  
 32922  // NextWithContext advances to the next value.  If there was an error making
 32923  // the request the iterator does not advance and the error is returned.
 32924  func (iter *ServiceEndpointPolicyDefinitionListResultIterator) NextWithContext(ctx context.Context) (err error) {
 32925  	if tracing.IsEnabled() {
 32926  		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultIterator.NextWithContext")
 32927  		defer func() {
 32928  			sc := -1
 32929  			if iter.Response().Response.Response != nil {
 32930  				sc = iter.Response().Response.Response.StatusCode
 32931  			}
 32932  			tracing.EndSpan(ctx, sc, err)
 32933  		}()
 32934  	}
 32935  	iter.i++
 32936  	if iter.i < len(iter.page.Values()) {
 32937  		return nil
 32938  	}
 32939  	err = iter.page.NextWithContext(ctx)
 32940  	if err != nil {
 32941  		iter.i--
 32942  		return err
 32943  	}
 32944  	iter.i = 0
 32945  	return nil
 32946  }
 32947  
 32948  // Next advances to the next value.  If there was an error making
 32949  // the request the iterator does not advance and the error is returned.
 32950  // Deprecated: Use NextWithContext() instead.
 32951  func (iter *ServiceEndpointPolicyDefinitionListResultIterator) Next() error {
 32952  	return iter.NextWithContext(context.Background())
 32953  }
 32954  
 32955  // NotDone returns true if the enumeration should be started or is not yet complete.
 32956  func (iter ServiceEndpointPolicyDefinitionListResultIterator) NotDone() bool {
 32957  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 32958  }
 32959  
 32960  // Response returns the raw server response from the last page request.
 32961  func (iter ServiceEndpointPolicyDefinitionListResultIterator) Response() ServiceEndpointPolicyDefinitionListResult {
 32962  	return iter.page.Response()
 32963  }
 32964  
 32965  // Value returns the current value or a zero-initialized value if the
 32966  // iterator has advanced beyond the end of the collection.
 32967  func (iter ServiceEndpointPolicyDefinitionListResultIterator) Value() ServiceEndpointPolicyDefinition {
 32968  	if !iter.page.NotDone() {
 32969  		return ServiceEndpointPolicyDefinition{}
 32970  	}
 32971  	return iter.page.Values()[iter.i]
 32972  }
 32973  
 32974  // Creates a new instance of the ServiceEndpointPolicyDefinitionListResultIterator type.
 32975  func NewServiceEndpointPolicyDefinitionListResultIterator(page ServiceEndpointPolicyDefinitionListResultPage) ServiceEndpointPolicyDefinitionListResultIterator {
 32976  	return ServiceEndpointPolicyDefinitionListResultIterator{page: page}
 32977  }
 32978  
 32979  // IsEmpty returns true if the ListResult contains no values.
 32980  func (sepdlr ServiceEndpointPolicyDefinitionListResult) IsEmpty() bool {
 32981  	return sepdlr.Value == nil || len(*sepdlr.Value) == 0
 32982  }
 32983  
 32984  // hasNextLink returns true if the NextLink is not empty.
 32985  func (sepdlr ServiceEndpointPolicyDefinitionListResult) hasNextLink() bool {
 32986  	return sepdlr.NextLink != nil && len(*sepdlr.NextLink) != 0
 32987  }
 32988  
 32989  // serviceEndpointPolicyDefinitionListResultPreparer prepares a request to retrieve the next set of results.
 32990  // It returns nil if no more results exist.
 32991  func (sepdlr ServiceEndpointPolicyDefinitionListResult) serviceEndpointPolicyDefinitionListResultPreparer(ctx context.Context) (*http.Request, error) {
 32992  	if !sepdlr.hasNextLink() {
 32993  		return nil, nil
 32994  	}
 32995  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 32996  		autorest.AsJSON(),
 32997  		autorest.AsGet(),
 32998  		autorest.WithBaseURL(to.String(sepdlr.NextLink)))
 32999  }
 33000  
 33001  // ServiceEndpointPolicyDefinitionListResultPage contains a page of ServiceEndpointPolicyDefinition values.
 33002  type ServiceEndpointPolicyDefinitionListResultPage struct {
 33003  	fn     func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)
 33004  	sepdlr ServiceEndpointPolicyDefinitionListResult
 33005  }
 33006  
 33007  // NextWithContext advances to the next page of values.  If there was an error making
 33008  // the request the page does not advance and the error is returned.
 33009  func (page *ServiceEndpointPolicyDefinitionListResultPage) NextWithContext(ctx context.Context) (err error) {
 33010  	if tracing.IsEnabled() {
 33011  		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyDefinitionListResultPage.NextWithContext")
 33012  		defer func() {
 33013  			sc := -1
 33014  			if page.Response().Response.Response != nil {
 33015  				sc = page.Response().Response.Response.StatusCode
 33016  			}
 33017  			tracing.EndSpan(ctx, sc, err)
 33018  		}()
 33019  	}
 33020  	for {
 33021  		next, err := page.fn(ctx, page.sepdlr)
 33022  		if err != nil {
 33023  			return err
 33024  		}
 33025  		page.sepdlr = next
 33026  		if !next.hasNextLink() || !next.IsEmpty() {
 33027  			break
 33028  		}
 33029  	}
 33030  	return nil
 33031  }
 33032  
 33033  // Next advances to the next page of values.  If there was an error making
 33034  // the request the page does not advance and the error is returned.
 33035  // Deprecated: Use NextWithContext() instead.
 33036  func (page *ServiceEndpointPolicyDefinitionListResultPage) Next() error {
 33037  	return page.NextWithContext(context.Background())
 33038  }
 33039  
 33040  // NotDone returns true if the page enumeration should be started or is not yet complete.
 33041  func (page ServiceEndpointPolicyDefinitionListResultPage) NotDone() bool {
 33042  	return !page.sepdlr.IsEmpty()
 33043  }
 33044  
 33045  // Response returns the raw server response from the last page request.
 33046  func (page ServiceEndpointPolicyDefinitionListResultPage) Response() ServiceEndpointPolicyDefinitionListResult {
 33047  	return page.sepdlr
 33048  }
 33049  
 33050  // Values returns the slice of values for the current page or nil if there are no values.
 33051  func (page ServiceEndpointPolicyDefinitionListResultPage) Values() []ServiceEndpointPolicyDefinition {
 33052  	if page.sepdlr.IsEmpty() {
 33053  		return nil
 33054  	}
 33055  	return *page.sepdlr.Value
 33056  }
 33057  
 33058  // Creates a new instance of the ServiceEndpointPolicyDefinitionListResultPage type.
 33059  func NewServiceEndpointPolicyDefinitionListResultPage(cur ServiceEndpointPolicyDefinitionListResult, getNextPage func(context.Context, ServiceEndpointPolicyDefinitionListResult) (ServiceEndpointPolicyDefinitionListResult, error)) ServiceEndpointPolicyDefinitionListResultPage {
 33060  	return ServiceEndpointPolicyDefinitionListResultPage{
 33061  		fn:     getNextPage,
 33062  		sepdlr: cur,
 33063  	}
 33064  }
 33065  
 33066  // ServiceEndpointPolicyDefinitionPropertiesFormat service Endpoint policy definition resource.
 33067  type ServiceEndpointPolicyDefinitionPropertiesFormat struct {
 33068  	// Description - A description for this rule. Restricted to 140 chars.
 33069  	Description *string `json:"description,omitempty"`
 33070  	// Service - Service endpoint name.
 33071  	Service *string `json:"service,omitempty"`
 33072  	// ServiceResources - A list of service resources.
 33073  	ServiceResources *[]string `json:"serviceResources,omitempty"`
 33074  	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy definition resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 33075  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 33076  }
 33077  
 33078  // MarshalJSON is the custom marshaler for ServiceEndpointPolicyDefinitionPropertiesFormat.
 33079  func (sepdpf ServiceEndpointPolicyDefinitionPropertiesFormat) MarshalJSON() ([]byte, error) {
 33080  	objectMap := make(map[string]interface{})
 33081  	if sepdpf.Description != nil {
 33082  		objectMap["description"] = sepdpf.Description
 33083  	}
 33084  	if sepdpf.Service != nil {
 33085  		objectMap["service"] = sepdpf.Service
 33086  	}
 33087  	if sepdpf.ServiceResources != nil {
 33088  		objectMap["serviceResources"] = sepdpf.ServiceResources
 33089  	}
 33090  	return json.Marshal(objectMap)
 33091  }
 33092  
 33093  // ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
 33094  // results of a long-running operation.
 33095  type ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture struct {
 33096  	azure.FutureAPI
 33097  	// Result returns the result of the asynchronous operation.
 33098  	// If the operation has not completed it will return an error.
 33099  	Result func(ServiceEndpointPolicyDefinitionsClient) (ServiceEndpointPolicyDefinition, error)
 33100  }
 33101  
 33102  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 33103  func (future *ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 33104  	var azFuture azure.Future
 33105  	if err := json.Unmarshal(body, &azFuture); err != nil {
 33106  		return err
 33107  	}
 33108  	future.FutureAPI = &azFuture
 33109  	future.Result = future.result
 33110  	return nil
 33111  }
 33112  
 33113  // result is the default implementation for ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture.Result.
 33114  func (future *ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture) result(client ServiceEndpointPolicyDefinitionsClient) (sepd ServiceEndpointPolicyDefinition, err error) {
 33115  	var done bool
 33116  	done, err = future.DoneWithContext(context.Background(), client)
 33117  	if err != nil {
 33118  		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 33119  		return
 33120  	}
 33121  	if !done {
 33122  		sepd.Response.Response = future.Response()
 33123  		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture")
 33124  		return
 33125  	}
 33126  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 33127  	if sepd.Response.Response, err = future.GetResult(sender); err == nil && sepd.Response.Response.StatusCode != http.StatusNoContent {
 33128  		sepd, err = client.CreateOrUpdateResponder(sepd.Response.Response)
 33129  		if err != nil {
 33130  			err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsCreateOrUpdateFuture", "Result", sepd.Response.Response, "Failure responding to request")
 33131  		}
 33132  	}
 33133  	return
 33134  }
 33135  
 33136  // ServiceEndpointPolicyDefinitionsDeleteFuture an abstraction for monitoring and retrieving the results of
 33137  // a long-running operation.
 33138  type ServiceEndpointPolicyDefinitionsDeleteFuture struct {
 33139  	azure.FutureAPI
 33140  	// Result returns the result of the asynchronous operation.
 33141  	// If the operation has not completed it will return an error.
 33142  	Result func(ServiceEndpointPolicyDefinitionsClient) (autorest.Response, error)
 33143  }
 33144  
 33145  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 33146  func (future *ServiceEndpointPolicyDefinitionsDeleteFuture) UnmarshalJSON(body []byte) error {
 33147  	var azFuture azure.Future
 33148  	if err := json.Unmarshal(body, &azFuture); err != nil {
 33149  		return err
 33150  	}
 33151  	future.FutureAPI = &azFuture
 33152  	future.Result = future.result
 33153  	return nil
 33154  }
 33155  
 33156  // result is the default implementation for ServiceEndpointPolicyDefinitionsDeleteFuture.Result.
 33157  func (future *ServiceEndpointPolicyDefinitionsDeleteFuture) result(client ServiceEndpointPolicyDefinitionsClient) (ar autorest.Response, err error) {
 33158  	var done bool
 33159  	done, err = future.DoneWithContext(context.Background(), client)
 33160  	if err != nil {
 33161  		err = autorest.NewErrorWithError(err, "network.ServiceEndpointPolicyDefinitionsDeleteFuture", "Result", future.Response(), "Polling failure")
 33162  		return
 33163  	}
 33164  	if !done {
 33165  		ar.Response = future.Response()
 33166  		err = azure.NewAsyncOpIncompleteError("network.ServiceEndpointPolicyDefinitionsDeleteFuture")
 33167  		return
 33168  	}
 33169  	ar.Response = future.Response()
 33170  	return
 33171  }
 33172  
 33173  // ServiceEndpointPolicyListResult response for ListServiceEndpointPolicies API service call.
 33174  type ServiceEndpointPolicyListResult struct {
 33175  	autorest.Response `json:"-"`
 33176  	// Value - A list of ServiceEndpointPolicy resources.
 33177  	Value *[]ServiceEndpointPolicy `json:"value,omitempty"`
 33178  	// NextLink - READ-ONLY; The URL to get the next set of results.
 33179  	NextLink *string `json:"nextLink,omitempty"`
 33180  }
 33181  
 33182  // MarshalJSON is the custom marshaler for ServiceEndpointPolicyListResult.
 33183  func (seplr ServiceEndpointPolicyListResult) MarshalJSON() ([]byte, error) {
 33184  	objectMap := make(map[string]interface{})
 33185  	if seplr.Value != nil {
 33186  		objectMap["value"] = seplr.Value
 33187  	}
 33188  	return json.Marshal(objectMap)
 33189  }
 33190  
 33191  // ServiceEndpointPolicyListResultIterator provides access to a complete listing of ServiceEndpointPolicy
 33192  // values.
 33193  type ServiceEndpointPolicyListResultIterator struct {
 33194  	i    int
 33195  	page ServiceEndpointPolicyListResultPage
 33196  }
 33197  
 33198  // NextWithContext advances to the next value.  If there was an error making
 33199  // the request the iterator does not advance and the error is returned.
 33200  func (iter *ServiceEndpointPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
 33201  	if tracing.IsEnabled() {
 33202  		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultIterator.NextWithContext")
 33203  		defer func() {
 33204  			sc := -1
 33205  			if iter.Response().Response.Response != nil {
 33206  				sc = iter.Response().Response.Response.StatusCode
 33207  			}
 33208  			tracing.EndSpan(ctx, sc, err)
 33209  		}()
 33210  	}
 33211  	iter.i++
 33212  	if iter.i < len(iter.page.Values()) {
 33213  		return nil
 33214  	}
 33215  	err = iter.page.NextWithContext(ctx)
 33216  	if err != nil {
 33217  		iter.i--
 33218  		return err
 33219  	}
 33220  	iter.i = 0
 33221  	return nil
 33222  }
 33223  
 33224  // Next advances to the next value.  If there was an error making
 33225  // the request the iterator does not advance and the error is returned.
 33226  // Deprecated: Use NextWithContext() instead.
 33227  func (iter *ServiceEndpointPolicyListResultIterator) Next() error {
 33228  	return iter.NextWithContext(context.Background())
 33229  }
 33230  
 33231  // NotDone returns true if the enumeration should be started or is not yet complete.
 33232  func (iter ServiceEndpointPolicyListResultIterator) NotDone() bool {
 33233  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 33234  }
 33235  
 33236  // Response returns the raw server response from the last page request.
 33237  func (iter ServiceEndpointPolicyListResultIterator) Response() ServiceEndpointPolicyListResult {
 33238  	return iter.page.Response()
 33239  }
 33240  
 33241  // Value returns the current value or a zero-initialized value if the
 33242  // iterator has advanced beyond the end of the collection.
 33243  func (iter ServiceEndpointPolicyListResultIterator) Value() ServiceEndpointPolicy {
 33244  	if !iter.page.NotDone() {
 33245  		return ServiceEndpointPolicy{}
 33246  	}
 33247  	return iter.page.Values()[iter.i]
 33248  }
 33249  
 33250  // Creates a new instance of the ServiceEndpointPolicyListResultIterator type.
 33251  func NewServiceEndpointPolicyListResultIterator(page ServiceEndpointPolicyListResultPage) ServiceEndpointPolicyListResultIterator {
 33252  	return ServiceEndpointPolicyListResultIterator{page: page}
 33253  }
 33254  
 33255  // IsEmpty returns true if the ListResult contains no values.
 33256  func (seplr ServiceEndpointPolicyListResult) IsEmpty() bool {
 33257  	return seplr.Value == nil || len(*seplr.Value) == 0
 33258  }
 33259  
 33260  // hasNextLink returns true if the NextLink is not empty.
 33261  func (seplr ServiceEndpointPolicyListResult) hasNextLink() bool {
 33262  	return seplr.NextLink != nil && len(*seplr.NextLink) != 0
 33263  }
 33264  
 33265  // serviceEndpointPolicyListResultPreparer prepares a request to retrieve the next set of results.
 33266  // It returns nil if no more results exist.
 33267  func (seplr ServiceEndpointPolicyListResult) serviceEndpointPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
 33268  	if !seplr.hasNextLink() {
 33269  		return nil, nil
 33270  	}
 33271  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 33272  		autorest.AsJSON(),
 33273  		autorest.AsGet(),
 33274  		autorest.WithBaseURL(to.String(seplr.NextLink)))
 33275  }
 33276  
 33277  // ServiceEndpointPolicyListResultPage contains a page of ServiceEndpointPolicy values.
 33278  type ServiceEndpointPolicyListResultPage struct {
 33279  	fn    func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)
 33280  	seplr ServiceEndpointPolicyListResult
 33281  }
 33282  
 33283  // NextWithContext advances to the next page of values.  If there was an error making
 33284  // the request the page does not advance and the error is returned.
 33285  func (page *ServiceEndpointPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
 33286  	if tracing.IsEnabled() {
 33287  		ctx = tracing.StartSpan(ctx, fqdn+"/ServiceEndpointPolicyListResultPage.NextWithContext")
 33288  		defer func() {
 33289  			sc := -1
 33290  			if page.Response().Response.Response != nil {
 33291  				sc = page.Response().Response.Response.StatusCode
 33292  			}
 33293  			tracing.EndSpan(ctx, sc, err)
 33294  		}()
 33295  	}
 33296  	for {
 33297  		next, err := page.fn(ctx, page.seplr)
 33298  		if err != nil {
 33299  			return err
 33300  		}
 33301  		page.seplr = next
 33302  		if !next.hasNextLink() || !next.IsEmpty() {
 33303  			break
 33304  		}
 33305  	}
 33306  	return nil
 33307  }
 33308  
 33309  // Next advances to the next page of values.  If there was an error making
 33310  // the request the page does not advance and the error is returned.
 33311  // Deprecated: Use NextWithContext() instead.
 33312  func (page *ServiceEndpointPolicyListResultPage) Next() error {
 33313  	return page.NextWithContext(context.Background())
 33314  }
 33315  
 33316  // NotDone returns true if the page enumeration should be started or is not yet complete.
 33317  func (page ServiceEndpointPolicyListResultPage) NotDone() bool {
 33318  	return !page.seplr.IsEmpty()
 33319  }
 33320  
 33321  // Response returns the raw server response from the last page request.
 33322  func (page ServiceEndpointPolicyListResultPage) Response() ServiceEndpointPolicyListResult {
 33323  	return page.seplr
 33324  }
 33325  
 33326  // Values returns the slice of values for the current page or nil if there are no values.
 33327  func (page ServiceEndpointPolicyListResultPage) Values() []ServiceEndpointPolicy {
 33328  	if page.seplr.IsEmpty() {
 33329  		return nil
 33330  	}
 33331  	return *page.seplr.Value
 33332  }
 33333  
 33334  // Creates a new instance of the ServiceEndpointPolicyListResultPage type.
 33335  func NewServiceEndpointPolicyListResultPage(cur ServiceEndpointPolicyListResult, getNextPage func(context.Context, ServiceEndpointPolicyListResult) (ServiceEndpointPolicyListResult, error)) ServiceEndpointPolicyListResultPage {
 33336  	return ServiceEndpointPolicyListResultPage{
 33337  		fn:    getNextPage,
 33338  		seplr: cur,
 33339  	}
 33340  }
 33341  
 33342  // ServiceEndpointPolicyPropertiesFormat service Endpoint Policy resource.
 33343  type ServiceEndpointPolicyPropertiesFormat struct {
 33344  	// ServiceEndpointPolicyDefinitions - A collection of service endpoint policy definitions of the service endpoint policy.
 33345  	ServiceEndpointPolicyDefinitions *[]ServiceEndpointPolicyDefinition `json:"serviceEndpointPolicyDefinitions,omitempty"`
 33346  	// Subnets - READ-ONLY; A collection of references to subnets.
 33347  	Subnets *[]Subnet `json:"subnets,omitempty"`
 33348  	// ResourceGUID - READ-ONLY; The resource GUID property of the service endpoint policy resource.
 33349  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 33350  	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 33351  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 33352  }
 33353  
 33354  // MarshalJSON is the custom marshaler for ServiceEndpointPolicyPropertiesFormat.
 33355  func (seppf ServiceEndpointPolicyPropertiesFormat) MarshalJSON() ([]byte, error) {
 33356  	objectMap := make(map[string]interface{})
 33357  	if seppf.ServiceEndpointPolicyDefinitions != nil {
 33358  		objectMap["serviceEndpointPolicyDefinitions"] = seppf.ServiceEndpointPolicyDefinitions
 33359  	}
 33360  	return json.Marshal(objectMap)
 33361  }
 33362  
 33363  // ServiceEndpointPropertiesFormat the service endpoint properties.
 33364  type ServiceEndpointPropertiesFormat struct {
 33365  	// Service - The type of the endpoint service.
 33366  	Service *string `json:"service,omitempty"`
 33367  	// Locations - A list of locations.
 33368  	Locations *[]string `json:"locations,omitempty"`
 33369  	// ProvisioningState - READ-ONLY; The provisioning state of the service endpoint resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 33370  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 33371  }
 33372  
 33373  // MarshalJSON is the custom marshaler for ServiceEndpointPropertiesFormat.
 33374  func (sepf ServiceEndpointPropertiesFormat) MarshalJSON() ([]byte, error) {
 33375  	objectMap := make(map[string]interface{})
 33376  	if sepf.Service != nil {
 33377  		objectMap["service"] = sepf.Service
 33378  	}
 33379  	if sepf.Locations != nil {
 33380  		objectMap["locations"] = sepf.Locations
 33381  	}
 33382  	return json.Marshal(objectMap)
 33383  }
 33384  
 33385  // ServiceTagInformation the service tag information.
 33386  type ServiceTagInformation struct {
 33387  	// Properties - READ-ONLY; Properties of the service tag information.
 33388  	Properties *ServiceTagInformationPropertiesFormat `json:"properties,omitempty"`
 33389  	// Name - READ-ONLY; The name of service tag.
 33390  	Name *string `json:"name,omitempty"`
 33391  	// ID - READ-ONLY; The ID of service tag.
 33392  	ID *string `json:"id,omitempty"`
 33393  }
 33394  
 33395  // MarshalJSON is the custom marshaler for ServiceTagInformation.
 33396  func (sti ServiceTagInformation) MarshalJSON() ([]byte, error) {
 33397  	objectMap := make(map[string]interface{})
 33398  	return json.Marshal(objectMap)
 33399  }
 33400  
 33401  // ServiceTagInformationPropertiesFormat properties of the service tag information.
 33402  type ServiceTagInformationPropertiesFormat struct {
 33403  	// ChangeNumber - READ-ONLY; The iteration number of service tag.
 33404  	ChangeNumber *string `json:"changeNumber,omitempty"`
 33405  	// Region - READ-ONLY; The region of service tag.
 33406  	Region *string `json:"region,omitempty"`
 33407  	// SystemService - READ-ONLY; The name of system service.
 33408  	SystemService *string `json:"systemService,omitempty"`
 33409  	// AddressPrefixes - READ-ONLY; The list of IP address prefixes.
 33410  	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
 33411  }
 33412  
 33413  // MarshalJSON is the custom marshaler for ServiceTagInformationPropertiesFormat.
 33414  func (stipf ServiceTagInformationPropertiesFormat) MarshalJSON() ([]byte, error) {
 33415  	objectMap := make(map[string]interface{})
 33416  	return json.Marshal(objectMap)
 33417  }
 33418  
 33419  // ServiceTagsListResult response for the ListServiceTags API service call.
 33420  type ServiceTagsListResult struct {
 33421  	autorest.Response `json:"-"`
 33422  	// Name - READ-ONLY; The name of the cloud.
 33423  	Name *string `json:"name,omitempty"`
 33424  	// ID - READ-ONLY; The ID of the cloud.
 33425  	ID *string `json:"id,omitempty"`
 33426  	// Type - READ-ONLY; The azure resource type.
 33427  	Type *string `json:"type,omitempty"`
 33428  	// ChangeNumber - READ-ONLY; The iteration number.
 33429  	ChangeNumber *string `json:"changeNumber,omitempty"`
 33430  	// Cloud - READ-ONLY; The name of the cloud.
 33431  	Cloud *string `json:"cloud,omitempty"`
 33432  	// Values - READ-ONLY; The list of service tag information resources.
 33433  	Values *[]ServiceTagInformation `json:"values,omitempty"`
 33434  }
 33435  
 33436  // MarshalJSON is the custom marshaler for ServiceTagsListResult.
 33437  func (stlr ServiceTagsListResult) MarshalJSON() ([]byte, error) {
 33438  	objectMap := make(map[string]interface{})
 33439  	return json.Marshal(objectMap)
 33440  }
 33441  
 33442  // SessionIds list of session IDs.
 33443  type SessionIds struct {
 33444  	// SessionIds - List of session IDs.
 33445  	SessionIds *[]string `json:"sessionIds,omitempty"`
 33446  }
 33447  
 33448  // StaticRoute list of all Static Routes.
 33449  type StaticRoute struct {
 33450  	// Name - The name of the StaticRoute that is unique within a VnetRoute.
 33451  	Name *string `json:"name,omitempty"`
 33452  	// AddressPrefixes - List of all address prefixes.
 33453  	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
 33454  	// NextHopIPAddress - The ip address of the next hop.
 33455  	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
 33456  }
 33457  
 33458  // String ...
 33459  type String struct {
 33460  	autorest.Response `json:"-"`
 33461  	Value             *string `json:"value,omitempty"`
 33462  }
 33463  
 33464  // Subnet subnet in a virtual network resource.
 33465  type Subnet struct {
 33466  	autorest.Response `json:"-"`
 33467  	// SubnetPropertiesFormat - Properties of the subnet.
 33468  	*SubnetPropertiesFormat `json:"properties,omitempty"`
 33469  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 33470  	Name *string `json:"name,omitempty"`
 33471  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 33472  	Etag *string `json:"etag,omitempty"`
 33473  	// ID - Resource ID.
 33474  	ID *string `json:"id,omitempty"`
 33475  }
 33476  
 33477  // MarshalJSON is the custom marshaler for Subnet.
 33478  func (s Subnet) MarshalJSON() ([]byte, error) {
 33479  	objectMap := make(map[string]interface{})
 33480  	if s.SubnetPropertiesFormat != nil {
 33481  		objectMap["properties"] = s.SubnetPropertiesFormat
 33482  	}
 33483  	if s.Name != nil {
 33484  		objectMap["name"] = s.Name
 33485  	}
 33486  	if s.ID != nil {
 33487  		objectMap["id"] = s.ID
 33488  	}
 33489  	return json.Marshal(objectMap)
 33490  }
 33491  
 33492  // UnmarshalJSON is the custom unmarshaler for Subnet struct.
 33493  func (s *Subnet) UnmarshalJSON(body []byte) error {
 33494  	var m map[string]*json.RawMessage
 33495  	err := json.Unmarshal(body, &m)
 33496  	if err != nil {
 33497  		return err
 33498  	}
 33499  	for k, v := range m {
 33500  		switch k {
 33501  		case "properties":
 33502  			if v != nil {
 33503  				var subnetPropertiesFormat SubnetPropertiesFormat
 33504  				err = json.Unmarshal(*v, &subnetPropertiesFormat)
 33505  				if err != nil {
 33506  					return err
 33507  				}
 33508  				s.SubnetPropertiesFormat = &subnetPropertiesFormat
 33509  			}
 33510  		case "name":
 33511  			if v != nil {
 33512  				var name string
 33513  				err = json.Unmarshal(*v, &name)
 33514  				if err != nil {
 33515  					return err
 33516  				}
 33517  				s.Name = &name
 33518  			}
 33519  		case "etag":
 33520  			if v != nil {
 33521  				var etag string
 33522  				err = json.Unmarshal(*v, &etag)
 33523  				if err != nil {
 33524  					return err
 33525  				}
 33526  				s.Etag = &etag
 33527  			}
 33528  		case "id":
 33529  			if v != nil {
 33530  				var ID string
 33531  				err = json.Unmarshal(*v, &ID)
 33532  				if err != nil {
 33533  					return err
 33534  				}
 33535  				s.ID = &ID
 33536  			}
 33537  		}
 33538  	}
 33539  
 33540  	return nil
 33541  }
 33542  
 33543  // SubnetAssociation subnet and it's custom security rules.
 33544  type SubnetAssociation struct {
 33545  	// ID - READ-ONLY; Subnet ID.
 33546  	ID *string `json:"id,omitempty"`
 33547  	// SecurityRules - Collection of custom security rules.
 33548  	SecurityRules *[]SecurityRule `json:"securityRules,omitempty"`
 33549  }
 33550  
 33551  // MarshalJSON is the custom marshaler for SubnetAssociation.
 33552  func (sa SubnetAssociation) MarshalJSON() ([]byte, error) {
 33553  	objectMap := make(map[string]interface{})
 33554  	if sa.SecurityRules != nil {
 33555  		objectMap["securityRules"] = sa.SecurityRules
 33556  	}
 33557  	return json.Marshal(objectMap)
 33558  }
 33559  
 33560  // SubnetListResult response for ListSubnets API service callRetrieves all subnet that belongs to a virtual
 33561  // network.
 33562  type SubnetListResult struct {
 33563  	autorest.Response `json:"-"`
 33564  	// Value - The subnets in a virtual network.
 33565  	Value *[]Subnet `json:"value,omitempty"`
 33566  	// NextLink - The URL to get the next set of results.
 33567  	NextLink *string `json:"nextLink,omitempty"`
 33568  }
 33569  
 33570  // SubnetListResultIterator provides access to a complete listing of Subnet values.
 33571  type SubnetListResultIterator struct {
 33572  	i    int
 33573  	page SubnetListResultPage
 33574  }
 33575  
 33576  // NextWithContext advances to the next value.  If there was an error making
 33577  // the request the iterator does not advance and the error is returned.
 33578  func (iter *SubnetListResultIterator) NextWithContext(ctx context.Context) (err error) {
 33579  	if tracing.IsEnabled() {
 33580  		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultIterator.NextWithContext")
 33581  		defer func() {
 33582  			sc := -1
 33583  			if iter.Response().Response.Response != nil {
 33584  				sc = iter.Response().Response.Response.StatusCode
 33585  			}
 33586  			tracing.EndSpan(ctx, sc, err)
 33587  		}()
 33588  	}
 33589  	iter.i++
 33590  	if iter.i < len(iter.page.Values()) {
 33591  		return nil
 33592  	}
 33593  	err = iter.page.NextWithContext(ctx)
 33594  	if err != nil {
 33595  		iter.i--
 33596  		return err
 33597  	}
 33598  	iter.i = 0
 33599  	return nil
 33600  }
 33601  
 33602  // Next advances to the next value.  If there was an error making
 33603  // the request the iterator does not advance and the error is returned.
 33604  // Deprecated: Use NextWithContext() instead.
 33605  func (iter *SubnetListResultIterator) Next() error {
 33606  	return iter.NextWithContext(context.Background())
 33607  }
 33608  
 33609  // NotDone returns true if the enumeration should be started or is not yet complete.
 33610  func (iter SubnetListResultIterator) NotDone() bool {
 33611  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 33612  }
 33613  
 33614  // Response returns the raw server response from the last page request.
 33615  func (iter SubnetListResultIterator) Response() SubnetListResult {
 33616  	return iter.page.Response()
 33617  }
 33618  
 33619  // Value returns the current value or a zero-initialized value if the
 33620  // iterator has advanced beyond the end of the collection.
 33621  func (iter SubnetListResultIterator) Value() Subnet {
 33622  	if !iter.page.NotDone() {
 33623  		return Subnet{}
 33624  	}
 33625  	return iter.page.Values()[iter.i]
 33626  }
 33627  
 33628  // Creates a new instance of the SubnetListResultIterator type.
 33629  func NewSubnetListResultIterator(page SubnetListResultPage) SubnetListResultIterator {
 33630  	return SubnetListResultIterator{page: page}
 33631  }
 33632  
 33633  // IsEmpty returns true if the ListResult contains no values.
 33634  func (slr SubnetListResult) IsEmpty() bool {
 33635  	return slr.Value == nil || len(*slr.Value) == 0
 33636  }
 33637  
 33638  // hasNextLink returns true if the NextLink is not empty.
 33639  func (slr SubnetListResult) hasNextLink() bool {
 33640  	return slr.NextLink != nil && len(*slr.NextLink) != 0
 33641  }
 33642  
 33643  // subnetListResultPreparer prepares a request to retrieve the next set of results.
 33644  // It returns nil if no more results exist.
 33645  func (slr SubnetListResult) subnetListResultPreparer(ctx context.Context) (*http.Request, error) {
 33646  	if !slr.hasNextLink() {
 33647  		return nil, nil
 33648  	}
 33649  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 33650  		autorest.AsJSON(),
 33651  		autorest.AsGet(),
 33652  		autorest.WithBaseURL(to.String(slr.NextLink)))
 33653  }
 33654  
 33655  // SubnetListResultPage contains a page of Subnet values.
 33656  type SubnetListResultPage struct {
 33657  	fn  func(context.Context, SubnetListResult) (SubnetListResult, error)
 33658  	slr SubnetListResult
 33659  }
 33660  
 33661  // NextWithContext advances to the next page of values.  If there was an error making
 33662  // the request the page does not advance and the error is returned.
 33663  func (page *SubnetListResultPage) NextWithContext(ctx context.Context) (err error) {
 33664  	if tracing.IsEnabled() {
 33665  		ctx = tracing.StartSpan(ctx, fqdn+"/SubnetListResultPage.NextWithContext")
 33666  		defer func() {
 33667  			sc := -1
 33668  			if page.Response().Response.Response != nil {
 33669  				sc = page.Response().Response.Response.StatusCode
 33670  			}
 33671  			tracing.EndSpan(ctx, sc, err)
 33672  		}()
 33673  	}
 33674  	for {
 33675  		next, err := page.fn(ctx, page.slr)
 33676  		if err != nil {
 33677  			return err
 33678  		}
 33679  		page.slr = next
 33680  		if !next.hasNextLink() || !next.IsEmpty() {
 33681  			break
 33682  		}
 33683  	}
 33684  	return nil
 33685  }
 33686  
 33687  // Next advances to the next page of values.  If there was an error making
 33688  // the request the page does not advance and the error is returned.
 33689  // Deprecated: Use NextWithContext() instead.
 33690  func (page *SubnetListResultPage) Next() error {
 33691  	return page.NextWithContext(context.Background())
 33692  }
 33693  
 33694  // NotDone returns true if the page enumeration should be started or is not yet complete.
 33695  func (page SubnetListResultPage) NotDone() bool {
 33696  	return !page.slr.IsEmpty()
 33697  }
 33698  
 33699  // Response returns the raw server response from the last page request.
 33700  func (page SubnetListResultPage) Response() SubnetListResult {
 33701  	return page.slr
 33702  }
 33703  
 33704  // Values returns the slice of values for the current page or nil if there are no values.
 33705  func (page SubnetListResultPage) Values() []Subnet {
 33706  	if page.slr.IsEmpty() {
 33707  		return nil
 33708  	}
 33709  	return *page.slr.Value
 33710  }
 33711  
 33712  // Creates a new instance of the SubnetListResultPage type.
 33713  func NewSubnetListResultPage(cur SubnetListResult, getNextPage func(context.Context, SubnetListResult) (SubnetListResult, error)) SubnetListResultPage {
 33714  	return SubnetListResultPage{
 33715  		fn:  getNextPage,
 33716  		slr: cur,
 33717  	}
 33718  }
 33719  
 33720  // SubnetPropertiesFormat properties of the subnet.
 33721  type SubnetPropertiesFormat struct {
 33722  	// AddressPrefix - The address prefix for the subnet.
 33723  	AddressPrefix *string `json:"addressPrefix,omitempty"`
 33724  	// AddressPrefixes - List of address prefixes for the subnet.
 33725  	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
 33726  	// NetworkSecurityGroup - The reference to the NetworkSecurityGroup resource.
 33727  	NetworkSecurityGroup *SecurityGroup `json:"networkSecurityGroup,omitempty"`
 33728  	// RouteTable - The reference to the RouteTable resource.
 33729  	RouteTable *RouteTable `json:"routeTable,omitempty"`
 33730  	// NatGateway - Nat gateway associated with this subnet.
 33731  	NatGateway *SubResource `json:"natGateway,omitempty"`
 33732  	// ServiceEndpoints - An array of service endpoints.
 33733  	ServiceEndpoints *[]ServiceEndpointPropertiesFormat `json:"serviceEndpoints,omitempty"`
 33734  	// ServiceEndpointPolicies - An array of service endpoint policies.
 33735  	ServiceEndpointPolicies *[]ServiceEndpointPolicy `json:"serviceEndpointPolicies,omitempty"`
 33736  	// PrivateEndpoints - READ-ONLY; An array of references to private endpoints.
 33737  	PrivateEndpoints *[]PrivateEndpoint `json:"privateEndpoints,omitempty"`
 33738  	// IPConfigurations - READ-ONLY; An array of references to the network interface IP configurations using subnet.
 33739  	IPConfigurations *[]IPConfiguration `json:"ipConfigurations,omitempty"`
 33740  	// IPConfigurationProfiles - READ-ONLY; Array of IP configuration profiles which reference this subnet.
 33741  	IPConfigurationProfiles *[]IPConfigurationProfile `json:"ipConfigurationProfiles,omitempty"`
 33742  	// IPAllocations - Array of IpAllocation which reference this subnet.
 33743  	IPAllocations *[]SubResource `json:"ipAllocations,omitempty"`
 33744  	// ResourceNavigationLinks - READ-ONLY; An array of references to the external resources using subnet.
 33745  	ResourceNavigationLinks *[]ResourceNavigationLink `json:"resourceNavigationLinks,omitempty"`
 33746  	// ServiceAssociationLinks - READ-ONLY; An array of references to services injecting into this subnet.
 33747  	ServiceAssociationLinks *[]ServiceAssociationLink `json:"serviceAssociationLinks,omitempty"`
 33748  	// Delegations - An array of references to the delegations on the subnet.
 33749  	Delegations *[]Delegation `json:"delegations,omitempty"`
 33750  	// Purpose - READ-ONLY; A read-only string identifying the intention of use for this subnet based on delegations and other user-defined properties.
 33751  	Purpose *string `json:"purpose,omitempty"`
 33752  	// ProvisioningState - READ-ONLY; The provisioning state of the subnet resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 33753  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 33754  	// PrivateEndpointNetworkPolicies - Enable or Disable apply network policies on private end point in the subnet.
 33755  	PrivateEndpointNetworkPolicies *string `json:"privateEndpointNetworkPolicies,omitempty"`
 33756  	// PrivateLinkServiceNetworkPolicies - Enable or Disable apply network policies on private link service in the subnet.
 33757  	PrivateLinkServiceNetworkPolicies *string `json:"privateLinkServiceNetworkPolicies,omitempty"`
 33758  }
 33759  
 33760  // MarshalJSON is the custom marshaler for SubnetPropertiesFormat.
 33761  func (spf SubnetPropertiesFormat) MarshalJSON() ([]byte, error) {
 33762  	objectMap := make(map[string]interface{})
 33763  	if spf.AddressPrefix != nil {
 33764  		objectMap["addressPrefix"] = spf.AddressPrefix
 33765  	}
 33766  	if spf.AddressPrefixes != nil {
 33767  		objectMap["addressPrefixes"] = spf.AddressPrefixes
 33768  	}
 33769  	if spf.NetworkSecurityGroup != nil {
 33770  		objectMap["networkSecurityGroup"] = spf.NetworkSecurityGroup
 33771  	}
 33772  	if spf.RouteTable != nil {
 33773  		objectMap["routeTable"] = spf.RouteTable
 33774  	}
 33775  	if spf.NatGateway != nil {
 33776  		objectMap["natGateway"] = spf.NatGateway
 33777  	}
 33778  	if spf.ServiceEndpoints != nil {
 33779  		objectMap["serviceEndpoints"] = spf.ServiceEndpoints
 33780  	}
 33781  	if spf.ServiceEndpointPolicies != nil {
 33782  		objectMap["serviceEndpointPolicies"] = spf.ServiceEndpointPolicies
 33783  	}
 33784  	if spf.IPAllocations != nil {
 33785  		objectMap["ipAllocations"] = spf.IPAllocations
 33786  	}
 33787  	if spf.Delegations != nil {
 33788  		objectMap["delegations"] = spf.Delegations
 33789  	}
 33790  	if spf.PrivateEndpointNetworkPolicies != nil {
 33791  		objectMap["privateEndpointNetworkPolicies"] = spf.PrivateEndpointNetworkPolicies
 33792  	}
 33793  	if spf.PrivateLinkServiceNetworkPolicies != nil {
 33794  		objectMap["privateLinkServiceNetworkPolicies"] = spf.PrivateLinkServiceNetworkPolicies
 33795  	}
 33796  	return json.Marshal(objectMap)
 33797  }
 33798  
 33799  // SubnetsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
 33800  // operation.
 33801  type SubnetsCreateOrUpdateFuture struct {
 33802  	azure.FutureAPI
 33803  	// Result returns the result of the asynchronous operation.
 33804  	// If the operation has not completed it will return an error.
 33805  	Result func(SubnetsClient) (Subnet, error)
 33806  }
 33807  
 33808  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 33809  func (future *SubnetsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 33810  	var azFuture azure.Future
 33811  	if err := json.Unmarshal(body, &azFuture); err != nil {
 33812  		return err
 33813  	}
 33814  	future.FutureAPI = &azFuture
 33815  	future.Result = future.result
 33816  	return nil
 33817  }
 33818  
 33819  // result is the default implementation for SubnetsCreateOrUpdateFuture.Result.
 33820  func (future *SubnetsCreateOrUpdateFuture) result(client SubnetsClient) (s Subnet, err error) {
 33821  	var done bool
 33822  	done, err = future.DoneWithContext(context.Background(), client)
 33823  	if err != nil {
 33824  		err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 33825  		return
 33826  	}
 33827  	if !done {
 33828  		s.Response.Response = future.Response()
 33829  		err = azure.NewAsyncOpIncompleteError("network.SubnetsCreateOrUpdateFuture")
 33830  		return
 33831  	}
 33832  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 33833  	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
 33834  		s, err = client.CreateOrUpdateResponder(s.Response.Response)
 33835  		if err != nil {
 33836  			err = autorest.NewErrorWithError(err, "network.SubnetsCreateOrUpdateFuture", "Result", s.Response.Response, "Failure responding to request")
 33837  		}
 33838  	}
 33839  	return
 33840  }
 33841  
 33842  // SubnetsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 33843  // operation.
 33844  type SubnetsDeleteFuture struct {
 33845  	azure.FutureAPI
 33846  	// Result returns the result of the asynchronous operation.
 33847  	// If the operation has not completed it will return an error.
 33848  	Result func(SubnetsClient) (autorest.Response, error)
 33849  }
 33850  
 33851  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 33852  func (future *SubnetsDeleteFuture) UnmarshalJSON(body []byte) error {
 33853  	var azFuture azure.Future
 33854  	if err := json.Unmarshal(body, &azFuture); err != nil {
 33855  		return err
 33856  	}
 33857  	future.FutureAPI = &azFuture
 33858  	future.Result = future.result
 33859  	return nil
 33860  }
 33861  
 33862  // result is the default implementation for SubnetsDeleteFuture.Result.
 33863  func (future *SubnetsDeleteFuture) result(client SubnetsClient) (ar autorest.Response, err error) {
 33864  	var done bool
 33865  	done, err = future.DoneWithContext(context.Background(), client)
 33866  	if err != nil {
 33867  		err = autorest.NewErrorWithError(err, "network.SubnetsDeleteFuture", "Result", future.Response(), "Polling failure")
 33868  		return
 33869  	}
 33870  	if !done {
 33871  		ar.Response = future.Response()
 33872  		err = azure.NewAsyncOpIncompleteError("network.SubnetsDeleteFuture")
 33873  		return
 33874  	}
 33875  	ar.Response = future.Response()
 33876  	return
 33877  }
 33878  
 33879  // SubnetsPrepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
 33880  // long-running operation.
 33881  type SubnetsPrepareNetworkPoliciesFuture struct {
 33882  	azure.FutureAPI
 33883  	// Result returns the result of the asynchronous operation.
 33884  	// If the operation has not completed it will return an error.
 33885  	Result func(SubnetsClient) (autorest.Response, error)
 33886  }
 33887  
 33888  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 33889  func (future *SubnetsPrepareNetworkPoliciesFuture) UnmarshalJSON(body []byte) error {
 33890  	var azFuture azure.Future
 33891  	if err := json.Unmarshal(body, &azFuture); err != nil {
 33892  		return err
 33893  	}
 33894  	future.FutureAPI = &azFuture
 33895  	future.Result = future.result
 33896  	return nil
 33897  }
 33898  
 33899  // result is the default implementation for SubnetsPrepareNetworkPoliciesFuture.Result.
 33900  func (future *SubnetsPrepareNetworkPoliciesFuture) result(client SubnetsClient) (ar autorest.Response, err error) {
 33901  	var done bool
 33902  	done, err = future.DoneWithContext(context.Background(), client)
 33903  	if err != nil {
 33904  		err = autorest.NewErrorWithError(err, "network.SubnetsPrepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
 33905  		return
 33906  	}
 33907  	if !done {
 33908  		ar.Response = future.Response()
 33909  		err = azure.NewAsyncOpIncompleteError("network.SubnetsPrepareNetworkPoliciesFuture")
 33910  		return
 33911  	}
 33912  	ar.Response = future.Response()
 33913  	return
 33914  }
 33915  
 33916  // SubnetsUnprepareNetworkPoliciesFuture an abstraction for monitoring and retrieving the results of a
 33917  // long-running operation.
 33918  type SubnetsUnprepareNetworkPoliciesFuture struct {
 33919  	azure.FutureAPI
 33920  	// Result returns the result of the asynchronous operation.
 33921  	// If the operation has not completed it will return an error.
 33922  	Result func(SubnetsClient) (autorest.Response, error)
 33923  }
 33924  
 33925  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 33926  func (future *SubnetsUnprepareNetworkPoliciesFuture) UnmarshalJSON(body []byte) error {
 33927  	var azFuture azure.Future
 33928  	if err := json.Unmarshal(body, &azFuture); err != nil {
 33929  		return err
 33930  	}
 33931  	future.FutureAPI = &azFuture
 33932  	future.Result = future.result
 33933  	return nil
 33934  }
 33935  
 33936  // result is the default implementation for SubnetsUnprepareNetworkPoliciesFuture.Result.
 33937  func (future *SubnetsUnprepareNetworkPoliciesFuture) result(client SubnetsClient) (ar autorest.Response, err error) {
 33938  	var done bool
 33939  	done, err = future.DoneWithContext(context.Background(), client)
 33940  	if err != nil {
 33941  		err = autorest.NewErrorWithError(err, "network.SubnetsUnprepareNetworkPoliciesFuture", "Result", future.Response(), "Polling failure")
 33942  		return
 33943  	}
 33944  	if !done {
 33945  		ar.Response = future.Response()
 33946  		err = azure.NewAsyncOpIncompleteError("network.SubnetsUnprepareNetworkPoliciesFuture")
 33947  		return
 33948  	}
 33949  	ar.Response = future.Response()
 33950  	return
 33951  }
 33952  
 33953  // SubResource reference to another subresource.
 33954  type SubResource struct {
 33955  	// ID - Resource ID.
 33956  	ID *string `json:"id,omitempty"`
 33957  }
 33958  
 33959  // TagsObject tags object for patch operations.
 33960  type TagsObject struct {
 33961  	// Tags - Resource tags.
 33962  	Tags map[string]*string `json:"tags"`
 33963  }
 33964  
 33965  // MarshalJSON is the custom marshaler for TagsObject.
 33966  func (toVar TagsObject) MarshalJSON() ([]byte, error) {
 33967  	objectMap := make(map[string]interface{})
 33968  	if toVar.Tags != nil {
 33969  		objectMap["tags"] = toVar.Tags
 33970  	}
 33971  	return json.Marshal(objectMap)
 33972  }
 33973  
 33974  // Topology topology of the specified resource group.
 33975  type Topology struct {
 33976  	autorest.Response `json:"-"`
 33977  	// ID - READ-ONLY; GUID representing the operation id.
 33978  	ID *string `json:"id,omitempty"`
 33979  	// CreatedDateTime - READ-ONLY; The datetime when the topology was initially created for the resource group.
 33980  	CreatedDateTime *date.Time `json:"createdDateTime,omitempty"`
 33981  	// LastModified - READ-ONLY; The datetime when the topology was last modified.
 33982  	LastModified *date.Time `json:"lastModified,omitempty"`
 33983  	// Resources - A list of topology resources.
 33984  	Resources *[]TopologyResource `json:"resources,omitempty"`
 33985  }
 33986  
 33987  // MarshalJSON is the custom marshaler for Topology.
 33988  func (t Topology) MarshalJSON() ([]byte, error) {
 33989  	objectMap := make(map[string]interface{})
 33990  	if t.Resources != nil {
 33991  		objectMap["resources"] = t.Resources
 33992  	}
 33993  	return json.Marshal(objectMap)
 33994  }
 33995  
 33996  // TopologyAssociation resources that have an association with the parent resource.
 33997  type TopologyAssociation struct {
 33998  	// Name - The name of the resource that is associated with the parent resource.
 33999  	Name *string `json:"name,omitempty"`
 34000  	// ResourceID - The ID of the resource that is associated with the parent resource.
 34001  	ResourceID *string `json:"resourceId,omitempty"`
 34002  	// AssociationType - The association type of the child resource to the parent resource. Possible values include: 'Associated', 'Contains'
 34003  	AssociationType AssociationType `json:"associationType,omitempty"`
 34004  }
 34005  
 34006  // TopologyParameters parameters that define the representation of topology.
 34007  type TopologyParameters struct {
 34008  	// TargetResourceGroupName - The name of the target resource group to perform topology on.
 34009  	TargetResourceGroupName *string `json:"targetResourceGroupName,omitempty"`
 34010  	// TargetVirtualNetwork - The reference to the Virtual Network resource.
 34011  	TargetVirtualNetwork *SubResource `json:"targetVirtualNetwork,omitempty"`
 34012  	// TargetSubnet - The reference to the Subnet resource.
 34013  	TargetSubnet *SubResource `json:"targetSubnet,omitempty"`
 34014  }
 34015  
 34016  // TopologyResource the network resource topology information for the given resource group.
 34017  type TopologyResource struct {
 34018  	// Name - Name of the resource.
 34019  	Name *string `json:"name,omitempty"`
 34020  	// ID - ID of the resource.
 34021  	ID *string `json:"id,omitempty"`
 34022  	// Location - Resource location.
 34023  	Location *string `json:"location,omitempty"`
 34024  	// Associations - Holds the associations the resource has with other resources in the resource group.
 34025  	Associations *[]TopologyAssociation `json:"associations,omitempty"`
 34026  }
 34027  
 34028  // TrafficAnalyticsConfigurationProperties parameters that define the configuration of traffic analytics.
 34029  type TrafficAnalyticsConfigurationProperties struct {
 34030  	// Enabled - Flag to enable/disable traffic analytics.
 34031  	Enabled *bool `json:"enabled,omitempty"`
 34032  	// WorkspaceID - The resource guid of the attached workspace.
 34033  	WorkspaceID *string `json:"workspaceId,omitempty"`
 34034  	// WorkspaceRegion - The location of the attached workspace.
 34035  	WorkspaceRegion *string `json:"workspaceRegion,omitempty"`
 34036  	// WorkspaceResourceID - Resource Id of the attached workspace.
 34037  	WorkspaceResourceID *string `json:"workspaceResourceId,omitempty"`
 34038  	// TrafficAnalyticsInterval - The interval in minutes which would decide how frequently TA service should do flow analytics.
 34039  	TrafficAnalyticsInterval *int32 `json:"trafficAnalyticsInterval,omitempty"`
 34040  }
 34041  
 34042  // TrafficAnalyticsProperties parameters that define the configuration of traffic analytics.
 34043  type TrafficAnalyticsProperties struct {
 34044  	// NetworkWatcherFlowAnalyticsConfiguration - Parameters that define the configuration of traffic analytics.
 34045  	NetworkWatcherFlowAnalyticsConfiguration *TrafficAnalyticsConfigurationProperties `json:"networkWatcherFlowAnalyticsConfiguration,omitempty"`
 34046  }
 34047  
 34048  // TrafficSelectorPolicy an traffic selector policy for a virtual network gateway connection.
 34049  type TrafficSelectorPolicy struct {
 34050  	// LocalAddressRanges - A collection of local address spaces in CIDR format.
 34051  	LocalAddressRanges *[]string `json:"localAddressRanges,omitempty"`
 34052  	// RemoteAddressRanges - A collection of remote address spaces in CIDR format.
 34053  	RemoteAddressRanges *[]string `json:"remoteAddressRanges,omitempty"`
 34054  }
 34055  
 34056  // TroubleshootingDetails information gained from troubleshooting of specified resource.
 34057  type TroubleshootingDetails struct {
 34058  	// ID - The id of the get troubleshoot operation.
 34059  	ID *string `json:"id,omitempty"`
 34060  	// ReasonType - Reason type of failure.
 34061  	ReasonType *string `json:"reasonType,omitempty"`
 34062  	// Summary - A summary of troubleshooting.
 34063  	Summary *string `json:"summary,omitempty"`
 34064  	// Detail - Details on troubleshooting results.
 34065  	Detail *string `json:"detail,omitempty"`
 34066  	// RecommendedActions - List of recommended actions.
 34067  	RecommendedActions *[]TroubleshootingRecommendedActions `json:"recommendedActions,omitempty"`
 34068  }
 34069  
 34070  // TroubleshootingParameters parameters that define the resource to troubleshoot.
 34071  type TroubleshootingParameters struct {
 34072  	// TargetResourceID - The target resource to troubleshoot.
 34073  	TargetResourceID *string `json:"targetResourceId,omitempty"`
 34074  	// TroubleshootingProperties - Properties of the troubleshooting resource.
 34075  	*TroubleshootingProperties `json:"properties,omitempty"`
 34076  }
 34077  
 34078  // MarshalJSON is the custom marshaler for TroubleshootingParameters.
 34079  func (tp TroubleshootingParameters) MarshalJSON() ([]byte, error) {
 34080  	objectMap := make(map[string]interface{})
 34081  	if tp.TargetResourceID != nil {
 34082  		objectMap["targetResourceId"] = tp.TargetResourceID
 34083  	}
 34084  	if tp.TroubleshootingProperties != nil {
 34085  		objectMap["properties"] = tp.TroubleshootingProperties
 34086  	}
 34087  	return json.Marshal(objectMap)
 34088  }
 34089  
 34090  // UnmarshalJSON is the custom unmarshaler for TroubleshootingParameters struct.
 34091  func (tp *TroubleshootingParameters) UnmarshalJSON(body []byte) error {
 34092  	var m map[string]*json.RawMessage
 34093  	err := json.Unmarshal(body, &m)
 34094  	if err != nil {
 34095  		return err
 34096  	}
 34097  	for k, v := range m {
 34098  		switch k {
 34099  		case "targetResourceId":
 34100  			if v != nil {
 34101  				var targetResourceID string
 34102  				err = json.Unmarshal(*v, &targetResourceID)
 34103  				if err != nil {
 34104  					return err
 34105  				}
 34106  				tp.TargetResourceID = &targetResourceID
 34107  			}
 34108  		case "properties":
 34109  			if v != nil {
 34110  				var troubleshootingProperties TroubleshootingProperties
 34111  				err = json.Unmarshal(*v, &troubleshootingProperties)
 34112  				if err != nil {
 34113  					return err
 34114  				}
 34115  				tp.TroubleshootingProperties = &troubleshootingProperties
 34116  			}
 34117  		}
 34118  	}
 34119  
 34120  	return nil
 34121  }
 34122  
 34123  // TroubleshootingProperties storage location provided for troubleshoot.
 34124  type TroubleshootingProperties struct {
 34125  	// StorageID - The ID for the storage account to save the troubleshoot result.
 34126  	StorageID *string `json:"storageId,omitempty"`
 34127  	// StoragePath - The path to the blob to save the troubleshoot result in.
 34128  	StoragePath *string `json:"storagePath,omitempty"`
 34129  }
 34130  
 34131  // TroubleshootingRecommendedActions recommended actions based on discovered issues.
 34132  type TroubleshootingRecommendedActions struct {
 34133  	// ActionID - ID of the recommended action.
 34134  	ActionID *string `json:"actionId,omitempty"`
 34135  	// ActionText - Description of recommended actions.
 34136  	ActionText *string `json:"actionText,omitempty"`
 34137  	// ActionURI - The uri linking to a documentation for the recommended troubleshooting actions.
 34138  	ActionURI *string `json:"actionUri,omitempty"`
 34139  	// ActionURIText - The information from the URI for the recommended troubleshooting actions.
 34140  	ActionURIText *string `json:"actionUriText,omitempty"`
 34141  }
 34142  
 34143  // TroubleshootingResult troubleshooting information gained from specified resource.
 34144  type TroubleshootingResult struct {
 34145  	autorest.Response `json:"-"`
 34146  	// StartTime - The start time of the troubleshooting.
 34147  	StartTime *date.Time `json:"startTime,omitempty"`
 34148  	// EndTime - The end time of the troubleshooting.
 34149  	EndTime *date.Time `json:"endTime,omitempty"`
 34150  	// Code - The result code of the troubleshooting.
 34151  	Code *string `json:"code,omitempty"`
 34152  	// Results - Information from troubleshooting.
 34153  	Results *[]TroubleshootingDetails `json:"results,omitempty"`
 34154  }
 34155  
 34156  // TunnelConnectionHealth virtualNetworkGatewayConnection properties.
 34157  type TunnelConnectionHealth struct {
 34158  	// Tunnel - READ-ONLY; Tunnel name.
 34159  	Tunnel *string `json:"tunnel,omitempty"`
 34160  	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
 34161  	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
 34162  	// IngressBytesTransferred - READ-ONLY; The Ingress Bytes Transferred in this connection.
 34163  	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
 34164  	// EgressBytesTransferred - READ-ONLY; The Egress Bytes Transferred in this connection.
 34165  	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
 34166  	// LastConnectionEstablishedUtcTime - READ-ONLY; The time at which connection was established in Utc format.
 34167  	LastConnectionEstablishedUtcTime *string `json:"lastConnectionEstablishedUtcTime,omitempty"`
 34168  }
 34169  
 34170  // MarshalJSON is the custom marshaler for TunnelConnectionHealth.
 34171  func (tch TunnelConnectionHealth) MarshalJSON() ([]byte, error) {
 34172  	objectMap := make(map[string]interface{})
 34173  	return json.Marshal(objectMap)
 34174  }
 34175  
 34176  // UnprepareNetworkPoliciesRequest details of UnprepareNetworkPolicies for Subnet.
 34177  type UnprepareNetworkPoliciesRequest struct {
 34178  	// ServiceName - The name of the service for which subnet is being unprepared for.
 34179  	ServiceName *string `json:"serviceName,omitempty"`
 34180  }
 34181  
 34182  // Usage the network resource usage.
 34183  type Usage struct {
 34184  	// ID - READ-ONLY; Resource identifier.
 34185  	ID *string `json:"id,omitempty"`
 34186  	// Unit - An enum describing the unit of measurement.
 34187  	Unit *string `json:"unit,omitempty"`
 34188  	// CurrentValue - The current value of the usage.
 34189  	CurrentValue *int64 `json:"currentValue,omitempty"`
 34190  	// Limit - The limit of usage.
 34191  	Limit *int64 `json:"limit,omitempty"`
 34192  	// Name - The name of the type of usage.
 34193  	Name *UsageName `json:"name,omitempty"`
 34194  }
 34195  
 34196  // MarshalJSON is the custom marshaler for Usage.
 34197  func (u Usage) MarshalJSON() ([]byte, error) {
 34198  	objectMap := make(map[string]interface{})
 34199  	if u.Unit != nil {
 34200  		objectMap["unit"] = u.Unit
 34201  	}
 34202  	if u.CurrentValue != nil {
 34203  		objectMap["currentValue"] = u.CurrentValue
 34204  	}
 34205  	if u.Limit != nil {
 34206  		objectMap["limit"] = u.Limit
 34207  	}
 34208  	if u.Name != nil {
 34209  		objectMap["name"] = u.Name
 34210  	}
 34211  	return json.Marshal(objectMap)
 34212  }
 34213  
 34214  // UsageName the usage names.
 34215  type UsageName struct {
 34216  	// Value - A string describing the resource name.
 34217  	Value *string `json:"value,omitempty"`
 34218  	// LocalizedValue - A localized string describing the resource name.
 34219  	LocalizedValue *string `json:"localizedValue,omitempty"`
 34220  }
 34221  
 34222  // UsagesListResult the list usages operation response.
 34223  type UsagesListResult struct {
 34224  	autorest.Response `json:"-"`
 34225  	// Value - The list network resource usages.
 34226  	Value *[]Usage `json:"value,omitempty"`
 34227  	// NextLink - URL to get the next set of results.
 34228  	NextLink *string `json:"nextLink,omitempty"`
 34229  }
 34230  
 34231  // UsagesListResultIterator provides access to a complete listing of Usage values.
 34232  type UsagesListResultIterator struct {
 34233  	i    int
 34234  	page UsagesListResultPage
 34235  }
 34236  
 34237  // NextWithContext advances to the next value.  If there was an error making
 34238  // the request the iterator does not advance and the error is returned.
 34239  func (iter *UsagesListResultIterator) NextWithContext(ctx context.Context) (err error) {
 34240  	if tracing.IsEnabled() {
 34241  		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultIterator.NextWithContext")
 34242  		defer func() {
 34243  			sc := -1
 34244  			if iter.Response().Response.Response != nil {
 34245  				sc = iter.Response().Response.Response.StatusCode
 34246  			}
 34247  			tracing.EndSpan(ctx, sc, err)
 34248  		}()
 34249  	}
 34250  	iter.i++
 34251  	if iter.i < len(iter.page.Values()) {
 34252  		return nil
 34253  	}
 34254  	err = iter.page.NextWithContext(ctx)
 34255  	if err != nil {
 34256  		iter.i--
 34257  		return err
 34258  	}
 34259  	iter.i = 0
 34260  	return nil
 34261  }
 34262  
 34263  // Next advances to the next value.  If there was an error making
 34264  // the request the iterator does not advance and the error is returned.
 34265  // Deprecated: Use NextWithContext() instead.
 34266  func (iter *UsagesListResultIterator) Next() error {
 34267  	return iter.NextWithContext(context.Background())
 34268  }
 34269  
 34270  // NotDone returns true if the enumeration should be started or is not yet complete.
 34271  func (iter UsagesListResultIterator) NotDone() bool {
 34272  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 34273  }
 34274  
 34275  // Response returns the raw server response from the last page request.
 34276  func (iter UsagesListResultIterator) Response() UsagesListResult {
 34277  	return iter.page.Response()
 34278  }
 34279  
 34280  // Value returns the current value or a zero-initialized value if the
 34281  // iterator has advanced beyond the end of the collection.
 34282  func (iter UsagesListResultIterator) Value() Usage {
 34283  	if !iter.page.NotDone() {
 34284  		return Usage{}
 34285  	}
 34286  	return iter.page.Values()[iter.i]
 34287  }
 34288  
 34289  // Creates a new instance of the UsagesListResultIterator type.
 34290  func NewUsagesListResultIterator(page UsagesListResultPage) UsagesListResultIterator {
 34291  	return UsagesListResultIterator{page: page}
 34292  }
 34293  
 34294  // IsEmpty returns true if the ListResult contains no values.
 34295  func (ulr UsagesListResult) IsEmpty() bool {
 34296  	return ulr.Value == nil || len(*ulr.Value) == 0
 34297  }
 34298  
 34299  // hasNextLink returns true if the NextLink is not empty.
 34300  func (ulr UsagesListResult) hasNextLink() bool {
 34301  	return ulr.NextLink != nil && len(*ulr.NextLink) != 0
 34302  }
 34303  
 34304  // usagesListResultPreparer prepares a request to retrieve the next set of results.
 34305  // It returns nil if no more results exist.
 34306  func (ulr UsagesListResult) usagesListResultPreparer(ctx context.Context) (*http.Request, error) {
 34307  	if !ulr.hasNextLink() {
 34308  		return nil, nil
 34309  	}
 34310  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 34311  		autorest.AsJSON(),
 34312  		autorest.AsGet(),
 34313  		autorest.WithBaseURL(to.String(ulr.NextLink)))
 34314  }
 34315  
 34316  // UsagesListResultPage contains a page of Usage values.
 34317  type UsagesListResultPage struct {
 34318  	fn  func(context.Context, UsagesListResult) (UsagesListResult, error)
 34319  	ulr UsagesListResult
 34320  }
 34321  
 34322  // NextWithContext advances to the next page of values.  If there was an error making
 34323  // the request the page does not advance and the error is returned.
 34324  func (page *UsagesListResultPage) NextWithContext(ctx context.Context) (err error) {
 34325  	if tracing.IsEnabled() {
 34326  		ctx = tracing.StartSpan(ctx, fqdn+"/UsagesListResultPage.NextWithContext")
 34327  		defer func() {
 34328  			sc := -1
 34329  			if page.Response().Response.Response != nil {
 34330  				sc = page.Response().Response.Response.StatusCode
 34331  			}
 34332  			tracing.EndSpan(ctx, sc, err)
 34333  		}()
 34334  	}
 34335  	for {
 34336  		next, err := page.fn(ctx, page.ulr)
 34337  		if err != nil {
 34338  			return err
 34339  		}
 34340  		page.ulr = next
 34341  		if !next.hasNextLink() || !next.IsEmpty() {
 34342  			break
 34343  		}
 34344  	}
 34345  	return nil
 34346  }
 34347  
 34348  // Next advances to the next page of values.  If there was an error making
 34349  // the request the page does not advance and the error is returned.
 34350  // Deprecated: Use NextWithContext() instead.
 34351  func (page *UsagesListResultPage) Next() error {
 34352  	return page.NextWithContext(context.Background())
 34353  }
 34354  
 34355  // NotDone returns true if the page enumeration should be started or is not yet complete.
 34356  func (page UsagesListResultPage) NotDone() bool {
 34357  	return !page.ulr.IsEmpty()
 34358  }
 34359  
 34360  // Response returns the raw server response from the last page request.
 34361  func (page UsagesListResultPage) Response() UsagesListResult {
 34362  	return page.ulr
 34363  }
 34364  
 34365  // Values returns the slice of values for the current page or nil if there are no values.
 34366  func (page UsagesListResultPage) Values() []Usage {
 34367  	if page.ulr.IsEmpty() {
 34368  		return nil
 34369  	}
 34370  	return *page.ulr.Value
 34371  }
 34372  
 34373  // Creates a new instance of the UsagesListResultPage type.
 34374  func NewUsagesListResultPage(cur UsagesListResult, getNextPage func(context.Context, UsagesListResult) (UsagesListResult, error)) UsagesListResultPage {
 34375  	return UsagesListResultPage{
 34376  		fn:  getNextPage,
 34377  		ulr: cur,
 34378  	}
 34379  }
 34380  
 34381  // VerificationIPFlowParameters parameters that define the IP flow to be verified.
 34382  type VerificationIPFlowParameters struct {
 34383  	// TargetResourceID - The ID of the target resource to perform next-hop on.
 34384  	TargetResourceID *string `json:"targetResourceId,omitempty"`
 34385  	// Direction - The direction of the packet represented as a 5-tuple. Possible values include: 'Inbound', 'Outbound'
 34386  	Direction Direction `json:"direction,omitempty"`
 34387  	// Protocol - Protocol to be verified on. Possible values include: 'IPFlowProtocolTCP', 'IPFlowProtocolUDP'
 34388  	Protocol IPFlowProtocol `json:"protocol,omitempty"`
 34389  	// 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.
 34390  	LocalPort *string `json:"localPort,omitempty"`
 34391  	// 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.
 34392  	RemotePort *string `json:"remotePort,omitempty"`
 34393  	// LocalIPAddress - The local IP address. Acceptable values are valid IPv4 addresses.
 34394  	LocalIPAddress *string `json:"localIPAddress,omitempty"`
 34395  	// RemoteIPAddress - The remote IP address. Acceptable values are valid IPv4 addresses.
 34396  	RemoteIPAddress *string `json:"remoteIPAddress,omitempty"`
 34397  	// 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).
 34398  	TargetNicResourceID *string `json:"targetNicResourceId,omitempty"`
 34399  }
 34400  
 34401  // VerificationIPFlowResult results of IP flow verification on the target resource.
 34402  type VerificationIPFlowResult struct {
 34403  	autorest.Response `json:"-"`
 34404  	// Access - Indicates whether the traffic is allowed or denied. Possible values include: 'Allow', 'Deny'
 34405  	Access Access `json:"access,omitempty"`
 34406  	// RuleName - Name of the rule. If input is not matched against any security rule, it is not displayed.
 34407  	RuleName *string `json:"ruleName,omitempty"`
 34408  }
 34409  
 34410  // VirtualAppliance networkVirtualAppliance Resource.
 34411  type VirtualAppliance struct {
 34412  	autorest.Response `json:"-"`
 34413  	// VirtualAppliancePropertiesFormat - Properties of the Network Virtual Appliance.
 34414  	*VirtualAppliancePropertiesFormat `json:"properties,omitempty"`
 34415  	// Identity - The service principal that has read access to cloud-init and config blob.
 34416  	Identity *ManagedServiceIdentity `json:"identity,omitempty"`
 34417  	// Sku - Network Virtual Appliance SKU.
 34418  	Sku *VirtualApplianceSkuProperties `json:"sku,omitempty"`
 34419  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 34420  	Etag *string `json:"etag,omitempty"`
 34421  	// ID - Resource ID.
 34422  	ID *string `json:"id,omitempty"`
 34423  	// Name - READ-ONLY; Resource name.
 34424  	Name *string `json:"name,omitempty"`
 34425  	// Type - READ-ONLY; Resource type.
 34426  	Type *string `json:"type,omitempty"`
 34427  	// Location - Resource location.
 34428  	Location *string `json:"location,omitempty"`
 34429  	// Tags - Resource tags.
 34430  	Tags map[string]*string `json:"tags"`
 34431  }
 34432  
 34433  // MarshalJSON is the custom marshaler for VirtualAppliance.
 34434  func (va VirtualAppliance) MarshalJSON() ([]byte, error) {
 34435  	objectMap := make(map[string]interface{})
 34436  	if va.VirtualAppliancePropertiesFormat != nil {
 34437  		objectMap["properties"] = va.VirtualAppliancePropertiesFormat
 34438  	}
 34439  	if va.Identity != nil {
 34440  		objectMap["identity"] = va.Identity
 34441  	}
 34442  	if va.Sku != nil {
 34443  		objectMap["sku"] = va.Sku
 34444  	}
 34445  	if va.ID != nil {
 34446  		objectMap["id"] = va.ID
 34447  	}
 34448  	if va.Location != nil {
 34449  		objectMap["location"] = va.Location
 34450  	}
 34451  	if va.Tags != nil {
 34452  		objectMap["tags"] = va.Tags
 34453  	}
 34454  	return json.Marshal(objectMap)
 34455  }
 34456  
 34457  // UnmarshalJSON is the custom unmarshaler for VirtualAppliance struct.
 34458  func (va *VirtualAppliance) UnmarshalJSON(body []byte) error {
 34459  	var m map[string]*json.RawMessage
 34460  	err := json.Unmarshal(body, &m)
 34461  	if err != nil {
 34462  		return err
 34463  	}
 34464  	for k, v := range m {
 34465  		switch k {
 34466  		case "properties":
 34467  			if v != nil {
 34468  				var virtualAppliancePropertiesFormat VirtualAppliancePropertiesFormat
 34469  				err = json.Unmarshal(*v, &virtualAppliancePropertiesFormat)
 34470  				if err != nil {
 34471  					return err
 34472  				}
 34473  				va.VirtualAppliancePropertiesFormat = &virtualAppliancePropertiesFormat
 34474  			}
 34475  		case "identity":
 34476  			if v != nil {
 34477  				var identity ManagedServiceIdentity
 34478  				err = json.Unmarshal(*v, &identity)
 34479  				if err != nil {
 34480  					return err
 34481  				}
 34482  				va.Identity = &identity
 34483  			}
 34484  		case "sku":
 34485  			if v != nil {
 34486  				var sku VirtualApplianceSkuProperties
 34487  				err = json.Unmarshal(*v, &sku)
 34488  				if err != nil {
 34489  					return err
 34490  				}
 34491  				va.Sku = &sku
 34492  			}
 34493  		case "etag":
 34494  			if v != nil {
 34495  				var etag string
 34496  				err = json.Unmarshal(*v, &etag)
 34497  				if err != nil {
 34498  					return err
 34499  				}
 34500  				va.Etag = &etag
 34501  			}
 34502  		case "id":
 34503  			if v != nil {
 34504  				var ID string
 34505  				err = json.Unmarshal(*v, &ID)
 34506  				if err != nil {
 34507  					return err
 34508  				}
 34509  				va.ID = &ID
 34510  			}
 34511  		case "name":
 34512  			if v != nil {
 34513  				var name string
 34514  				err = json.Unmarshal(*v, &name)
 34515  				if err != nil {
 34516  					return err
 34517  				}
 34518  				va.Name = &name
 34519  			}
 34520  		case "type":
 34521  			if v != nil {
 34522  				var typeVar string
 34523  				err = json.Unmarshal(*v, &typeVar)
 34524  				if err != nil {
 34525  					return err
 34526  				}
 34527  				va.Type = &typeVar
 34528  			}
 34529  		case "location":
 34530  			if v != nil {
 34531  				var location string
 34532  				err = json.Unmarshal(*v, &location)
 34533  				if err != nil {
 34534  					return err
 34535  				}
 34536  				va.Location = &location
 34537  			}
 34538  		case "tags":
 34539  			if v != nil {
 34540  				var tags map[string]*string
 34541  				err = json.Unmarshal(*v, &tags)
 34542  				if err != nil {
 34543  					return err
 34544  				}
 34545  				va.Tags = tags
 34546  			}
 34547  		}
 34548  	}
 34549  
 34550  	return nil
 34551  }
 34552  
 34553  // VirtualApplianceListResult response for ListNetworkVirtualAppliances API service call.
 34554  type VirtualApplianceListResult struct {
 34555  	autorest.Response `json:"-"`
 34556  	// Value - List of Network Virtual Appliances.
 34557  	Value *[]VirtualAppliance `json:"value,omitempty"`
 34558  	// NextLink - URL to get the next set of results.
 34559  	NextLink *string `json:"nextLink,omitempty"`
 34560  }
 34561  
 34562  // VirtualApplianceListResultIterator provides access to a complete listing of VirtualAppliance values.
 34563  type VirtualApplianceListResultIterator struct {
 34564  	i    int
 34565  	page VirtualApplianceListResultPage
 34566  }
 34567  
 34568  // NextWithContext advances to the next value.  If there was an error making
 34569  // the request the iterator does not advance and the error is returned.
 34570  func (iter *VirtualApplianceListResultIterator) NextWithContext(ctx context.Context) (err error) {
 34571  	if tracing.IsEnabled() {
 34572  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceListResultIterator.NextWithContext")
 34573  		defer func() {
 34574  			sc := -1
 34575  			if iter.Response().Response.Response != nil {
 34576  				sc = iter.Response().Response.Response.StatusCode
 34577  			}
 34578  			tracing.EndSpan(ctx, sc, err)
 34579  		}()
 34580  	}
 34581  	iter.i++
 34582  	if iter.i < len(iter.page.Values()) {
 34583  		return nil
 34584  	}
 34585  	err = iter.page.NextWithContext(ctx)
 34586  	if err != nil {
 34587  		iter.i--
 34588  		return err
 34589  	}
 34590  	iter.i = 0
 34591  	return nil
 34592  }
 34593  
 34594  // Next advances to the next value.  If there was an error making
 34595  // the request the iterator does not advance and the error is returned.
 34596  // Deprecated: Use NextWithContext() instead.
 34597  func (iter *VirtualApplianceListResultIterator) Next() error {
 34598  	return iter.NextWithContext(context.Background())
 34599  }
 34600  
 34601  // NotDone returns true if the enumeration should be started or is not yet complete.
 34602  func (iter VirtualApplianceListResultIterator) NotDone() bool {
 34603  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 34604  }
 34605  
 34606  // Response returns the raw server response from the last page request.
 34607  func (iter VirtualApplianceListResultIterator) Response() VirtualApplianceListResult {
 34608  	return iter.page.Response()
 34609  }
 34610  
 34611  // Value returns the current value or a zero-initialized value if the
 34612  // iterator has advanced beyond the end of the collection.
 34613  func (iter VirtualApplianceListResultIterator) Value() VirtualAppliance {
 34614  	if !iter.page.NotDone() {
 34615  		return VirtualAppliance{}
 34616  	}
 34617  	return iter.page.Values()[iter.i]
 34618  }
 34619  
 34620  // Creates a new instance of the VirtualApplianceListResultIterator type.
 34621  func NewVirtualApplianceListResultIterator(page VirtualApplianceListResultPage) VirtualApplianceListResultIterator {
 34622  	return VirtualApplianceListResultIterator{page: page}
 34623  }
 34624  
 34625  // IsEmpty returns true if the ListResult contains no values.
 34626  func (valr VirtualApplianceListResult) IsEmpty() bool {
 34627  	return valr.Value == nil || len(*valr.Value) == 0
 34628  }
 34629  
 34630  // hasNextLink returns true if the NextLink is not empty.
 34631  func (valr VirtualApplianceListResult) hasNextLink() bool {
 34632  	return valr.NextLink != nil && len(*valr.NextLink) != 0
 34633  }
 34634  
 34635  // virtualApplianceListResultPreparer prepares a request to retrieve the next set of results.
 34636  // It returns nil if no more results exist.
 34637  func (valr VirtualApplianceListResult) virtualApplianceListResultPreparer(ctx context.Context) (*http.Request, error) {
 34638  	if !valr.hasNextLink() {
 34639  		return nil, nil
 34640  	}
 34641  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 34642  		autorest.AsJSON(),
 34643  		autorest.AsGet(),
 34644  		autorest.WithBaseURL(to.String(valr.NextLink)))
 34645  }
 34646  
 34647  // VirtualApplianceListResultPage contains a page of VirtualAppliance values.
 34648  type VirtualApplianceListResultPage struct {
 34649  	fn   func(context.Context, VirtualApplianceListResult) (VirtualApplianceListResult, error)
 34650  	valr VirtualApplianceListResult
 34651  }
 34652  
 34653  // NextWithContext advances to the next page of values.  If there was an error making
 34654  // the request the page does not advance and the error is returned.
 34655  func (page *VirtualApplianceListResultPage) NextWithContext(ctx context.Context) (err error) {
 34656  	if tracing.IsEnabled() {
 34657  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualApplianceListResultPage.NextWithContext")
 34658  		defer func() {
 34659  			sc := -1
 34660  			if page.Response().Response.Response != nil {
 34661  				sc = page.Response().Response.Response.StatusCode
 34662  			}
 34663  			tracing.EndSpan(ctx, sc, err)
 34664  		}()
 34665  	}
 34666  	for {
 34667  		next, err := page.fn(ctx, page.valr)
 34668  		if err != nil {
 34669  			return err
 34670  		}
 34671  		page.valr = next
 34672  		if !next.hasNextLink() || !next.IsEmpty() {
 34673  			break
 34674  		}
 34675  	}
 34676  	return nil
 34677  }
 34678  
 34679  // Next advances to the next page of values.  If there was an error making
 34680  // the request the page does not advance and the error is returned.
 34681  // Deprecated: Use NextWithContext() instead.
 34682  func (page *VirtualApplianceListResultPage) Next() error {
 34683  	return page.NextWithContext(context.Background())
 34684  }
 34685  
 34686  // NotDone returns true if the page enumeration should be started or is not yet complete.
 34687  func (page VirtualApplianceListResultPage) NotDone() bool {
 34688  	return !page.valr.IsEmpty()
 34689  }
 34690  
 34691  // Response returns the raw server response from the last page request.
 34692  func (page VirtualApplianceListResultPage) Response() VirtualApplianceListResult {
 34693  	return page.valr
 34694  }
 34695  
 34696  // Values returns the slice of values for the current page or nil if there are no values.
 34697  func (page VirtualApplianceListResultPage) Values() []VirtualAppliance {
 34698  	if page.valr.IsEmpty() {
 34699  		return nil
 34700  	}
 34701  	return *page.valr.Value
 34702  }
 34703  
 34704  // Creates a new instance of the VirtualApplianceListResultPage type.
 34705  func NewVirtualApplianceListResultPage(cur VirtualApplianceListResult, getNextPage func(context.Context, VirtualApplianceListResult) (VirtualApplianceListResult, error)) VirtualApplianceListResultPage {
 34706  	return VirtualApplianceListResultPage{
 34707  		fn:   getNextPage,
 34708  		valr: cur,
 34709  	}
 34710  }
 34711  
 34712  // VirtualApplianceNicProperties network Virtual Appliance NIC properties.
 34713  type VirtualApplianceNicProperties struct {
 34714  	// Name - READ-ONLY; NIC name.
 34715  	Name *string `json:"name,omitempty"`
 34716  	// PublicIPAddress - READ-ONLY; Public IP address.
 34717  	PublicIPAddress *string `json:"publicIpAddress,omitempty"`
 34718  	// PrivateIPAddress - READ-ONLY; Private IP address.
 34719  	PrivateIPAddress *string `json:"privateIpAddress,omitempty"`
 34720  }
 34721  
 34722  // MarshalJSON is the custom marshaler for VirtualApplianceNicProperties.
 34723  func (vanp VirtualApplianceNicProperties) MarshalJSON() ([]byte, error) {
 34724  	objectMap := make(map[string]interface{})
 34725  	return json.Marshal(objectMap)
 34726  }
 34727  
 34728  // VirtualAppliancePropertiesFormat network Virtual Appliance definition.
 34729  type VirtualAppliancePropertiesFormat struct {
 34730  	// BootStrapConfigurationBlob - BootStrapConfigurationBlob storage URLs.
 34731  	BootStrapConfigurationBlob *[]string `json:"bootStrapConfigurationBlob,omitempty"`
 34732  	// VirtualHub - The Virtual Hub where Network Virtual Appliance is being deployed.
 34733  	VirtualHub *SubResource `json:"virtualHub,omitempty"`
 34734  	// CloudInitConfigurationBlob - CloudInitConfigurationBlob storage URLs.
 34735  	CloudInitConfigurationBlob *[]string `json:"cloudInitConfigurationBlob,omitempty"`
 34736  	// VirtualApplianceAsn - VirtualAppliance ASN.
 34737  	VirtualApplianceAsn *int64 `json:"virtualApplianceAsn,omitempty"`
 34738  	// VirtualApplianceNics - READ-ONLY; List of Virtual Appliance Network Interfaces.
 34739  	VirtualApplianceNics *[]VirtualApplianceNicProperties `json:"virtualApplianceNics,omitempty"`
 34740  	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 34741  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 34742  }
 34743  
 34744  // MarshalJSON is the custom marshaler for VirtualAppliancePropertiesFormat.
 34745  func (vapf VirtualAppliancePropertiesFormat) MarshalJSON() ([]byte, error) {
 34746  	objectMap := make(map[string]interface{})
 34747  	if vapf.BootStrapConfigurationBlob != nil {
 34748  		objectMap["bootStrapConfigurationBlob"] = vapf.BootStrapConfigurationBlob
 34749  	}
 34750  	if vapf.VirtualHub != nil {
 34751  		objectMap["virtualHub"] = vapf.VirtualHub
 34752  	}
 34753  	if vapf.CloudInitConfigurationBlob != nil {
 34754  		objectMap["cloudInitConfigurationBlob"] = vapf.CloudInitConfigurationBlob
 34755  	}
 34756  	if vapf.VirtualApplianceAsn != nil {
 34757  		objectMap["virtualApplianceAsn"] = vapf.VirtualApplianceAsn
 34758  	}
 34759  	return json.Marshal(objectMap)
 34760  }
 34761  
 34762  // VirtualAppliancesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 34763  // long-running operation.
 34764  type VirtualAppliancesCreateOrUpdateFuture struct {
 34765  	azure.FutureAPI
 34766  	// Result returns the result of the asynchronous operation.
 34767  	// If the operation has not completed it will return an error.
 34768  	Result func(VirtualAppliancesClient) (VirtualAppliance, error)
 34769  }
 34770  
 34771  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 34772  func (future *VirtualAppliancesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 34773  	var azFuture azure.Future
 34774  	if err := json.Unmarshal(body, &azFuture); err != nil {
 34775  		return err
 34776  	}
 34777  	future.FutureAPI = &azFuture
 34778  	future.Result = future.result
 34779  	return nil
 34780  }
 34781  
 34782  // result is the default implementation for VirtualAppliancesCreateOrUpdateFuture.Result.
 34783  func (future *VirtualAppliancesCreateOrUpdateFuture) result(client VirtualAppliancesClient) (va VirtualAppliance, err error) {
 34784  	var done bool
 34785  	done, err = future.DoneWithContext(context.Background(), client)
 34786  	if err != nil {
 34787  		err = autorest.NewErrorWithError(err, "network.VirtualAppliancesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 34788  		return
 34789  	}
 34790  	if !done {
 34791  		va.Response.Response = future.Response()
 34792  		err = azure.NewAsyncOpIncompleteError("network.VirtualAppliancesCreateOrUpdateFuture")
 34793  		return
 34794  	}
 34795  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 34796  	if va.Response.Response, err = future.GetResult(sender); err == nil && va.Response.Response.StatusCode != http.StatusNoContent {
 34797  		va, err = client.CreateOrUpdateResponder(va.Response.Response)
 34798  		if err != nil {
 34799  			err = autorest.NewErrorWithError(err, "network.VirtualAppliancesCreateOrUpdateFuture", "Result", va.Response.Response, "Failure responding to request")
 34800  		}
 34801  	}
 34802  	return
 34803  }
 34804  
 34805  // VirtualAppliancesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 34806  // operation.
 34807  type VirtualAppliancesDeleteFuture struct {
 34808  	azure.FutureAPI
 34809  	// Result returns the result of the asynchronous operation.
 34810  	// If the operation has not completed it will return an error.
 34811  	Result func(VirtualAppliancesClient) (autorest.Response, error)
 34812  }
 34813  
 34814  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 34815  func (future *VirtualAppliancesDeleteFuture) UnmarshalJSON(body []byte) error {
 34816  	var azFuture azure.Future
 34817  	if err := json.Unmarshal(body, &azFuture); err != nil {
 34818  		return err
 34819  	}
 34820  	future.FutureAPI = &azFuture
 34821  	future.Result = future.result
 34822  	return nil
 34823  }
 34824  
 34825  // result is the default implementation for VirtualAppliancesDeleteFuture.Result.
 34826  func (future *VirtualAppliancesDeleteFuture) result(client VirtualAppliancesClient) (ar autorest.Response, err error) {
 34827  	var done bool
 34828  	done, err = future.DoneWithContext(context.Background(), client)
 34829  	if err != nil {
 34830  		err = autorest.NewErrorWithError(err, "network.VirtualAppliancesDeleteFuture", "Result", future.Response(), "Polling failure")
 34831  		return
 34832  	}
 34833  	if !done {
 34834  		ar.Response = future.Response()
 34835  		err = azure.NewAsyncOpIncompleteError("network.VirtualAppliancesDeleteFuture")
 34836  		return
 34837  	}
 34838  	ar.Response = future.Response()
 34839  	return
 34840  }
 34841  
 34842  // VirtualApplianceSkuProperties network Virtual Appliance Sku Properties.
 34843  type VirtualApplianceSkuProperties struct {
 34844  	// Vendor - Virtual Appliance Vendor.
 34845  	Vendor *string `json:"vendor,omitempty"`
 34846  	// BundledScaleUnit - Virtual Appliance Scale Unit.
 34847  	BundledScaleUnit *string `json:"bundledScaleUnit,omitempty"`
 34848  	// MarketPlaceVersion - Virtual Appliance Version.
 34849  	MarketPlaceVersion *string `json:"marketPlaceVersion,omitempty"`
 34850  }
 34851  
 34852  // VirtualHub virtualHub Resource.
 34853  type VirtualHub struct {
 34854  	autorest.Response `json:"-"`
 34855  	// VirtualHubProperties - Properties of the virtual hub.
 34856  	*VirtualHubProperties `json:"properties,omitempty"`
 34857  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 34858  	Etag *string `json:"etag,omitempty"`
 34859  	// ID - Resource ID.
 34860  	ID *string `json:"id,omitempty"`
 34861  	// Name - READ-ONLY; Resource name.
 34862  	Name *string `json:"name,omitempty"`
 34863  	// Type - READ-ONLY; Resource type.
 34864  	Type *string `json:"type,omitempty"`
 34865  	// Location - Resource location.
 34866  	Location *string `json:"location,omitempty"`
 34867  	// Tags - Resource tags.
 34868  	Tags map[string]*string `json:"tags"`
 34869  }
 34870  
 34871  // MarshalJSON is the custom marshaler for VirtualHub.
 34872  func (vh VirtualHub) MarshalJSON() ([]byte, error) {
 34873  	objectMap := make(map[string]interface{})
 34874  	if vh.VirtualHubProperties != nil {
 34875  		objectMap["properties"] = vh.VirtualHubProperties
 34876  	}
 34877  	if vh.ID != nil {
 34878  		objectMap["id"] = vh.ID
 34879  	}
 34880  	if vh.Location != nil {
 34881  		objectMap["location"] = vh.Location
 34882  	}
 34883  	if vh.Tags != nil {
 34884  		objectMap["tags"] = vh.Tags
 34885  	}
 34886  	return json.Marshal(objectMap)
 34887  }
 34888  
 34889  // UnmarshalJSON is the custom unmarshaler for VirtualHub struct.
 34890  func (vh *VirtualHub) UnmarshalJSON(body []byte) error {
 34891  	var m map[string]*json.RawMessage
 34892  	err := json.Unmarshal(body, &m)
 34893  	if err != nil {
 34894  		return err
 34895  	}
 34896  	for k, v := range m {
 34897  		switch k {
 34898  		case "properties":
 34899  			if v != nil {
 34900  				var virtualHubProperties VirtualHubProperties
 34901  				err = json.Unmarshal(*v, &virtualHubProperties)
 34902  				if err != nil {
 34903  					return err
 34904  				}
 34905  				vh.VirtualHubProperties = &virtualHubProperties
 34906  			}
 34907  		case "etag":
 34908  			if v != nil {
 34909  				var etag string
 34910  				err = json.Unmarshal(*v, &etag)
 34911  				if err != nil {
 34912  					return err
 34913  				}
 34914  				vh.Etag = &etag
 34915  			}
 34916  		case "id":
 34917  			if v != nil {
 34918  				var ID string
 34919  				err = json.Unmarshal(*v, &ID)
 34920  				if err != nil {
 34921  					return err
 34922  				}
 34923  				vh.ID = &ID
 34924  			}
 34925  		case "name":
 34926  			if v != nil {
 34927  				var name string
 34928  				err = json.Unmarshal(*v, &name)
 34929  				if err != nil {
 34930  					return err
 34931  				}
 34932  				vh.Name = &name
 34933  			}
 34934  		case "type":
 34935  			if v != nil {
 34936  				var typeVar string
 34937  				err = json.Unmarshal(*v, &typeVar)
 34938  				if err != nil {
 34939  					return err
 34940  				}
 34941  				vh.Type = &typeVar
 34942  			}
 34943  		case "location":
 34944  			if v != nil {
 34945  				var location string
 34946  				err = json.Unmarshal(*v, &location)
 34947  				if err != nil {
 34948  					return err
 34949  				}
 34950  				vh.Location = &location
 34951  			}
 34952  		case "tags":
 34953  			if v != nil {
 34954  				var tags map[string]*string
 34955  				err = json.Unmarshal(*v, &tags)
 34956  				if err != nil {
 34957  					return err
 34958  				}
 34959  				vh.Tags = tags
 34960  			}
 34961  		}
 34962  	}
 34963  
 34964  	return nil
 34965  }
 34966  
 34967  // VirtualHubID virtual Hub identifier.
 34968  type VirtualHubID struct {
 34969  	// ID - The resource URI for the Virtual Hub where the ExpressRoute gateway is or will be deployed. The Virtual Hub resource and the ExpressRoute gateway resource reside in the same subscription.
 34970  	ID *string `json:"id,omitempty"`
 34971  }
 34972  
 34973  // VirtualHubProperties parameters for VirtualHub.
 34974  type VirtualHubProperties struct {
 34975  	// VirtualWan - The VirtualWAN to which the VirtualHub belongs.
 34976  	VirtualWan *SubResource `json:"virtualWan,omitempty"`
 34977  	// VpnGateway - The VpnGateway associated with this VirtualHub.
 34978  	VpnGateway *SubResource `json:"vpnGateway,omitempty"`
 34979  	// P2SVpnGateway - The P2SVpnGateway associated with this VirtualHub.
 34980  	P2SVpnGateway *SubResource `json:"p2SVpnGateway,omitempty"`
 34981  	// ExpressRouteGateway - The expressRouteGateway associated with this VirtualHub.
 34982  	ExpressRouteGateway *SubResource `json:"expressRouteGateway,omitempty"`
 34983  	// AzureFirewall - The azureFirewall associated with this VirtualHub.
 34984  	AzureFirewall *SubResource `json:"azureFirewall,omitempty"`
 34985  	// SecurityPartnerProvider - The securityPartnerProvider associated with this VirtualHub.
 34986  	SecurityPartnerProvider *SubResource `json:"securityPartnerProvider,omitempty"`
 34987  	// VirtualNetworkConnections - List of all vnet connections with this VirtualHub.
 34988  	VirtualNetworkConnections *[]HubVirtualNetworkConnection `json:"virtualNetworkConnections,omitempty"`
 34989  	// AddressPrefix - Address-prefix for this VirtualHub.
 34990  	AddressPrefix *string `json:"addressPrefix,omitempty"`
 34991  	// RouteTable - The routeTable associated with this virtual hub.
 34992  	RouteTable *VirtualHubRouteTable `json:"routeTable,omitempty"`
 34993  	// ProvisioningState - READ-ONLY; The provisioning state of the virtual hub resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 34994  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 34995  	// SecurityProviderName - The Security Provider name.
 34996  	SecurityProviderName *string `json:"securityProviderName,omitempty"`
 34997  	// VirtualHubRouteTableV2s - List of all virtual hub route table v2s associated with this VirtualHub.
 34998  	VirtualHubRouteTableV2s *[]VirtualHubRouteTableV2 `json:"virtualHubRouteTableV2s,omitempty"`
 34999  	// Sku - The sku of this VirtualHub.
 35000  	Sku *string `json:"sku,omitempty"`
 35001  }
 35002  
 35003  // MarshalJSON is the custom marshaler for VirtualHubProperties.
 35004  func (vhp VirtualHubProperties) MarshalJSON() ([]byte, error) {
 35005  	objectMap := make(map[string]interface{})
 35006  	if vhp.VirtualWan != nil {
 35007  		objectMap["virtualWan"] = vhp.VirtualWan
 35008  	}
 35009  	if vhp.VpnGateway != nil {
 35010  		objectMap["vpnGateway"] = vhp.VpnGateway
 35011  	}
 35012  	if vhp.P2SVpnGateway != nil {
 35013  		objectMap["p2SVpnGateway"] = vhp.P2SVpnGateway
 35014  	}
 35015  	if vhp.ExpressRouteGateway != nil {
 35016  		objectMap["expressRouteGateway"] = vhp.ExpressRouteGateway
 35017  	}
 35018  	if vhp.AzureFirewall != nil {
 35019  		objectMap["azureFirewall"] = vhp.AzureFirewall
 35020  	}
 35021  	if vhp.SecurityPartnerProvider != nil {
 35022  		objectMap["securityPartnerProvider"] = vhp.SecurityPartnerProvider
 35023  	}
 35024  	if vhp.VirtualNetworkConnections != nil {
 35025  		objectMap["virtualNetworkConnections"] = vhp.VirtualNetworkConnections
 35026  	}
 35027  	if vhp.AddressPrefix != nil {
 35028  		objectMap["addressPrefix"] = vhp.AddressPrefix
 35029  	}
 35030  	if vhp.RouteTable != nil {
 35031  		objectMap["routeTable"] = vhp.RouteTable
 35032  	}
 35033  	if vhp.SecurityProviderName != nil {
 35034  		objectMap["securityProviderName"] = vhp.SecurityProviderName
 35035  	}
 35036  	if vhp.VirtualHubRouteTableV2s != nil {
 35037  		objectMap["virtualHubRouteTableV2s"] = vhp.VirtualHubRouteTableV2s
 35038  	}
 35039  	if vhp.Sku != nil {
 35040  		objectMap["sku"] = vhp.Sku
 35041  	}
 35042  	return json.Marshal(objectMap)
 35043  }
 35044  
 35045  // VirtualHubRoute virtualHub route.
 35046  type VirtualHubRoute struct {
 35047  	// AddressPrefixes - List of all addressPrefixes.
 35048  	AddressPrefixes *[]string `json:"addressPrefixes,omitempty"`
 35049  	// NextHopIPAddress - NextHop ip address.
 35050  	NextHopIPAddress *string `json:"nextHopIpAddress,omitempty"`
 35051  }
 35052  
 35053  // VirtualHubRouteTable virtualHub route table.
 35054  type VirtualHubRouteTable struct {
 35055  	// Routes - List of all routes.
 35056  	Routes *[]VirtualHubRoute `json:"routes,omitempty"`
 35057  }
 35058  
 35059  // VirtualHubRouteTableV2 virtualHubRouteTableV2 Resource.
 35060  type VirtualHubRouteTableV2 struct {
 35061  	autorest.Response `json:"-"`
 35062  	// VirtualHubRouteTableV2Properties - Properties of the virtual hub route table v2.
 35063  	*VirtualHubRouteTableV2Properties `json:"properties,omitempty"`
 35064  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 35065  	Name *string `json:"name,omitempty"`
 35066  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 35067  	Etag *string `json:"etag,omitempty"`
 35068  	// ID - Resource ID.
 35069  	ID *string `json:"id,omitempty"`
 35070  }
 35071  
 35072  // MarshalJSON is the custom marshaler for VirtualHubRouteTableV2.
 35073  func (vhrtv VirtualHubRouteTableV2) MarshalJSON() ([]byte, error) {
 35074  	objectMap := make(map[string]interface{})
 35075  	if vhrtv.VirtualHubRouteTableV2Properties != nil {
 35076  		objectMap["properties"] = vhrtv.VirtualHubRouteTableV2Properties
 35077  	}
 35078  	if vhrtv.Name != nil {
 35079  		objectMap["name"] = vhrtv.Name
 35080  	}
 35081  	if vhrtv.ID != nil {
 35082  		objectMap["id"] = vhrtv.ID
 35083  	}
 35084  	return json.Marshal(objectMap)
 35085  }
 35086  
 35087  // UnmarshalJSON is the custom unmarshaler for VirtualHubRouteTableV2 struct.
 35088  func (vhrtv *VirtualHubRouteTableV2) UnmarshalJSON(body []byte) error {
 35089  	var m map[string]*json.RawMessage
 35090  	err := json.Unmarshal(body, &m)
 35091  	if err != nil {
 35092  		return err
 35093  	}
 35094  	for k, v := range m {
 35095  		switch k {
 35096  		case "properties":
 35097  			if v != nil {
 35098  				var virtualHubRouteTableV2Properties VirtualHubRouteTableV2Properties
 35099  				err = json.Unmarshal(*v, &virtualHubRouteTableV2Properties)
 35100  				if err != nil {
 35101  					return err
 35102  				}
 35103  				vhrtv.VirtualHubRouteTableV2Properties = &virtualHubRouteTableV2Properties
 35104  			}
 35105  		case "name":
 35106  			if v != nil {
 35107  				var name string
 35108  				err = json.Unmarshal(*v, &name)
 35109  				if err != nil {
 35110  					return err
 35111  				}
 35112  				vhrtv.Name = &name
 35113  			}
 35114  		case "etag":
 35115  			if v != nil {
 35116  				var etag string
 35117  				err = json.Unmarshal(*v, &etag)
 35118  				if err != nil {
 35119  					return err
 35120  				}
 35121  				vhrtv.Etag = &etag
 35122  			}
 35123  		case "id":
 35124  			if v != nil {
 35125  				var ID string
 35126  				err = json.Unmarshal(*v, &ID)
 35127  				if err != nil {
 35128  					return err
 35129  				}
 35130  				vhrtv.ID = &ID
 35131  			}
 35132  		}
 35133  	}
 35134  
 35135  	return nil
 35136  }
 35137  
 35138  // VirtualHubRouteTableV2Properties parameters for VirtualHubRouteTableV2.
 35139  type VirtualHubRouteTableV2Properties struct {
 35140  	// Routes - List of all routes.
 35141  	Routes *[]VirtualHubRouteV2 `json:"routes,omitempty"`
 35142  	// AttachedConnections - List of all connections attached to this route table v2.
 35143  	AttachedConnections *[]string `json:"attachedConnections,omitempty"`
 35144  	// ProvisioningState - READ-ONLY; The provisioning state of the virtual hub route table v2 resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 35145  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 35146  }
 35147  
 35148  // MarshalJSON is the custom marshaler for VirtualHubRouteTableV2Properties.
 35149  func (vhrtvp VirtualHubRouteTableV2Properties) MarshalJSON() ([]byte, error) {
 35150  	objectMap := make(map[string]interface{})
 35151  	if vhrtvp.Routes != nil {
 35152  		objectMap["routes"] = vhrtvp.Routes
 35153  	}
 35154  	if vhrtvp.AttachedConnections != nil {
 35155  		objectMap["attachedConnections"] = vhrtvp.AttachedConnections
 35156  	}
 35157  	return json.Marshal(objectMap)
 35158  }
 35159  
 35160  // VirtualHubRouteTableV2sCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
 35161  // a long-running operation.
 35162  type VirtualHubRouteTableV2sCreateOrUpdateFuture struct {
 35163  	azure.FutureAPI
 35164  	// Result returns the result of the asynchronous operation.
 35165  	// If the operation has not completed it will return an error.
 35166  	Result func(VirtualHubRouteTableV2sClient) (VirtualHubRouteTableV2, error)
 35167  }
 35168  
 35169  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 35170  func (future *VirtualHubRouteTableV2sCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 35171  	var azFuture azure.Future
 35172  	if err := json.Unmarshal(body, &azFuture); err != nil {
 35173  		return err
 35174  	}
 35175  	future.FutureAPI = &azFuture
 35176  	future.Result = future.result
 35177  	return nil
 35178  }
 35179  
 35180  // result is the default implementation for VirtualHubRouteTableV2sCreateOrUpdateFuture.Result.
 35181  func (future *VirtualHubRouteTableV2sCreateOrUpdateFuture) result(client VirtualHubRouteTableV2sClient) (vhrtv VirtualHubRouteTableV2, err error) {
 35182  	var done bool
 35183  	done, err = future.DoneWithContext(context.Background(), client)
 35184  	if err != nil {
 35185  		err = autorest.NewErrorWithError(err, "network.VirtualHubRouteTableV2sCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 35186  		return
 35187  	}
 35188  	if !done {
 35189  		vhrtv.Response.Response = future.Response()
 35190  		err = azure.NewAsyncOpIncompleteError("network.VirtualHubRouteTableV2sCreateOrUpdateFuture")
 35191  		return
 35192  	}
 35193  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 35194  	if vhrtv.Response.Response, err = future.GetResult(sender); err == nil && vhrtv.Response.Response.StatusCode != http.StatusNoContent {
 35195  		vhrtv, err = client.CreateOrUpdateResponder(vhrtv.Response.Response)
 35196  		if err != nil {
 35197  			err = autorest.NewErrorWithError(err, "network.VirtualHubRouteTableV2sCreateOrUpdateFuture", "Result", vhrtv.Response.Response, "Failure responding to request")
 35198  		}
 35199  	}
 35200  	return
 35201  }
 35202  
 35203  // VirtualHubRouteTableV2sDeleteFuture an abstraction for monitoring and retrieving the results of a
 35204  // long-running operation.
 35205  type VirtualHubRouteTableV2sDeleteFuture struct {
 35206  	azure.FutureAPI
 35207  	// Result returns the result of the asynchronous operation.
 35208  	// If the operation has not completed it will return an error.
 35209  	Result func(VirtualHubRouteTableV2sClient) (autorest.Response, error)
 35210  }
 35211  
 35212  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 35213  func (future *VirtualHubRouteTableV2sDeleteFuture) UnmarshalJSON(body []byte) error {
 35214  	var azFuture azure.Future
 35215  	if err := json.Unmarshal(body, &azFuture); err != nil {
 35216  		return err
 35217  	}
 35218  	future.FutureAPI = &azFuture
 35219  	future.Result = future.result
 35220  	return nil
 35221  }
 35222  
 35223  // result is the default implementation for VirtualHubRouteTableV2sDeleteFuture.Result.
 35224  func (future *VirtualHubRouteTableV2sDeleteFuture) result(client VirtualHubRouteTableV2sClient) (ar autorest.Response, err error) {
 35225  	var done bool
 35226  	done, err = future.DoneWithContext(context.Background(), client)
 35227  	if err != nil {
 35228  		err = autorest.NewErrorWithError(err, "network.VirtualHubRouteTableV2sDeleteFuture", "Result", future.Response(), "Polling failure")
 35229  		return
 35230  	}
 35231  	if !done {
 35232  		ar.Response = future.Response()
 35233  		err = azure.NewAsyncOpIncompleteError("network.VirtualHubRouteTableV2sDeleteFuture")
 35234  		return
 35235  	}
 35236  	ar.Response = future.Response()
 35237  	return
 35238  }
 35239  
 35240  // VirtualHubRouteV2 virtualHubRouteTableV2 route.
 35241  type VirtualHubRouteV2 struct {
 35242  	// DestinationType - The type of destinations.
 35243  	DestinationType *string `json:"destinationType,omitempty"`
 35244  	// Destinations - List of all destinations.
 35245  	Destinations *[]string `json:"destinations,omitempty"`
 35246  	// NextHopType - The type of next hops.
 35247  	NextHopType *string `json:"nextHopType,omitempty"`
 35248  	// NextHops - NextHops ip address.
 35249  	NextHops *[]string `json:"nextHops,omitempty"`
 35250  }
 35251  
 35252  // VirtualHubsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 35253  // long-running operation.
 35254  type VirtualHubsCreateOrUpdateFuture struct {
 35255  	azure.FutureAPI
 35256  	// Result returns the result of the asynchronous operation.
 35257  	// If the operation has not completed it will return an error.
 35258  	Result func(VirtualHubsClient) (VirtualHub, error)
 35259  }
 35260  
 35261  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 35262  func (future *VirtualHubsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 35263  	var azFuture azure.Future
 35264  	if err := json.Unmarshal(body, &azFuture); err != nil {
 35265  		return err
 35266  	}
 35267  	future.FutureAPI = &azFuture
 35268  	future.Result = future.result
 35269  	return nil
 35270  }
 35271  
 35272  // result is the default implementation for VirtualHubsCreateOrUpdateFuture.Result.
 35273  func (future *VirtualHubsCreateOrUpdateFuture) result(client VirtualHubsClient) (vh VirtualHub, err error) {
 35274  	var done bool
 35275  	done, err = future.DoneWithContext(context.Background(), client)
 35276  	if err != nil {
 35277  		err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 35278  		return
 35279  	}
 35280  	if !done {
 35281  		vh.Response.Response = future.Response()
 35282  		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsCreateOrUpdateFuture")
 35283  		return
 35284  	}
 35285  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 35286  	if vh.Response.Response, err = future.GetResult(sender); err == nil && vh.Response.Response.StatusCode != http.StatusNoContent {
 35287  		vh, err = client.CreateOrUpdateResponder(vh.Response.Response)
 35288  		if err != nil {
 35289  			err = autorest.NewErrorWithError(err, "network.VirtualHubsCreateOrUpdateFuture", "Result", vh.Response.Response, "Failure responding to request")
 35290  		}
 35291  	}
 35292  	return
 35293  }
 35294  
 35295  // VirtualHubsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 35296  // operation.
 35297  type VirtualHubsDeleteFuture struct {
 35298  	azure.FutureAPI
 35299  	// Result returns the result of the asynchronous operation.
 35300  	// If the operation has not completed it will return an error.
 35301  	Result func(VirtualHubsClient) (autorest.Response, error)
 35302  }
 35303  
 35304  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 35305  func (future *VirtualHubsDeleteFuture) UnmarshalJSON(body []byte) error {
 35306  	var azFuture azure.Future
 35307  	if err := json.Unmarshal(body, &azFuture); err != nil {
 35308  		return err
 35309  	}
 35310  	future.FutureAPI = &azFuture
 35311  	future.Result = future.result
 35312  	return nil
 35313  }
 35314  
 35315  // result is the default implementation for VirtualHubsDeleteFuture.Result.
 35316  func (future *VirtualHubsDeleteFuture) result(client VirtualHubsClient) (ar autorest.Response, err error) {
 35317  	var done bool
 35318  	done, err = future.DoneWithContext(context.Background(), client)
 35319  	if err != nil {
 35320  		err = autorest.NewErrorWithError(err, "network.VirtualHubsDeleteFuture", "Result", future.Response(), "Polling failure")
 35321  		return
 35322  	}
 35323  	if !done {
 35324  		ar.Response = future.Response()
 35325  		err = azure.NewAsyncOpIncompleteError("network.VirtualHubsDeleteFuture")
 35326  		return
 35327  	}
 35328  	ar.Response = future.Response()
 35329  	return
 35330  }
 35331  
 35332  // VirtualNetwork virtual Network resource.
 35333  type VirtualNetwork struct {
 35334  	autorest.Response `json:"-"`
 35335  	// VirtualNetworkPropertiesFormat - Properties of the virtual network.
 35336  	*VirtualNetworkPropertiesFormat `json:"properties,omitempty"`
 35337  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 35338  	Etag *string `json:"etag,omitempty"`
 35339  	// ID - Resource ID.
 35340  	ID *string `json:"id,omitempty"`
 35341  	// Name - READ-ONLY; Resource name.
 35342  	Name *string `json:"name,omitempty"`
 35343  	// Type - READ-ONLY; Resource type.
 35344  	Type *string `json:"type,omitempty"`
 35345  	// Location - Resource location.
 35346  	Location *string `json:"location,omitempty"`
 35347  	// Tags - Resource tags.
 35348  	Tags map[string]*string `json:"tags"`
 35349  }
 35350  
 35351  // MarshalJSON is the custom marshaler for VirtualNetwork.
 35352  func (vn VirtualNetwork) MarshalJSON() ([]byte, error) {
 35353  	objectMap := make(map[string]interface{})
 35354  	if vn.VirtualNetworkPropertiesFormat != nil {
 35355  		objectMap["properties"] = vn.VirtualNetworkPropertiesFormat
 35356  	}
 35357  	if vn.ID != nil {
 35358  		objectMap["id"] = vn.ID
 35359  	}
 35360  	if vn.Location != nil {
 35361  		objectMap["location"] = vn.Location
 35362  	}
 35363  	if vn.Tags != nil {
 35364  		objectMap["tags"] = vn.Tags
 35365  	}
 35366  	return json.Marshal(objectMap)
 35367  }
 35368  
 35369  // UnmarshalJSON is the custom unmarshaler for VirtualNetwork struct.
 35370  func (vn *VirtualNetwork) UnmarshalJSON(body []byte) error {
 35371  	var m map[string]*json.RawMessage
 35372  	err := json.Unmarshal(body, &m)
 35373  	if err != nil {
 35374  		return err
 35375  	}
 35376  	for k, v := range m {
 35377  		switch k {
 35378  		case "properties":
 35379  			if v != nil {
 35380  				var virtualNetworkPropertiesFormat VirtualNetworkPropertiesFormat
 35381  				err = json.Unmarshal(*v, &virtualNetworkPropertiesFormat)
 35382  				if err != nil {
 35383  					return err
 35384  				}
 35385  				vn.VirtualNetworkPropertiesFormat = &virtualNetworkPropertiesFormat
 35386  			}
 35387  		case "etag":
 35388  			if v != nil {
 35389  				var etag string
 35390  				err = json.Unmarshal(*v, &etag)
 35391  				if err != nil {
 35392  					return err
 35393  				}
 35394  				vn.Etag = &etag
 35395  			}
 35396  		case "id":
 35397  			if v != nil {
 35398  				var ID string
 35399  				err = json.Unmarshal(*v, &ID)
 35400  				if err != nil {
 35401  					return err
 35402  				}
 35403  				vn.ID = &ID
 35404  			}
 35405  		case "name":
 35406  			if v != nil {
 35407  				var name string
 35408  				err = json.Unmarshal(*v, &name)
 35409  				if err != nil {
 35410  					return err
 35411  				}
 35412  				vn.Name = &name
 35413  			}
 35414  		case "type":
 35415  			if v != nil {
 35416  				var typeVar string
 35417  				err = json.Unmarshal(*v, &typeVar)
 35418  				if err != nil {
 35419  					return err
 35420  				}
 35421  				vn.Type = &typeVar
 35422  			}
 35423  		case "location":
 35424  			if v != nil {
 35425  				var location string
 35426  				err = json.Unmarshal(*v, &location)
 35427  				if err != nil {
 35428  					return err
 35429  				}
 35430  				vn.Location = &location
 35431  			}
 35432  		case "tags":
 35433  			if v != nil {
 35434  				var tags map[string]*string
 35435  				err = json.Unmarshal(*v, &tags)
 35436  				if err != nil {
 35437  					return err
 35438  				}
 35439  				vn.Tags = tags
 35440  			}
 35441  		}
 35442  	}
 35443  
 35444  	return nil
 35445  }
 35446  
 35447  // VirtualNetworkBgpCommunities bgp Communities sent over ExpressRoute with each route corresponding to a
 35448  // prefix in this VNET.
 35449  type VirtualNetworkBgpCommunities struct {
 35450  	// VirtualNetworkCommunity - The BGP community associated with the virtual network.
 35451  	VirtualNetworkCommunity *string `json:"virtualNetworkCommunity,omitempty"`
 35452  	// RegionalCommunity - READ-ONLY; The BGP community associated with the region of the virtual network.
 35453  	RegionalCommunity *string `json:"regionalCommunity,omitempty"`
 35454  }
 35455  
 35456  // MarshalJSON is the custom marshaler for VirtualNetworkBgpCommunities.
 35457  func (vnbc VirtualNetworkBgpCommunities) MarshalJSON() ([]byte, error) {
 35458  	objectMap := make(map[string]interface{})
 35459  	if vnbc.VirtualNetworkCommunity != nil {
 35460  		objectMap["virtualNetworkCommunity"] = vnbc.VirtualNetworkCommunity
 35461  	}
 35462  	return json.Marshal(objectMap)
 35463  }
 35464  
 35465  // VirtualNetworkConnectionGatewayReference a reference to VirtualNetworkGateway or LocalNetworkGateway
 35466  // resource.
 35467  type VirtualNetworkConnectionGatewayReference struct {
 35468  	// ID - The ID of VirtualNetworkGateway or LocalNetworkGateway resource.
 35469  	ID *string `json:"id,omitempty"`
 35470  }
 35471  
 35472  // VirtualNetworkGateway a common class for general resource information.
 35473  type VirtualNetworkGateway struct {
 35474  	autorest.Response `json:"-"`
 35475  	// VirtualNetworkGatewayPropertiesFormat - Properties of the virtual network gateway.
 35476  	*VirtualNetworkGatewayPropertiesFormat `json:"properties,omitempty"`
 35477  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 35478  	Etag *string `json:"etag,omitempty"`
 35479  	// ID - Resource ID.
 35480  	ID *string `json:"id,omitempty"`
 35481  	// Name - READ-ONLY; Resource name.
 35482  	Name *string `json:"name,omitempty"`
 35483  	// Type - READ-ONLY; Resource type.
 35484  	Type *string `json:"type,omitempty"`
 35485  	// Location - Resource location.
 35486  	Location *string `json:"location,omitempty"`
 35487  	// Tags - Resource tags.
 35488  	Tags map[string]*string `json:"tags"`
 35489  }
 35490  
 35491  // MarshalJSON is the custom marshaler for VirtualNetworkGateway.
 35492  func (vng VirtualNetworkGateway) MarshalJSON() ([]byte, error) {
 35493  	objectMap := make(map[string]interface{})
 35494  	if vng.VirtualNetworkGatewayPropertiesFormat != nil {
 35495  		objectMap["properties"] = vng.VirtualNetworkGatewayPropertiesFormat
 35496  	}
 35497  	if vng.ID != nil {
 35498  		objectMap["id"] = vng.ID
 35499  	}
 35500  	if vng.Location != nil {
 35501  		objectMap["location"] = vng.Location
 35502  	}
 35503  	if vng.Tags != nil {
 35504  		objectMap["tags"] = vng.Tags
 35505  	}
 35506  	return json.Marshal(objectMap)
 35507  }
 35508  
 35509  // UnmarshalJSON is the custom unmarshaler for VirtualNetworkGateway struct.
 35510  func (vng *VirtualNetworkGateway) UnmarshalJSON(body []byte) error {
 35511  	var m map[string]*json.RawMessage
 35512  	err := json.Unmarshal(body, &m)
 35513  	if err != nil {
 35514  		return err
 35515  	}
 35516  	for k, v := range m {
 35517  		switch k {
 35518  		case "properties":
 35519  			if v != nil {
 35520  				var virtualNetworkGatewayPropertiesFormat VirtualNetworkGatewayPropertiesFormat
 35521  				err = json.Unmarshal(*v, &virtualNetworkGatewayPropertiesFormat)
 35522  				if err != nil {
 35523  					return err
 35524  				}
 35525  				vng.VirtualNetworkGatewayPropertiesFormat = &virtualNetworkGatewayPropertiesFormat
 35526  			}
 35527  		case "etag":
 35528  			if v != nil {
 35529  				var etag string
 35530  				err = json.Unmarshal(*v, &etag)
 35531  				if err != nil {
 35532  					return err
 35533  				}
 35534  				vng.Etag = &etag
 35535  			}
 35536  		case "id":
 35537  			if v != nil {
 35538  				var ID string
 35539  				err = json.Unmarshal(*v, &ID)
 35540  				if err != nil {
 35541  					return err
 35542  				}
 35543  				vng.ID = &ID
 35544  			}
 35545  		case "name":
 35546  			if v != nil {
 35547  				var name string
 35548  				err = json.Unmarshal(*v, &name)
 35549  				if err != nil {
 35550  					return err
 35551  				}
 35552  				vng.Name = &name
 35553  			}
 35554  		case "type":
 35555  			if v != nil {
 35556  				var typeVar string
 35557  				err = json.Unmarshal(*v, &typeVar)
 35558  				if err != nil {
 35559  					return err
 35560  				}
 35561  				vng.Type = &typeVar
 35562  			}
 35563  		case "location":
 35564  			if v != nil {
 35565  				var location string
 35566  				err = json.Unmarshal(*v, &location)
 35567  				if err != nil {
 35568  					return err
 35569  				}
 35570  				vng.Location = &location
 35571  			}
 35572  		case "tags":
 35573  			if v != nil {
 35574  				var tags map[string]*string
 35575  				err = json.Unmarshal(*v, &tags)
 35576  				if err != nil {
 35577  					return err
 35578  				}
 35579  				vng.Tags = tags
 35580  			}
 35581  		}
 35582  	}
 35583  
 35584  	return nil
 35585  }
 35586  
 35587  // VirtualNetworkGatewayConnection a common class for general resource information.
 35588  type VirtualNetworkGatewayConnection struct {
 35589  	autorest.Response `json:"-"`
 35590  	// VirtualNetworkGatewayConnectionPropertiesFormat - Properties of the virtual network gateway connection.
 35591  	*VirtualNetworkGatewayConnectionPropertiesFormat `json:"properties,omitempty"`
 35592  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 35593  	Etag *string `json:"etag,omitempty"`
 35594  	// ID - Resource ID.
 35595  	ID *string `json:"id,omitempty"`
 35596  	// Name - READ-ONLY; Resource name.
 35597  	Name *string `json:"name,omitempty"`
 35598  	// Type - READ-ONLY; Resource type.
 35599  	Type *string `json:"type,omitempty"`
 35600  	// Location - Resource location.
 35601  	Location *string `json:"location,omitempty"`
 35602  	// Tags - Resource tags.
 35603  	Tags map[string]*string `json:"tags"`
 35604  }
 35605  
 35606  // MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnection.
 35607  func (vngc VirtualNetworkGatewayConnection) MarshalJSON() ([]byte, error) {
 35608  	objectMap := make(map[string]interface{})
 35609  	if vngc.VirtualNetworkGatewayConnectionPropertiesFormat != nil {
 35610  		objectMap["properties"] = vngc.VirtualNetworkGatewayConnectionPropertiesFormat
 35611  	}
 35612  	if vngc.ID != nil {
 35613  		objectMap["id"] = vngc.ID
 35614  	}
 35615  	if vngc.Location != nil {
 35616  		objectMap["location"] = vngc.Location
 35617  	}
 35618  	if vngc.Tags != nil {
 35619  		objectMap["tags"] = vngc.Tags
 35620  	}
 35621  	return json.Marshal(objectMap)
 35622  }
 35623  
 35624  // UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnection struct.
 35625  func (vngc *VirtualNetworkGatewayConnection) UnmarshalJSON(body []byte) error {
 35626  	var m map[string]*json.RawMessage
 35627  	err := json.Unmarshal(body, &m)
 35628  	if err != nil {
 35629  		return err
 35630  	}
 35631  	for k, v := range m {
 35632  		switch k {
 35633  		case "properties":
 35634  			if v != nil {
 35635  				var virtualNetworkGatewayConnectionPropertiesFormat VirtualNetworkGatewayConnectionPropertiesFormat
 35636  				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionPropertiesFormat)
 35637  				if err != nil {
 35638  					return err
 35639  				}
 35640  				vngc.VirtualNetworkGatewayConnectionPropertiesFormat = &virtualNetworkGatewayConnectionPropertiesFormat
 35641  			}
 35642  		case "etag":
 35643  			if v != nil {
 35644  				var etag string
 35645  				err = json.Unmarshal(*v, &etag)
 35646  				if err != nil {
 35647  					return err
 35648  				}
 35649  				vngc.Etag = &etag
 35650  			}
 35651  		case "id":
 35652  			if v != nil {
 35653  				var ID string
 35654  				err = json.Unmarshal(*v, &ID)
 35655  				if err != nil {
 35656  					return err
 35657  				}
 35658  				vngc.ID = &ID
 35659  			}
 35660  		case "name":
 35661  			if v != nil {
 35662  				var name string
 35663  				err = json.Unmarshal(*v, &name)
 35664  				if err != nil {
 35665  					return err
 35666  				}
 35667  				vngc.Name = &name
 35668  			}
 35669  		case "type":
 35670  			if v != nil {
 35671  				var typeVar string
 35672  				err = json.Unmarshal(*v, &typeVar)
 35673  				if err != nil {
 35674  					return err
 35675  				}
 35676  				vngc.Type = &typeVar
 35677  			}
 35678  		case "location":
 35679  			if v != nil {
 35680  				var location string
 35681  				err = json.Unmarshal(*v, &location)
 35682  				if err != nil {
 35683  					return err
 35684  				}
 35685  				vngc.Location = &location
 35686  			}
 35687  		case "tags":
 35688  			if v != nil {
 35689  				var tags map[string]*string
 35690  				err = json.Unmarshal(*v, &tags)
 35691  				if err != nil {
 35692  					return err
 35693  				}
 35694  				vngc.Tags = tags
 35695  			}
 35696  		}
 35697  	}
 35698  
 35699  	return nil
 35700  }
 35701  
 35702  // VirtualNetworkGatewayConnectionListEntity a common class for general resource information.
 35703  type VirtualNetworkGatewayConnectionListEntity struct {
 35704  	// VirtualNetworkGatewayConnectionListEntityPropertiesFormat - Properties of the virtual network gateway connection.
 35705  	*VirtualNetworkGatewayConnectionListEntityPropertiesFormat `json:"properties,omitempty"`
 35706  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 35707  	Etag *string `json:"etag,omitempty"`
 35708  	// ID - Resource ID.
 35709  	ID *string `json:"id,omitempty"`
 35710  	// Name - READ-ONLY; Resource name.
 35711  	Name *string `json:"name,omitempty"`
 35712  	// Type - READ-ONLY; Resource type.
 35713  	Type *string `json:"type,omitempty"`
 35714  	// Location - Resource location.
 35715  	Location *string `json:"location,omitempty"`
 35716  	// Tags - Resource tags.
 35717  	Tags map[string]*string `json:"tags"`
 35718  }
 35719  
 35720  // MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntity.
 35721  func (vngcle VirtualNetworkGatewayConnectionListEntity) MarshalJSON() ([]byte, error) {
 35722  	objectMap := make(map[string]interface{})
 35723  	if vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat != nil {
 35724  		objectMap["properties"] = vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat
 35725  	}
 35726  	if vngcle.ID != nil {
 35727  		objectMap["id"] = vngcle.ID
 35728  	}
 35729  	if vngcle.Location != nil {
 35730  		objectMap["location"] = vngcle.Location
 35731  	}
 35732  	if vngcle.Tags != nil {
 35733  		objectMap["tags"] = vngcle.Tags
 35734  	}
 35735  	return json.Marshal(objectMap)
 35736  }
 35737  
 35738  // UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayConnectionListEntity struct.
 35739  func (vngcle *VirtualNetworkGatewayConnectionListEntity) UnmarshalJSON(body []byte) error {
 35740  	var m map[string]*json.RawMessage
 35741  	err := json.Unmarshal(body, &m)
 35742  	if err != nil {
 35743  		return err
 35744  	}
 35745  	for k, v := range m {
 35746  		switch k {
 35747  		case "properties":
 35748  			if v != nil {
 35749  				var virtualNetworkGatewayConnectionListEntityPropertiesFormat VirtualNetworkGatewayConnectionListEntityPropertiesFormat
 35750  				err = json.Unmarshal(*v, &virtualNetworkGatewayConnectionListEntityPropertiesFormat)
 35751  				if err != nil {
 35752  					return err
 35753  				}
 35754  				vngcle.VirtualNetworkGatewayConnectionListEntityPropertiesFormat = &virtualNetworkGatewayConnectionListEntityPropertiesFormat
 35755  			}
 35756  		case "etag":
 35757  			if v != nil {
 35758  				var etag string
 35759  				err = json.Unmarshal(*v, &etag)
 35760  				if err != nil {
 35761  					return err
 35762  				}
 35763  				vngcle.Etag = &etag
 35764  			}
 35765  		case "id":
 35766  			if v != nil {
 35767  				var ID string
 35768  				err = json.Unmarshal(*v, &ID)
 35769  				if err != nil {
 35770  					return err
 35771  				}
 35772  				vngcle.ID = &ID
 35773  			}
 35774  		case "name":
 35775  			if v != nil {
 35776  				var name string
 35777  				err = json.Unmarshal(*v, &name)
 35778  				if err != nil {
 35779  					return err
 35780  				}
 35781  				vngcle.Name = &name
 35782  			}
 35783  		case "type":
 35784  			if v != nil {
 35785  				var typeVar string
 35786  				err = json.Unmarshal(*v, &typeVar)
 35787  				if err != nil {
 35788  					return err
 35789  				}
 35790  				vngcle.Type = &typeVar
 35791  			}
 35792  		case "location":
 35793  			if v != nil {
 35794  				var location string
 35795  				err = json.Unmarshal(*v, &location)
 35796  				if err != nil {
 35797  					return err
 35798  				}
 35799  				vngcle.Location = &location
 35800  			}
 35801  		case "tags":
 35802  			if v != nil {
 35803  				var tags map[string]*string
 35804  				err = json.Unmarshal(*v, &tags)
 35805  				if err != nil {
 35806  					return err
 35807  				}
 35808  				vngcle.Tags = tags
 35809  			}
 35810  		}
 35811  	}
 35812  
 35813  	return nil
 35814  }
 35815  
 35816  // VirtualNetworkGatewayConnectionListEntityPropertiesFormat virtualNetworkGatewayConnection properties.
 35817  type VirtualNetworkGatewayConnectionListEntityPropertiesFormat struct {
 35818  	// AuthorizationKey - The authorizationKey.
 35819  	AuthorizationKey *string `json:"authorizationKey,omitempty"`
 35820  	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
 35821  	VirtualNetworkGateway1 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway1,omitempty"`
 35822  	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
 35823  	VirtualNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"virtualNetworkGateway2,omitempty"`
 35824  	// LocalNetworkGateway2 - The reference to local network gateway resource.
 35825  	LocalNetworkGateway2 *VirtualNetworkConnectionGatewayReference `json:"localNetworkGateway2,omitempty"`
 35826  	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
 35827  	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
 35828  	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
 35829  	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
 35830  	// RoutingWeight - The routing weight.
 35831  	RoutingWeight *int32 `json:"routingWeight,omitempty"`
 35832  	// SharedKey - The IPSec shared key.
 35833  	SharedKey *string `json:"sharedKey,omitempty"`
 35834  	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
 35835  	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
 35836  	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
 35837  	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
 35838  	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
 35839  	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
 35840  	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
 35841  	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
 35842  	// Peer - The reference to peerings resource.
 35843  	Peer *SubResource `json:"peer,omitempty"`
 35844  	// EnableBgp - EnableBgp flag.
 35845  	EnableBgp *bool `json:"enableBgp,omitempty"`
 35846  	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
 35847  	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
 35848  	// IpsecPolicies - The IPSec Policies to be considered by this connection.
 35849  	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
 35850  	// TrafficSelectorPolicies - The Traffic Selector Policies to be considered by this connection.
 35851  	TrafficSelectorPolicies *[]TrafficSelectorPolicy `json:"trafficSelectorPolicies,omitempty"`
 35852  	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network gateway connection resource.
 35853  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 35854  	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 35855  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 35856  	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
 35857  	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
 35858  }
 35859  
 35860  // MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListEntityPropertiesFormat.
 35861  func (vngclepf VirtualNetworkGatewayConnectionListEntityPropertiesFormat) MarshalJSON() ([]byte, error) {
 35862  	objectMap := make(map[string]interface{})
 35863  	if vngclepf.AuthorizationKey != nil {
 35864  		objectMap["authorizationKey"] = vngclepf.AuthorizationKey
 35865  	}
 35866  	if vngclepf.VirtualNetworkGateway1 != nil {
 35867  		objectMap["virtualNetworkGateway1"] = vngclepf.VirtualNetworkGateway1
 35868  	}
 35869  	if vngclepf.VirtualNetworkGateway2 != nil {
 35870  		objectMap["virtualNetworkGateway2"] = vngclepf.VirtualNetworkGateway2
 35871  	}
 35872  	if vngclepf.LocalNetworkGateway2 != nil {
 35873  		objectMap["localNetworkGateway2"] = vngclepf.LocalNetworkGateway2
 35874  	}
 35875  	if vngclepf.ConnectionType != "" {
 35876  		objectMap["connectionType"] = vngclepf.ConnectionType
 35877  	}
 35878  	if vngclepf.ConnectionProtocol != "" {
 35879  		objectMap["connectionProtocol"] = vngclepf.ConnectionProtocol
 35880  	}
 35881  	if vngclepf.RoutingWeight != nil {
 35882  		objectMap["routingWeight"] = vngclepf.RoutingWeight
 35883  	}
 35884  	if vngclepf.SharedKey != nil {
 35885  		objectMap["sharedKey"] = vngclepf.SharedKey
 35886  	}
 35887  	if vngclepf.Peer != nil {
 35888  		objectMap["peer"] = vngclepf.Peer
 35889  	}
 35890  	if vngclepf.EnableBgp != nil {
 35891  		objectMap["enableBgp"] = vngclepf.EnableBgp
 35892  	}
 35893  	if vngclepf.UsePolicyBasedTrafficSelectors != nil {
 35894  		objectMap["usePolicyBasedTrafficSelectors"] = vngclepf.UsePolicyBasedTrafficSelectors
 35895  	}
 35896  	if vngclepf.IpsecPolicies != nil {
 35897  		objectMap["ipsecPolicies"] = vngclepf.IpsecPolicies
 35898  	}
 35899  	if vngclepf.TrafficSelectorPolicies != nil {
 35900  		objectMap["trafficSelectorPolicies"] = vngclepf.TrafficSelectorPolicies
 35901  	}
 35902  	if vngclepf.ExpressRouteGatewayBypass != nil {
 35903  		objectMap["expressRouteGatewayBypass"] = vngclepf.ExpressRouteGatewayBypass
 35904  	}
 35905  	return json.Marshal(objectMap)
 35906  }
 35907  
 35908  // VirtualNetworkGatewayConnectionListResult response for the ListVirtualNetworkGatewayConnections API
 35909  // service call.
 35910  type VirtualNetworkGatewayConnectionListResult struct {
 35911  	autorest.Response `json:"-"`
 35912  	// Value - A list of VirtualNetworkGatewayConnection resources that exists in a resource group.
 35913  	Value *[]VirtualNetworkGatewayConnection `json:"value,omitempty"`
 35914  	// NextLink - READ-ONLY; The URL to get the next set of results.
 35915  	NextLink *string `json:"nextLink,omitempty"`
 35916  }
 35917  
 35918  // MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionListResult.
 35919  func (vngclr VirtualNetworkGatewayConnectionListResult) MarshalJSON() ([]byte, error) {
 35920  	objectMap := make(map[string]interface{})
 35921  	if vngclr.Value != nil {
 35922  		objectMap["value"] = vngclr.Value
 35923  	}
 35924  	return json.Marshal(objectMap)
 35925  }
 35926  
 35927  // VirtualNetworkGatewayConnectionListResultIterator provides access to a complete listing of
 35928  // VirtualNetworkGatewayConnection values.
 35929  type VirtualNetworkGatewayConnectionListResultIterator struct {
 35930  	i    int
 35931  	page VirtualNetworkGatewayConnectionListResultPage
 35932  }
 35933  
 35934  // NextWithContext advances to the next value.  If there was an error making
 35935  // the request the iterator does not advance and the error is returned.
 35936  func (iter *VirtualNetworkGatewayConnectionListResultIterator) NextWithContext(ctx context.Context) (err error) {
 35937  	if tracing.IsEnabled() {
 35938  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultIterator.NextWithContext")
 35939  		defer func() {
 35940  			sc := -1
 35941  			if iter.Response().Response.Response != nil {
 35942  				sc = iter.Response().Response.Response.StatusCode
 35943  			}
 35944  			tracing.EndSpan(ctx, sc, err)
 35945  		}()
 35946  	}
 35947  	iter.i++
 35948  	if iter.i < len(iter.page.Values()) {
 35949  		return nil
 35950  	}
 35951  	err = iter.page.NextWithContext(ctx)
 35952  	if err != nil {
 35953  		iter.i--
 35954  		return err
 35955  	}
 35956  	iter.i = 0
 35957  	return nil
 35958  }
 35959  
 35960  // Next advances to the next value.  If there was an error making
 35961  // the request the iterator does not advance and the error is returned.
 35962  // Deprecated: Use NextWithContext() instead.
 35963  func (iter *VirtualNetworkGatewayConnectionListResultIterator) Next() error {
 35964  	return iter.NextWithContext(context.Background())
 35965  }
 35966  
 35967  // NotDone returns true if the enumeration should be started or is not yet complete.
 35968  func (iter VirtualNetworkGatewayConnectionListResultIterator) NotDone() bool {
 35969  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 35970  }
 35971  
 35972  // Response returns the raw server response from the last page request.
 35973  func (iter VirtualNetworkGatewayConnectionListResultIterator) Response() VirtualNetworkGatewayConnectionListResult {
 35974  	return iter.page.Response()
 35975  }
 35976  
 35977  // Value returns the current value or a zero-initialized value if the
 35978  // iterator has advanced beyond the end of the collection.
 35979  func (iter VirtualNetworkGatewayConnectionListResultIterator) Value() VirtualNetworkGatewayConnection {
 35980  	if !iter.page.NotDone() {
 35981  		return VirtualNetworkGatewayConnection{}
 35982  	}
 35983  	return iter.page.Values()[iter.i]
 35984  }
 35985  
 35986  // Creates a new instance of the VirtualNetworkGatewayConnectionListResultIterator type.
 35987  func NewVirtualNetworkGatewayConnectionListResultIterator(page VirtualNetworkGatewayConnectionListResultPage) VirtualNetworkGatewayConnectionListResultIterator {
 35988  	return VirtualNetworkGatewayConnectionListResultIterator{page: page}
 35989  }
 35990  
 35991  // IsEmpty returns true if the ListResult contains no values.
 35992  func (vngclr VirtualNetworkGatewayConnectionListResult) IsEmpty() bool {
 35993  	return vngclr.Value == nil || len(*vngclr.Value) == 0
 35994  }
 35995  
 35996  // hasNextLink returns true if the NextLink is not empty.
 35997  func (vngclr VirtualNetworkGatewayConnectionListResult) hasNextLink() bool {
 35998  	return vngclr.NextLink != nil && len(*vngclr.NextLink) != 0
 35999  }
 36000  
 36001  // virtualNetworkGatewayConnectionListResultPreparer prepares a request to retrieve the next set of results.
 36002  // It returns nil if no more results exist.
 36003  func (vngclr VirtualNetworkGatewayConnectionListResult) virtualNetworkGatewayConnectionListResultPreparer(ctx context.Context) (*http.Request, error) {
 36004  	if !vngclr.hasNextLink() {
 36005  		return nil, nil
 36006  	}
 36007  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 36008  		autorest.AsJSON(),
 36009  		autorest.AsGet(),
 36010  		autorest.WithBaseURL(to.String(vngclr.NextLink)))
 36011  }
 36012  
 36013  // VirtualNetworkGatewayConnectionListResultPage contains a page of VirtualNetworkGatewayConnection values.
 36014  type VirtualNetworkGatewayConnectionListResultPage struct {
 36015  	fn     func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)
 36016  	vngclr VirtualNetworkGatewayConnectionListResult
 36017  }
 36018  
 36019  // NextWithContext advances to the next page of values.  If there was an error making
 36020  // the request the page does not advance and the error is returned.
 36021  func (page *VirtualNetworkGatewayConnectionListResultPage) NextWithContext(ctx context.Context) (err error) {
 36022  	if tracing.IsEnabled() {
 36023  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayConnectionListResultPage.NextWithContext")
 36024  		defer func() {
 36025  			sc := -1
 36026  			if page.Response().Response.Response != nil {
 36027  				sc = page.Response().Response.Response.StatusCode
 36028  			}
 36029  			tracing.EndSpan(ctx, sc, err)
 36030  		}()
 36031  	}
 36032  	for {
 36033  		next, err := page.fn(ctx, page.vngclr)
 36034  		if err != nil {
 36035  			return err
 36036  		}
 36037  		page.vngclr = next
 36038  		if !next.hasNextLink() || !next.IsEmpty() {
 36039  			break
 36040  		}
 36041  	}
 36042  	return nil
 36043  }
 36044  
 36045  // Next advances to the next page of values.  If there was an error making
 36046  // the request the page does not advance and the error is returned.
 36047  // Deprecated: Use NextWithContext() instead.
 36048  func (page *VirtualNetworkGatewayConnectionListResultPage) Next() error {
 36049  	return page.NextWithContext(context.Background())
 36050  }
 36051  
 36052  // NotDone returns true if the page enumeration should be started or is not yet complete.
 36053  func (page VirtualNetworkGatewayConnectionListResultPage) NotDone() bool {
 36054  	return !page.vngclr.IsEmpty()
 36055  }
 36056  
 36057  // Response returns the raw server response from the last page request.
 36058  func (page VirtualNetworkGatewayConnectionListResultPage) Response() VirtualNetworkGatewayConnectionListResult {
 36059  	return page.vngclr
 36060  }
 36061  
 36062  // Values returns the slice of values for the current page or nil if there are no values.
 36063  func (page VirtualNetworkGatewayConnectionListResultPage) Values() []VirtualNetworkGatewayConnection {
 36064  	if page.vngclr.IsEmpty() {
 36065  		return nil
 36066  	}
 36067  	return *page.vngclr.Value
 36068  }
 36069  
 36070  // Creates a new instance of the VirtualNetworkGatewayConnectionListResultPage type.
 36071  func NewVirtualNetworkGatewayConnectionListResultPage(cur VirtualNetworkGatewayConnectionListResult, getNextPage func(context.Context, VirtualNetworkGatewayConnectionListResult) (VirtualNetworkGatewayConnectionListResult, error)) VirtualNetworkGatewayConnectionListResultPage {
 36072  	return VirtualNetworkGatewayConnectionListResultPage{
 36073  		fn:     getNextPage,
 36074  		vngclr: cur,
 36075  	}
 36076  }
 36077  
 36078  // VirtualNetworkGatewayConnectionPropertiesFormat virtualNetworkGatewayConnection properties.
 36079  type VirtualNetworkGatewayConnectionPropertiesFormat struct {
 36080  	// AuthorizationKey - The authorizationKey.
 36081  	AuthorizationKey *string `json:"authorizationKey,omitempty"`
 36082  	// VirtualNetworkGateway1 - The reference to virtual network gateway resource.
 36083  	VirtualNetworkGateway1 *VirtualNetworkGateway `json:"virtualNetworkGateway1,omitempty"`
 36084  	// VirtualNetworkGateway2 - The reference to virtual network gateway resource.
 36085  	VirtualNetworkGateway2 *VirtualNetworkGateway `json:"virtualNetworkGateway2,omitempty"`
 36086  	// LocalNetworkGateway2 - The reference to local network gateway resource.
 36087  	LocalNetworkGateway2 *LocalNetworkGateway `json:"localNetworkGateway2,omitempty"`
 36088  	// ConnectionType - Gateway connection type. Possible values include: 'IPsec', 'Vnet2Vnet', 'ExpressRoute', 'VPNClient'
 36089  	ConnectionType VirtualNetworkGatewayConnectionType `json:"connectionType,omitempty"`
 36090  	// ConnectionProtocol - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
 36091  	ConnectionProtocol VirtualNetworkGatewayConnectionProtocol `json:"connectionProtocol,omitempty"`
 36092  	// RoutingWeight - The routing weight.
 36093  	RoutingWeight *int32 `json:"routingWeight,omitempty"`
 36094  	// DpdTimeoutSeconds - The dead peer detection timeout of this connection in seconds.
 36095  	DpdTimeoutSeconds *int32 `json:"dpdTimeoutSeconds,omitempty"`
 36096  	// SharedKey - The IPSec shared key.
 36097  	SharedKey *string `json:"sharedKey,omitempty"`
 36098  	// ConnectionStatus - READ-ONLY; Virtual Network Gateway connection status. Possible values include: 'VirtualNetworkGatewayConnectionStatusUnknown', 'VirtualNetworkGatewayConnectionStatusConnecting', 'VirtualNetworkGatewayConnectionStatusConnected', 'VirtualNetworkGatewayConnectionStatusNotConnected'
 36099  	ConnectionStatus VirtualNetworkGatewayConnectionStatus `json:"connectionStatus,omitempty"`
 36100  	// TunnelConnectionStatus - READ-ONLY; Collection of all tunnels' connection health status.
 36101  	TunnelConnectionStatus *[]TunnelConnectionHealth `json:"tunnelConnectionStatus,omitempty"`
 36102  	// EgressBytesTransferred - READ-ONLY; The egress bytes transferred in this connection.
 36103  	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
 36104  	// IngressBytesTransferred - READ-ONLY; The ingress bytes transferred in this connection.
 36105  	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
 36106  	// Peer - The reference to peerings resource.
 36107  	Peer *SubResource `json:"peer,omitempty"`
 36108  	// EnableBgp - EnableBgp flag.
 36109  	EnableBgp *bool `json:"enableBgp,omitempty"`
 36110  	// UseLocalAzureIPAddress - Use private local Azure IP for the connection.
 36111  	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
 36112  	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
 36113  	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
 36114  	// IpsecPolicies - The IPSec Policies to be considered by this connection.
 36115  	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
 36116  	// TrafficSelectorPolicies - The Traffic Selector Policies to be considered by this connection.
 36117  	TrafficSelectorPolicies *[]TrafficSelectorPolicy `json:"trafficSelectorPolicies,omitempty"`
 36118  	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network gateway connection resource.
 36119  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 36120  	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 36121  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 36122  	// ExpressRouteGatewayBypass - Bypass ExpressRoute Gateway for data forwarding.
 36123  	ExpressRouteGatewayBypass *bool `json:"expressRouteGatewayBypass,omitempty"`
 36124  }
 36125  
 36126  // MarshalJSON is the custom marshaler for VirtualNetworkGatewayConnectionPropertiesFormat.
 36127  func (vngcpf VirtualNetworkGatewayConnectionPropertiesFormat) MarshalJSON() ([]byte, error) {
 36128  	objectMap := make(map[string]interface{})
 36129  	if vngcpf.AuthorizationKey != nil {
 36130  		objectMap["authorizationKey"] = vngcpf.AuthorizationKey
 36131  	}
 36132  	if vngcpf.VirtualNetworkGateway1 != nil {
 36133  		objectMap["virtualNetworkGateway1"] = vngcpf.VirtualNetworkGateway1
 36134  	}
 36135  	if vngcpf.VirtualNetworkGateway2 != nil {
 36136  		objectMap["virtualNetworkGateway2"] = vngcpf.VirtualNetworkGateway2
 36137  	}
 36138  	if vngcpf.LocalNetworkGateway2 != nil {
 36139  		objectMap["localNetworkGateway2"] = vngcpf.LocalNetworkGateway2
 36140  	}
 36141  	if vngcpf.ConnectionType != "" {
 36142  		objectMap["connectionType"] = vngcpf.ConnectionType
 36143  	}
 36144  	if vngcpf.ConnectionProtocol != "" {
 36145  		objectMap["connectionProtocol"] = vngcpf.ConnectionProtocol
 36146  	}
 36147  	if vngcpf.RoutingWeight != nil {
 36148  		objectMap["routingWeight"] = vngcpf.RoutingWeight
 36149  	}
 36150  	if vngcpf.DpdTimeoutSeconds != nil {
 36151  		objectMap["dpdTimeoutSeconds"] = vngcpf.DpdTimeoutSeconds
 36152  	}
 36153  	if vngcpf.SharedKey != nil {
 36154  		objectMap["sharedKey"] = vngcpf.SharedKey
 36155  	}
 36156  	if vngcpf.Peer != nil {
 36157  		objectMap["peer"] = vngcpf.Peer
 36158  	}
 36159  	if vngcpf.EnableBgp != nil {
 36160  		objectMap["enableBgp"] = vngcpf.EnableBgp
 36161  	}
 36162  	if vngcpf.UseLocalAzureIPAddress != nil {
 36163  		objectMap["useLocalAzureIpAddress"] = vngcpf.UseLocalAzureIPAddress
 36164  	}
 36165  	if vngcpf.UsePolicyBasedTrafficSelectors != nil {
 36166  		objectMap["usePolicyBasedTrafficSelectors"] = vngcpf.UsePolicyBasedTrafficSelectors
 36167  	}
 36168  	if vngcpf.IpsecPolicies != nil {
 36169  		objectMap["ipsecPolicies"] = vngcpf.IpsecPolicies
 36170  	}
 36171  	if vngcpf.TrafficSelectorPolicies != nil {
 36172  		objectMap["trafficSelectorPolicies"] = vngcpf.TrafficSelectorPolicies
 36173  	}
 36174  	if vngcpf.ExpressRouteGatewayBypass != nil {
 36175  		objectMap["expressRouteGatewayBypass"] = vngcpf.ExpressRouteGatewayBypass
 36176  	}
 36177  	return json.Marshal(objectMap)
 36178  }
 36179  
 36180  // VirtualNetworkGatewayConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the
 36181  // results of a long-running operation.
 36182  type VirtualNetworkGatewayConnectionsCreateOrUpdateFuture struct {
 36183  	azure.FutureAPI
 36184  	// Result returns the result of the asynchronous operation.
 36185  	// If the operation has not completed it will return an error.
 36186  	Result func(VirtualNetworkGatewayConnectionsClient) (VirtualNetworkGatewayConnection, error)
 36187  }
 36188  
 36189  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 36190  func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 36191  	var azFuture azure.Future
 36192  	if err := json.Unmarshal(body, &azFuture); err != nil {
 36193  		return err
 36194  	}
 36195  	future.FutureAPI = &azFuture
 36196  	future.Result = future.result
 36197  	return nil
 36198  }
 36199  
 36200  // result is the default implementation for VirtualNetworkGatewayConnectionsCreateOrUpdateFuture.Result.
 36201  func (future *VirtualNetworkGatewayConnectionsCreateOrUpdateFuture) result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
 36202  	var done bool
 36203  	done, err = future.DoneWithContext(context.Background(), client)
 36204  	if err != nil {
 36205  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 36206  		return
 36207  	}
 36208  	if !done {
 36209  		vngc.Response.Response = future.Response()
 36210  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture")
 36211  		return
 36212  	}
 36213  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 36214  	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
 36215  		vngc, err = client.CreateOrUpdateResponder(vngc.Response.Response)
 36216  		if err != nil {
 36217  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsCreateOrUpdateFuture", "Result", vngc.Response.Response, "Failure responding to request")
 36218  		}
 36219  	}
 36220  	return
 36221  }
 36222  
 36223  // VirtualNetworkGatewayConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of
 36224  // a long-running operation.
 36225  type VirtualNetworkGatewayConnectionsDeleteFuture struct {
 36226  	azure.FutureAPI
 36227  	// Result returns the result of the asynchronous operation.
 36228  	// If the operation has not completed it will return an error.
 36229  	Result func(VirtualNetworkGatewayConnectionsClient) (autorest.Response, error)
 36230  }
 36231  
 36232  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 36233  func (future *VirtualNetworkGatewayConnectionsDeleteFuture) UnmarshalJSON(body []byte) error {
 36234  	var azFuture azure.Future
 36235  	if err := json.Unmarshal(body, &azFuture); err != nil {
 36236  		return err
 36237  	}
 36238  	future.FutureAPI = &azFuture
 36239  	future.Result = future.result
 36240  	return nil
 36241  }
 36242  
 36243  // result is the default implementation for VirtualNetworkGatewayConnectionsDeleteFuture.Result.
 36244  func (future *VirtualNetworkGatewayConnectionsDeleteFuture) result(client VirtualNetworkGatewayConnectionsClient) (ar autorest.Response, err error) {
 36245  	var done bool
 36246  	done, err = future.DoneWithContext(context.Background(), client)
 36247  	if err != nil {
 36248  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
 36249  		return
 36250  	}
 36251  	if !done {
 36252  		ar.Response = future.Response()
 36253  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsDeleteFuture")
 36254  		return
 36255  	}
 36256  	ar.Response = future.Response()
 36257  	return
 36258  }
 36259  
 36260  // VirtualNetworkGatewayConnectionsResetSharedKeyFuture an abstraction for monitoring and retrieving the
 36261  // results of a long-running operation.
 36262  type VirtualNetworkGatewayConnectionsResetSharedKeyFuture struct {
 36263  	azure.FutureAPI
 36264  	// Result returns the result of the asynchronous operation.
 36265  	// If the operation has not completed it will return an error.
 36266  	Result func(VirtualNetworkGatewayConnectionsClient) (ConnectionResetSharedKey, error)
 36267  }
 36268  
 36269  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 36270  func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) UnmarshalJSON(body []byte) error {
 36271  	var azFuture azure.Future
 36272  	if err := json.Unmarshal(body, &azFuture); err != nil {
 36273  		return err
 36274  	}
 36275  	future.FutureAPI = &azFuture
 36276  	future.Result = future.result
 36277  	return nil
 36278  }
 36279  
 36280  // result is the default implementation for VirtualNetworkGatewayConnectionsResetSharedKeyFuture.Result.
 36281  func (future *VirtualNetworkGatewayConnectionsResetSharedKeyFuture) result(client VirtualNetworkGatewayConnectionsClient) (crsk ConnectionResetSharedKey, err error) {
 36282  	var done bool
 36283  	done, err = future.DoneWithContext(context.Background(), client)
 36284  	if err != nil {
 36285  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", future.Response(), "Polling failure")
 36286  		return
 36287  	}
 36288  	if !done {
 36289  		crsk.Response.Response = future.Response()
 36290  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture")
 36291  		return
 36292  	}
 36293  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 36294  	if crsk.Response.Response, err = future.GetResult(sender); err == nil && crsk.Response.Response.StatusCode != http.StatusNoContent {
 36295  		crsk, err = client.ResetSharedKeyResponder(crsk.Response.Response)
 36296  		if err != nil {
 36297  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsResetSharedKeyFuture", "Result", crsk.Response.Response, "Failure responding to request")
 36298  		}
 36299  	}
 36300  	return
 36301  }
 36302  
 36303  // VirtualNetworkGatewayConnectionsSetSharedKeyFuture an abstraction for monitoring and retrieving the
 36304  // results of a long-running operation.
 36305  type VirtualNetworkGatewayConnectionsSetSharedKeyFuture struct {
 36306  	azure.FutureAPI
 36307  	// Result returns the result of the asynchronous operation.
 36308  	// If the operation has not completed it will return an error.
 36309  	Result func(VirtualNetworkGatewayConnectionsClient) (ConnectionSharedKey, error)
 36310  }
 36311  
 36312  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 36313  func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) UnmarshalJSON(body []byte) error {
 36314  	var azFuture azure.Future
 36315  	if err := json.Unmarshal(body, &azFuture); err != nil {
 36316  		return err
 36317  	}
 36318  	future.FutureAPI = &azFuture
 36319  	future.Result = future.result
 36320  	return nil
 36321  }
 36322  
 36323  // result is the default implementation for VirtualNetworkGatewayConnectionsSetSharedKeyFuture.Result.
 36324  func (future *VirtualNetworkGatewayConnectionsSetSharedKeyFuture) result(client VirtualNetworkGatewayConnectionsClient) (csk ConnectionSharedKey, err error) {
 36325  	var done bool
 36326  	done, err = future.DoneWithContext(context.Background(), client)
 36327  	if err != nil {
 36328  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", future.Response(), "Polling failure")
 36329  		return
 36330  	}
 36331  	if !done {
 36332  		csk.Response.Response = future.Response()
 36333  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture")
 36334  		return
 36335  	}
 36336  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 36337  	if csk.Response.Response, err = future.GetResult(sender); err == nil && csk.Response.Response.StatusCode != http.StatusNoContent {
 36338  		csk, err = client.SetSharedKeyResponder(csk.Response.Response)
 36339  		if err != nil {
 36340  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsSetSharedKeyFuture", "Result", csk.Response.Response, "Failure responding to request")
 36341  		}
 36342  	}
 36343  	return
 36344  }
 36345  
 36346  // VirtualNetworkGatewayConnectionsStartPacketCaptureFuture an abstraction for monitoring and retrieving
 36347  // the results of a long-running operation.
 36348  type VirtualNetworkGatewayConnectionsStartPacketCaptureFuture struct {
 36349  	azure.FutureAPI
 36350  	// Result returns the result of the asynchronous operation.
 36351  	// If the operation has not completed it will return an error.
 36352  	Result func(VirtualNetworkGatewayConnectionsClient) (String, error)
 36353  }
 36354  
 36355  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 36356  func (future *VirtualNetworkGatewayConnectionsStartPacketCaptureFuture) UnmarshalJSON(body []byte) error {
 36357  	var azFuture azure.Future
 36358  	if err := json.Unmarshal(body, &azFuture); err != nil {
 36359  		return err
 36360  	}
 36361  	future.FutureAPI = &azFuture
 36362  	future.Result = future.result
 36363  	return nil
 36364  }
 36365  
 36366  // result is the default implementation for VirtualNetworkGatewayConnectionsStartPacketCaptureFuture.Result.
 36367  func (future *VirtualNetworkGatewayConnectionsStartPacketCaptureFuture) result(client VirtualNetworkGatewayConnectionsClient) (s String, err error) {
 36368  	var done bool
 36369  	done, err = future.DoneWithContext(context.Background(), client)
 36370  	if err != nil {
 36371  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
 36372  		return
 36373  	}
 36374  	if !done {
 36375  		s.Response.Response = future.Response()
 36376  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture")
 36377  		return
 36378  	}
 36379  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 36380  	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
 36381  		s, err = client.StartPacketCaptureResponder(s.Response.Response)
 36382  		if err != nil {
 36383  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
 36384  		}
 36385  	}
 36386  	return
 36387  }
 36388  
 36389  // VirtualNetworkGatewayConnectionsStopPacketCaptureFuture an abstraction for monitoring and retrieving the
 36390  // results of a long-running operation.
 36391  type VirtualNetworkGatewayConnectionsStopPacketCaptureFuture struct {
 36392  	azure.FutureAPI
 36393  	// Result returns the result of the asynchronous operation.
 36394  	// If the operation has not completed it will return an error.
 36395  	Result func(VirtualNetworkGatewayConnectionsClient) (String, error)
 36396  }
 36397  
 36398  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 36399  func (future *VirtualNetworkGatewayConnectionsStopPacketCaptureFuture) UnmarshalJSON(body []byte) error {
 36400  	var azFuture azure.Future
 36401  	if err := json.Unmarshal(body, &azFuture); err != nil {
 36402  		return err
 36403  	}
 36404  	future.FutureAPI = &azFuture
 36405  	future.Result = future.result
 36406  	return nil
 36407  }
 36408  
 36409  // result is the default implementation for VirtualNetworkGatewayConnectionsStopPacketCaptureFuture.Result.
 36410  func (future *VirtualNetworkGatewayConnectionsStopPacketCaptureFuture) result(client VirtualNetworkGatewayConnectionsClient) (s String, err error) {
 36411  	var done bool
 36412  	done, err = future.DoneWithContext(context.Background(), client)
 36413  	if err != nil {
 36414  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
 36415  		return
 36416  	}
 36417  	if !done {
 36418  		s.Response.Response = future.Response()
 36419  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture")
 36420  		return
 36421  	}
 36422  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 36423  	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
 36424  		s, err = client.StopPacketCaptureResponder(s.Response.Response)
 36425  		if err != nil {
 36426  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
 36427  		}
 36428  	}
 36429  	return
 36430  }
 36431  
 36432  // VirtualNetworkGatewayConnectionsUpdateTagsFuture an abstraction for monitoring and retrieving the
 36433  // results of a long-running operation.
 36434  type VirtualNetworkGatewayConnectionsUpdateTagsFuture struct {
 36435  	azure.FutureAPI
 36436  	// Result returns the result of the asynchronous operation.
 36437  	// If the operation has not completed it will return an error.
 36438  	Result func(VirtualNetworkGatewayConnectionsClient) (VirtualNetworkGatewayConnection, error)
 36439  }
 36440  
 36441  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 36442  func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) UnmarshalJSON(body []byte) error {
 36443  	var azFuture azure.Future
 36444  	if err := json.Unmarshal(body, &azFuture); err != nil {
 36445  		return err
 36446  	}
 36447  	future.FutureAPI = &azFuture
 36448  	future.Result = future.result
 36449  	return nil
 36450  }
 36451  
 36452  // result is the default implementation for VirtualNetworkGatewayConnectionsUpdateTagsFuture.Result.
 36453  func (future *VirtualNetworkGatewayConnectionsUpdateTagsFuture) result(client VirtualNetworkGatewayConnectionsClient) (vngc VirtualNetworkGatewayConnection, err error) {
 36454  	var done bool
 36455  	done, err = future.DoneWithContext(context.Background(), client)
 36456  	if err != nil {
 36457  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", future.Response(), "Polling failure")
 36458  		return
 36459  	}
 36460  	if !done {
 36461  		vngc.Response.Response = future.Response()
 36462  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewayConnectionsUpdateTagsFuture")
 36463  		return
 36464  	}
 36465  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 36466  	if vngc.Response.Response, err = future.GetResult(sender); err == nil && vngc.Response.Response.StatusCode != http.StatusNoContent {
 36467  		vngc, err = client.UpdateTagsResponder(vngc.Response.Response)
 36468  		if err != nil {
 36469  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewayConnectionsUpdateTagsFuture", "Result", vngc.Response.Response, "Failure responding to request")
 36470  		}
 36471  	}
 36472  	return
 36473  }
 36474  
 36475  // VirtualNetworkGatewayIPConfiguration IP configuration for virtual network gateway.
 36476  type VirtualNetworkGatewayIPConfiguration struct {
 36477  	// VirtualNetworkGatewayIPConfigurationPropertiesFormat - Properties of the virtual network gateway ip configuration.
 36478  	*VirtualNetworkGatewayIPConfigurationPropertiesFormat `json:"properties,omitempty"`
 36479  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 36480  	Name *string `json:"name,omitempty"`
 36481  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 36482  	Etag *string `json:"etag,omitempty"`
 36483  	// ID - Resource ID.
 36484  	ID *string `json:"id,omitempty"`
 36485  }
 36486  
 36487  // MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfiguration.
 36488  func (vngic VirtualNetworkGatewayIPConfiguration) MarshalJSON() ([]byte, error) {
 36489  	objectMap := make(map[string]interface{})
 36490  	if vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat != nil {
 36491  		objectMap["properties"] = vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat
 36492  	}
 36493  	if vngic.Name != nil {
 36494  		objectMap["name"] = vngic.Name
 36495  	}
 36496  	if vngic.ID != nil {
 36497  		objectMap["id"] = vngic.ID
 36498  	}
 36499  	return json.Marshal(objectMap)
 36500  }
 36501  
 36502  // UnmarshalJSON is the custom unmarshaler for VirtualNetworkGatewayIPConfiguration struct.
 36503  func (vngic *VirtualNetworkGatewayIPConfiguration) UnmarshalJSON(body []byte) error {
 36504  	var m map[string]*json.RawMessage
 36505  	err := json.Unmarshal(body, &m)
 36506  	if err != nil {
 36507  		return err
 36508  	}
 36509  	for k, v := range m {
 36510  		switch k {
 36511  		case "properties":
 36512  			if v != nil {
 36513  				var virtualNetworkGatewayIPConfigurationPropertiesFormat VirtualNetworkGatewayIPConfigurationPropertiesFormat
 36514  				err = json.Unmarshal(*v, &virtualNetworkGatewayIPConfigurationPropertiesFormat)
 36515  				if err != nil {
 36516  					return err
 36517  				}
 36518  				vngic.VirtualNetworkGatewayIPConfigurationPropertiesFormat = &virtualNetworkGatewayIPConfigurationPropertiesFormat
 36519  			}
 36520  		case "name":
 36521  			if v != nil {
 36522  				var name string
 36523  				err = json.Unmarshal(*v, &name)
 36524  				if err != nil {
 36525  					return err
 36526  				}
 36527  				vngic.Name = &name
 36528  			}
 36529  		case "etag":
 36530  			if v != nil {
 36531  				var etag string
 36532  				err = json.Unmarshal(*v, &etag)
 36533  				if err != nil {
 36534  					return err
 36535  				}
 36536  				vngic.Etag = &etag
 36537  			}
 36538  		case "id":
 36539  			if v != nil {
 36540  				var ID string
 36541  				err = json.Unmarshal(*v, &ID)
 36542  				if err != nil {
 36543  					return err
 36544  				}
 36545  				vngic.ID = &ID
 36546  			}
 36547  		}
 36548  	}
 36549  
 36550  	return nil
 36551  }
 36552  
 36553  // VirtualNetworkGatewayIPConfigurationPropertiesFormat properties of VirtualNetworkGatewayIPConfiguration.
 36554  type VirtualNetworkGatewayIPConfigurationPropertiesFormat struct {
 36555  	// PrivateIPAllocationMethod - The private IP address allocation method. Possible values include: 'Static', 'Dynamic'
 36556  	PrivateIPAllocationMethod IPAllocationMethod `json:"privateIPAllocationMethod,omitempty"`
 36557  	// Subnet - The reference to the subnet resource.
 36558  	Subnet *SubResource `json:"subnet,omitempty"`
 36559  	// PublicIPAddress - The reference to the public IP resource.
 36560  	PublicIPAddress *SubResource `json:"publicIPAddress,omitempty"`
 36561  	// PrivateIPAddress - READ-ONLY; Private IP Address for this gateway.
 36562  	PrivateIPAddress *string `json:"privateIPAddress,omitempty"`
 36563  	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway IP configuration resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 36564  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 36565  }
 36566  
 36567  // MarshalJSON is the custom marshaler for VirtualNetworkGatewayIPConfigurationPropertiesFormat.
 36568  func (vngicpf VirtualNetworkGatewayIPConfigurationPropertiesFormat) MarshalJSON() ([]byte, error) {
 36569  	objectMap := make(map[string]interface{})
 36570  	if vngicpf.PrivateIPAllocationMethod != "" {
 36571  		objectMap["privateIPAllocationMethod"] = vngicpf.PrivateIPAllocationMethod
 36572  	}
 36573  	if vngicpf.Subnet != nil {
 36574  		objectMap["subnet"] = vngicpf.Subnet
 36575  	}
 36576  	if vngicpf.PublicIPAddress != nil {
 36577  		objectMap["publicIPAddress"] = vngicpf.PublicIPAddress
 36578  	}
 36579  	return json.Marshal(objectMap)
 36580  }
 36581  
 36582  // VirtualNetworkGatewayListConnectionsResult response for the VirtualNetworkGatewayListConnections API
 36583  // service call.
 36584  type VirtualNetworkGatewayListConnectionsResult struct {
 36585  	autorest.Response `json:"-"`
 36586  	// Value - A list of VirtualNetworkGatewayConnection resources that exists in a resource group.
 36587  	Value *[]VirtualNetworkGatewayConnectionListEntity `json:"value,omitempty"`
 36588  	// NextLink - READ-ONLY; The URL to get the next set of results.
 36589  	NextLink *string `json:"nextLink,omitempty"`
 36590  }
 36591  
 36592  // MarshalJSON is the custom marshaler for VirtualNetworkGatewayListConnectionsResult.
 36593  func (vnglcr VirtualNetworkGatewayListConnectionsResult) MarshalJSON() ([]byte, error) {
 36594  	objectMap := make(map[string]interface{})
 36595  	if vnglcr.Value != nil {
 36596  		objectMap["value"] = vnglcr.Value
 36597  	}
 36598  	return json.Marshal(objectMap)
 36599  }
 36600  
 36601  // VirtualNetworkGatewayListConnectionsResultIterator provides access to a complete listing of
 36602  // VirtualNetworkGatewayConnectionListEntity values.
 36603  type VirtualNetworkGatewayListConnectionsResultIterator struct {
 36604  	i    int
 36605  	page VirtualNetworkGatewayListConnectionsResultPage
 36606  }
 36607  
 36608  // NextWithContext advances to the next value.  If there was an error making
 36609  // the request the iterator does not advance and the error is returned.
 36610  func (iter *VirtualNetworkGatewayListConnectionsResultIterator) NextWithContext(ctx context.Context) (err error) {
 36611  	if tracing.IsEnabled() {
 36612  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultIterator.NextWithContext")
 36613  		defer func() {
 36614  			sc := -1
 36615  			if iter.Response().Response.Response != nil {
 36616  				sc = iter.Response().Response.Response.StatusCode
 36617  			}
 36618  			tracing.EndSpan(ctx, sc, err)
 36619  		}()
 36620  	}
 36621  	iter.i++
 36622  	if iter.i < len(iter.page.Values()) {
 36623  		return nil
 36624  	}
 36625  	err = iter.page.NextWithContext(ctx)
 36626  	if err != nil {
 36627  		iter.i--
 36628  		return err
 36629  	}
 36630  	iter.i = 0
 36631  	return nil
 36632  }
 36633  
 36634  // Next advances to the next value.  If there was an error making
 36635  // the request the iterator does not advance and the error is returned.
 36636  // Deprecated: Use NextWithContext() instead.
 36637  func (iter *VirtualNetworkGatewayListConnectionsResultIterator) Next() error {
 36638  	return iter.NextWithContext(context.Background())
 36639  }
 36640  
 36641  // NotDone returns true if the enumeration should be started or is not yet complete.
 36642  func (iter VirtualNetworkGatewayListConnectionsResultIterator) NotDone() bool {
 36643  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 36644  }
 36645  
 36646  // Response returns the raw server response from the last page request.
 36647  func (iter VirtualNetworkGatewayListConnectionsResultIterator) Response() VirtualNetworkGatewayListConnectionsResult {
 36648  	return iter.page.Response()
 36649  }
 36650  
 36651  // Value returns the current value or a zero-initialized value if the
 36652  // iterator has advanced beyond the end of the collection.
 36653  func (iter VirtualNetworkGatewayListConnectionsResultIterator) Value() VirtualNetworkGatewayConnectionListEntity {
 36654  	if !iter.page.NotDone() {
 36655  		return VirtualNetworkGatewayConnectionListEntity{}
 36656  	}
 36657  	return iter.page.Values()[iter.i]
 36658  }
 36659  
 36660  // Creates a new instance of the VirtualNetworkGatewayListConnectionsResultIterator type.
 36661  func NewVirtualNetworkGatewayListConnectionsResultIterator(page VirtualNetworkGatewayListConnectionsResultPage) VirtualNetworkGatewayListConnectionsResultIterator {
 36662  	return VirtualNetworkGatewayListConnectionsResultIterator{page: page}
 36663  }
 36664  
 36665  // IsEmpty returns true if the ListResult contains no values.
 36666  func (vnglcr VirtualNetworkGatewayListConnectionsResult) IsEmpty() bool {
 36667  	return vnglcr.Value == nil || len(*vnglcr.Value) == 0
 36668  }
 36669  
 36670  // hasNextLink returns true if the NextLink is not empty.
 36671  func (vnglcr VirtualNetworkGatewayListConnectionsResult) hasNextLink() bool {
 36672  	return vnglcr.NextLink != nil && len(*vnglcr.NextLink) != 0
 36673  }
 36674  
 36675  // virtualNetworkGatewayListConnectionsResultPreparer prepares a request to retrieve the next set of results.
 36676  // It returns nil if no more results exist.
 36677  func (vnglcr VirtualNetworkGatewayListConnectionsResult) virtualNetworkGatewayListConnectionsResultPreparer(ctx context.Context) (*http.Request, error) {
 36678  	if !vnglcr.hasNextLink() {
 36679  		return nil, nil
 36680  	}
 36681  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 36682  		autorest.AsJSON(),
 36683  		autorest.AsGet(),
 36684  		autorest.WithBaseURL(to.String(vnglcr.NextLink)))
 36685  }
 36686  
 36687  // VirtualNetworkGatewayListConnectionsResultPage contains a page of
 36688  // VirtualNetworkGatewayConnectionListEntity values.
 36689  type VirtualNetworkGatewayListConnectionsResultPage struct {
 36690  	fn     func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)
 36691  	vnglcr VirtualNetworkGatewayListConnectionsResult
 36692  }
 36693  
 36694  // NextWithContext advances to the next page of values.  If there was an error making
 36695  // the request the page does not advance and the error is returned.
 36696  func (page *VirtualNetworkGatewayListConnectionsResultPage) NextWithContext(ctx context.Context) (err error) {
 36697  	if tracing.IsEnabled() {
 36698  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListConnectionsResultPage.NextWithContext")
 36699  		defer func() {
 36700  			sc := -1
 36701  			if page.Response().Response.Response != nil {
 36702  				sc = page.Response().Response.Response.StatusCode
 36703  			}
 36704  			tracing.EndSpan(ctx, sc, err)
 36705  		}()
 36706  	}
 36707  	for {
 36708  		next, err := page.fn(ctx, page.vnglcr)
 36709  		if err != nil {
 36710  			return err
 36711  		}
 36712  		page.vnglcr = next
 36713  		if !next.hasNextLink() || !next.IsEmpty() {
 36714  			break
 36715  		}
 36716  	}
 36717  	return nil
 36718  }
 36719  
 36720  // Next advances to the next page of values.  If there was an error making
 36721  // the request the page does not advance and the error is returned.
 36722  // Deprecated: Use NextWithContext() instead.
 36723  func (page *VirtualNetworkGatewayListConnectionsResultPage) Next() error {
 36724  	return page.NextWithContext(context.Background())
 36725  }
 36726  
 36727  // NotDone returns true if the page enumeration should be started or is not yet complete.
 36728  func (page VirtualNetworkGatewayListConnectionsResultPage) NotDone() bool {
 36729  	return !page.vnglcr.IsEmpty()
 36730  }
 36731  
 36732  // Response returns the raw server response from the last page request.
 36733  func (page VirtualNetworkGatewayListConnectionsResultPage) Response() VirtualNetworkGatewayListConnectionsResult {
 36734  	return page.vnglcr
 36735  }
 36736  
 36737  // Values returns the slice of values for the current page or nil if there are no values.
 36738  func (page VirtualNetworkGatewayListConnectionsResultPage) Values() []VirtualNetworkGatewayConnectionListEntity {
 36739  	if page.vnglcr.IsEmpty() {
 36740  		return nil
 36741  	}
 36742  	return *page.vnglcr.Value
 36743  }
 36744  
 36745  // Creates a new instance of the VirtualNetworkGatewayListConnectionsResultPage type.
 36746  func NewVirtualNetworkGatewayListConnectionsResultPage(cur VirtualNetworkGatewayListConnectionsResult, getNextPage func(context.Context, VirtualNetworkGatewayListConnectionsResult) (VirtualNetworkGatewayListConnectionsResult, error)) VirtualNetworkGatewayListConnectionsResultPage {
 36747  	return VirtualNetworkGatewayListConnectionsResultPage{
 36748  		fn:     getNextPage,
 36749  		vnglcr: cur,
 36750  	}
 36751  }
 36752  
 36753  // VirtualNetworkGatewayListResult response for the ListVirtualNetworkGateways API service call.
 36754  type VirtualNetworkGatewayListResult struct {
 36755  	autorest.Response `json:"-"`
 36756  	// Value - A list of VirtualNetworkGateway resources that exists in a resource group.
 36757  	Value *[]VirtualNetworkGateway `json:"value,omitempty"`
 36758  	// NextLink - READ-ONLY; The URL to get the next set of results.
 36759  	NextLink *string `json:"nextLink,omitempty"`
 36760  }
 36761  
 36762  // MarshalJSON is the custom marshaler for VirtualNetworkGatewayListResult.
 36763  func (vnglr VirtualNetworkGatewayListResult) MarshalJSON() ([]byte, error) {
 36764  	objectMap := make(map[string]interface{})
 36765  	if vnglr.Value != nil {
 36766  		objectMap["value"] = vnglr.Value
 36767  	}
 36768  	return json.Marshal(objectMap)
 36769  }
 36770  
 36771  // VirtualNetworkGatewayListResultIterator provides access to a complete listing of VirtualNetworkGateway
 36772  // values.
 36773  type VirtualNetworkGatewayListResultIterator struct {
 36774  	i    int
 36775  	page VirtualNetworkGatewayListResultPage
 36776  }
 36777  
 36778  // NextWithContext advances to the next value.  If there was an error making
 36779  // the request the iterator does not advance and the error is returned.
 36780  func (iter *VirtualNetworkGatewayListResultIterator) NextWithContext(ctx context.Context) (err error) {
 36781  	if tracing.IsEnabled() {
 36782  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultIterator.NextWithContext")
 36783  		defer func() {
 36784  			sc := -1
 36785  			if iter.Response().Response.Response != nil {
 36786  				sc = iter.Response().Response.Response.StatusCode
 36787  			}
 36788  			tracing.EndSpan(ctx, sc, err)
 36789  		}()
 36790  	}
 36791  	iter.i++
 36792  	if iter.i < len(iter.page.Values()) {
 36793  		return nil
 36794  	}
 36795  	err = iter.page.NextWithContext(ctx)
 36796  	if err != nil {
 36797  		iter.i--
 36798  		return err
 36799  	}
 36800  	iter.i = 0
 36801  	return nil
 36802  }
 36803  
 36804  // Next advances to the next value.  If there was an error making
 36805  // the request the iterator does not advance and the error is returned.
 36806  // Deprecated: Use NextWithContext() instead.
 36807  func (iter *VirtualNetworkGatewayListResultIterator) Next() error {
 36808  	return iter.NextWithContext(context.Background())
 36809  }
 36810  
 36811  // NotDone returns true if the enumeration should be started or is not yet complete.
 36812  func (iter VirtualNetworkGatewayListResultIterator) NotDone() bool {
 36813  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 36814  }
 36815  
 36816  // Response returns the raw server response from the last page request.
 36817  func (iter VirtualNetworkGatewayListResultIterator) Response() VirtualNetworkGatewayListResult {
 36818  	return iter.page.Response()
 36819  }
 36820  
 36821  // Value returns the current value or a zero-initialized value if the
 36822  // iterator has advanced beyond the end of the collection.
 36823  func (iter VirtualNetworkGatewayListResultIterator) Value() VirtualNetworkGateway {
 36824  	if !iter.page.NotDone() {
 36825  		return VirtualNetworkGateway{}
 36826  	}
 36827  	return iter.page.Values()[iter.i]
 36828  }
 36829  
 36830  // Creates a new instance of the VirtualNetworkGatewayListResultIterator type.
 36831  func NewVirtualNetworkGatewayListResultIterator(page VirtualNetworkGatewayListResultPage) VirtualNetworkGatewayListResultIterator {
 36832  	return VirtualNetworkGatewayListResultIterator{page: page}
 36833  }
 36834  
 36835  // IsEmpty returns true if the ListResult contains no values.
 36836  func (vnglr VirtualNetworkGatewayListResult) IsEmpty() bool {
 36837  	return vnglr.Value == nil || len(*vnglr.Value) == 0
 36838  }
 36839  
 36840  // hasNextLink returns true if the NextLink is not empty.
 36841  func (vnglr VirtualNetworkGatewayListResult) hasNextLink() bool {
 36842  	return vnglr.NextLink != nil && len(*vnglr.NextLink) != 0
 36843  }
 36844  
 36845  // virtualNetworkGatewayListResultPreparer prepares a request to retrieve the next set of results.
 36846  // It returns nil if no more results exist.
 36847  func (vnglr VirtualNetworkGatewayListResult) virtualNetworkGatewayListResultPreparer(ctx context.Context) (*http.Request, error) {
 36848  	if !vnglr.hasNextLink() {
 36849  		return nil, nil
 36850  	}
 36851  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 36852  		autorest.AsJSON(),
 36853  		autorest.AsGet(),
 36854  		autorest.WithBaseURL(to.String(vnglr.NextLink)))
 36855  }
 36856  
 36857  // VirtualNetworkGatewayListResultPage contains a page of VirtualNetworkGateway values.
 36858  type VirtualNetworkGatewayListResultPage struct {
 36859  	fn    func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)
 36860  	vnglr VirtualNetworkGatewayListResult
 36861  }
 36862  
 36863  // NextWithContext advances to the next page of values.  If there was an error making
 36864  // the request the page does not advance and the error is returned.
 36865  func (page *VirtualNetworkGatewayListResultPage) NextWithContext(ctx context.Context) (err error) {
 36866  	if tracing.IsEnabled() {
 36867  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkGatewayListResultPage.NextWithContext")
 36868  		defer func() {
 36869  			sc := -1
 36870  			if page.Response().Response.Response != nil {
 36871  				sc = page.Response().Response.Response.StatusCode
 36872  			}
 36873  			tracing.EndSpan(ctx, sc, err)
 36874  		}()
 36875  	}
 36876  	for {
 36877  		next, err := page.fn(ctx, page.vnglr)
 36878  		if err != nil {
 36879  			return err
 36880  		}
 36881  		page.vnglr = next
 36882  		if !next.hasNextLink() || !next.IsEmpty() {
 36883  			break
 36884  		}
 36885  	}
 36886  	return nil
 36887  }
 36888  
 36889  // Next advances to the next page of values.  If there was an error making
 36890  // the request the page does not advance and the error is returned.
 36891  // Deprecated: Use NextWithContext() instead.
 36892  func (page *VirtualNetworkGatewayListResultPage) Next() error {
 36893  	return page.NextWithContext(context.Background())
 36894  }
 36895  
 36896  // NotDone returns true if the page enumeration should be started or is not yet complete.
 36897  func (page VirtualNetworkGatewayListResultPage) NotDone() bool {
 36898  	return !page.vnglr.IsEmpty()
 36899  }
 36900  
 36901  // Response returns the raw server response from the last page request.
 36902  func (page VirtualNetworkGatewayListResultPage) Response() VirtualNetworkGatewayListResult {
 36903  	return page.vnglr
 36904  }
 36905  
 36906  // Values returns the slice of values for the current page or nil if there are no values.
 36907  func (page VirtualNetworkGatewayListResultPage) Values() []VirtualNetworkGateway {
 36908  	if page.vnglr.IsEmpty() {
 36909  		return nil
 36910  	}
 36911  	return *page.vnglr.Value
 36912  }
 36913  
 36914  // Creates a new instance of the VirtualNetworkGatewayListResultPage type.
 36915  func NewVirtualNetworkGatewayListResultPage(cur VirtualNetworkGatewayListResult, getNextPage func(context.Context, VirtualNetworkGatewayListResult) (VirtualNetworkGatewayListResult, error)) VirtualNetworkGatewayListResultPage {
 36916  	return VirtualNetworkGatewayListResultPage{
 36917  		fn:    getNextPage,
 36918  		vnglr: cur,
 36919  	}
 36920  }
 36921  
 36922  // VirtualNetworkGatewayPropertiesFormat virtualNetworkGateway properties.
 36923  type VirtualNetworkGatewayPropertiesFormat struct {
 36924  	// IPConfigurations - IP configurations for virtual network gateway.
 36925  	IPConfigurations *[]VirtualNetworkGatewayIPConfiguration `json:"ipConfigurations,omitempty"`
 36926  	// GatewayType - The type of this virtual network gateway. Possible values include: 'VirtualNetworkGatewayTypeVpn', 'VirtualNetworkGatewayTypeExpressRoute'
 36927  	GatewayType VirtualNetworkGatewayType `json:"gatewayType,omitempty"`
 36928  	// VpnType - The type of this virtual network gateway. Possible values include: 'PolicyBased', 'RouteBased'
 36929  	VpnType VpnType `json:"vpnType,omitempty"`
 36930  	// VpnGatewayGeneration - The generation for this VirtualNetworkGateway. Must be None if gatewayType is not VPN. Possible values include: 'VpnGatewayGenerationNone', 'VpnGatewayGenerationGeneration1', 'VpnGatewayGenerationGeneration2'
 36931  	VpnGatewayGeneration VpnGatewayGeneration `json:"vpnGatewayGeneration,omitempty"`
 36932  	// EnableBgp - Whether BGP is enabled for this virtual network gateway or not.
 36933  	EnableBgp *bool `json:"enableBgp,omitempty"`
 36934  	// EnablePrivateIPAddress - Whether private IP needs to be enabled on this gateway for connections or not.
 36935  	EnablePrivateIPAddress *bool `json:"enablePrivateIpAddress,omitempty"`
 36936  	// ActiveActive - ActiveActive flag.
 36937  	ActiveActive *bool `json:"activeActive,omitempty"`
 36938  	// GatewayDefaultSite - The reference to the LocalNetworkGateway resource which represents local network site having default routes. Assign Null value in case of removing existing default site setting.
 36939  	GatewayDefaultSite *SubResource `json:"gatewayDefaultSite,omitempty"`
 36940  	// Sku - The reference to the VirtualNetworkGatewaySku resource which represents the SKU selected for Virtual network gateway.
 36941  	Sku *VirtualNetworkGatewaySku `json:"sku,omitempty"`
 36942  	// VpnClientConfiguration - The reference to the VpnClientConfiguration resource which represents the P2S VpnClient configurations.
 36943  	VpnClientConfiguration *VpnClientConfiguration `json:"vpnClientConfiguration,omitempty"`
 36944  	// BgpSettings - Virtual network gateway's BGP speaker settings.
 36945  	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
 36946  	// CustomRoutes - The reference to the address space resource which represents the custom routes address space specified by the customer for virtual network gateway and VpnClient.
 36947  	CustomRoutes *AddressSpace `json:"customRoutes,omitempty"`
 36948  	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network gateway resource.
 36949  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 36950  	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 36951  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 36952  	// EnableDNSForwarding - Whether dns forwarding is enabled or not.
 36953  	EnableDNSForwarding *bool `json:"enableDnsForwarding,omitempty"`
 36954  	// InboundDNSForwardingEndpoint - READ-ONLY; The IP address allocated by the gateway to which dns requests can be sent.
 36955  	InboundDNSForwardingEndpoint *string `json:"inboundDnsForwardingEndpoint,omitempty"`
 36956  }
 36957  
 36958  // MarshalJSON is the custom marshaler for VirtualNetworkGatewayPropertiesFormat.
 36959  func (vngpf VirtualNetworkGatewayPropertiesFormat) MarshalJSON() ([]byte, error) {
 36960  	objectMap := make(map[string]interface{})
 36961  	if vngpf.IPConfigurations != nil {
 36962  		objectMap["ipConfigurations"] = vngpf.IPConfigurations
 36963  	}
 36964  	if vngpf.GatewayType != "" {
 36965  		objectMap["gatewayType"] = vngpf.GatewayType
 36966  	}
 36967  	if vngpf.VpnType != "" {
 36968  		objectMap["vpnType"] = vngpf.VpnType
 36969  	}
 36970  	if vngpf.VpnGatewayGeneration != "" {
 36971  		objectMap["vpnGatewayGeneration"] = vngpf.VpnGatewayGeneration
 36972  	}
 36973  	if vngpf.EnableBgp != nil {
 36974  		objectMap["enableBgp"] = vngpf.EnableBgp
 36975  	}
 36976  	if vngpf.EnablePrivateIPAddress != nil {
 36977  		objectMap["enablePrivateIpAddress"] = vngpf.EnablePrivateIPAddress
 36978  	}
 36979  	if vngpf.ActiveActive != nil {
 36980  		objectMap["activeActive"] = vngpf.ActiveActive
 36981  	}
 36982  	if vngpf.GatewayDefaultSite != nil {
 36983  		objectMap["gatewayDefaultSite"] = vngpf.GatewayDefaultSite
 36984  	}
 36985  	if vngpf.Sku != nil {
 36986  		objectMap["sku"] = vngpf.Sku
 36987  	}
 36988  	if vngpf.VpnClientConfiguration != nil {
 36989  		objectMap["vpnClientConfiguration"] = vngpf.VpnClientConfiguration
 36990  	}
 36991  	if vngpf.BgpSettings != nil {
 36992  		objectMap["bgpSettings"] = vngpf.BgpSettings
 36993  	}
 36994  	if vngpf.CustomRoutes != nil {
 36995  		objectMap["customRoutes"] = vngpf.CustomRoutes
 36996  	}
 36997  	if vngpf.EnableDNSForwarding != nil {
 36998  		objectMap["enableDnsForwarding"] = vngpf.EnableDNSForwarding
 36999  	}
 37000  	return json.Marshal(objectMap)
 37001  }
 37002  
 37003  // VirtualNetworkGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 37004  // long-running operation.
 37005  type VirtualNetworkGatewaysCreateOrUpdateFuture struct {
 37006  	azure.FutureAPI
 37007  	// Result returns the result of the asynchronous operation.
 37008  	// If the operation has not completed it will return an error.
 37009  	Result func(VirtualNetworkGatewaysClient) (VirtualNetworkGateway, error)
 37010  }
 37011  
 37012  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37013  func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 37014  	var azFuture azure.Future
 37015  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37016  		return err
 37017  	}
 37018  	future.FutureAPI = &azFuture
 37019  	future.Result = future.result
 37020  	return nil
 37021  }
 37022  
 37023  // result is the default implementation for VirtualNetworkGatewaysCreateOrUpdateFuture.Result.
 37024  func (future *VirtualNetworkGatewaysCreateOrUpdateFuture) result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
 37025  	var done bool
 37026  	done, err = future.DoneWithContext(context.Background(), client)
 37027  	if err != nil {
 37028  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 37029  		return
 37030  	}
 37031  	if !done {
 37032  		vng.Response.Response = future.Response()
 37033  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysCreateOrUpdateFuture")
 37034  		return
 37035  	}
 37036  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37037  	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
 37038  		vng, err = client.CreateOrUpdateResponder(vng.Response.Response)
 37039  		if err != nil {
 37040  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysCreateOrUpdateFuture", "Result", vng.Response.Response, "Failure responding to request")
 37041  		}
 37042  	}
 37043  	return
 37044  }
 37045  
 37046  // VirtualNetworkGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a
 37047  // long-running operation.
 37048  type VirtualNetworkGatewaysDeleteFuture struct {
 37049  	azure.FutureAPI
 37050  	// Result returns the result of the asynchronous operation.
 37051  	// If the operation has not completed it will return an error.
 37052  	Result func(VirtualNetworkGatewaysClient) (autorest.Response, error)
 37053  }
 37054  
 37055  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37056  func (future *VirtualNetworkGatewaysDeleteFuture) UnmarshalJSON(body []byte) error {
 37057  	var azFuture azure.Future
 37058  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37059  		return err
 37060  	}
 37061  	future.FutureAPI = &azFuture
 37062  	future.Result = future.result
 37063  	return nil
 37064  }
 37065  
 37066  // result is the default implementation for VirtualNetworkGatewaysDeleteFuture.Result.
 37067  func (future *VirtualNetworkGatewaysDeleteFuture) result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
 37068  	var done bool
 37069  	done, err = future.DoneWithContext(context.Background(), client)
 37070  	if err != nil {
 37071  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
 37072  		return
 37073  	}
 37074  	if !done {
 37075  		ar.Response = future.Response()
 37076  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDeleteFuture")
 37077  		return
 37078  	}
 37079  	ar.Response = future.Response()
 37080  	return
 37081  }
 37082  
 37083  // VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture an abstraction for monitoring
 37084  // and retrieving the results of a long-running operation.
 37085  type VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture struct {
 37086  	azure.FutureAPI
 37087  	// Result returns the result of the asynchronous operation.
 37088  	// If the operation has not completed it will return an error.
 37089  	Result func(VirtualNetworkGatewaysClient) (autorest.Response, error)
 37090  }
 37091  
 37092  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37093  func (future *VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture) UnmarshalJSON(body []byte) error {
 37094  	var azFuture azure.Future
 37095  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37096  		return err
 37097  	}
 37098  	future.FutureAPI = &azFuture
 37099  	future.Result = future.result
 37100  	return nil
 37101  }
 37102  
 37103  // result is the default implementation for VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture.Result.
 37104  func (future *VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture) result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
 37105  	var done bool
 37106  	done, err = future.DoneWithContext(context.Background(), client)
 37107  	if err != nil {
 37108  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture", "Result", future.Response(), "Polling failure")
 37109  		return
 37110  	}
 37111  	if !done {
 37112  		ar.Response = future.Response()
 37113  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysDisconnectVirtualNetworkGatewayVpnConnectionsFuture")
 37114  		return
 37115  	}
 37116  	ar.Response = future.Response()
 37117  	return
 37118  }
 37119  
 37120  // VirtualNetworkGatewaysGeneratevpnclientpackageFuture an abstraction for monitoring and retrieving the
 37121  // results of a long-running operation.
 37122  type VirtualNetworkGatewaysGeneratevpnclientpackageFuture struct {
 37123  	azure.FutureAPI
 37124  	// Result returns the result of the asynchronous operation.
 37125  	// If the operation has not completed it will return an error.
 37126  	Result func(VirtualNetworkGatewaysClient) (String, error)
 37127  }
 37128  
 37129  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37130  func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) UnmarshalJSON(body []byte) error {
 37131  	var azFuture azure.Future
 37132  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37133  		return err
 37134  	}
 37135  	future.FutureAPI = &azFuture
 37136  	future.Result = future.result
 37137  	return nil
 37138  }
 37139  
 37140  // result is the default implementation for VirtualNetworkGatewaysGeneratevpnclientpackageFuture.Result.
 37141  func (future *VirtualNetworkGatewaysGeneratevpnclientpackageFuture) result(client VirtualNetworkGatewaysClient) (s String, err error) {
 37142  	var done bool
 37143  	done, err = future.DoneWithContext(context.Background(), client)
 37144  	if err != nil {
 37145  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", future.Response(), "Polling failure")
 37146  		return
 37147  	}
 37148  	if !done {
 37149  		s.Response.Response = future.Response()
 37150  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture")
 37151  		return
 37152  	}
 37153  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37154  	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
 37155  		s, err = client.GeneratevpnclientpackageResponder(s.Response.Response)
 37156  		if err != nil {
 37157  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGeneratevpnclientpackageFuture", "Result", s.Response.Response, "Failure responding to request")
 37158  		}
 37159  	}
 37160  	return
 37161  }
 37162  
 37163  // VirtualNetworkGatewaysGenerateVpnProfileFuture an abstraction for monitoring and retrieving the results
 37164  // of a long-running operation.
 37165  type VirtualNetworkGatewaysGenerateVpnProfileFuture struct {
 37166  	azure.FutureAPI
 37167  	// Result returns the result of the asynchronous operation.
 37168  	// If the operation has not completed it will return an error.
 37169  	Result func(VirtualNetworkGatewaysClient) (String, error)
 37170  }
 37171  
 37172  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37173  func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) UnmarshalJSON(body []byte) error {
 37174  	var azFuture azure.Future
 37175  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37176  		return err
 37177  	}
 37178  	future.FutureAPI = &azFuture
 37179  	future.Result = future.result
 37180  	return nil
 37181  }
 37182  
 37183  // result is the default implementation for VirtualNetworkGatewaysGenerateVpnProfileFuture.Result.
 37184  func (future *VirtualNetworkGatewaysGenerateVpnProfileFuture) result(client VirtualNetworkGatewaysClient) (s String, err error) {
 37185  	var done bool
 37186  	done, err = future.DoneWithContext(context.Background(), client)
 37187  	if err != nil {
 37188  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", future.Response(), "Polling failure")
 37189  		return
 37190  	}
 37191  	if !done {
 37192  		s.Response.Response = future.Response()
 37193  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGenerateVpnProfileFuture")
 37194  		return
 37195  	}
 37196  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37197  	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
 37198  		s, err = client.GenerateVpnProfileResponder(s.Response.Response)
 37199  		if err != nil {
 37200  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGenerateVpnProfileFuture", "Result", s.Response.Response, "Failure responding to request")
 37201  		}
 37202  	}
 37203  	return
 37204  }
 37205  
 37206  // VirtualNetworkGatewaysGetAdvertisedRoutesFuture an abstraction for monitoring and retrieving the results
 37207  // of a long-running operation.
 37208  type VirtualNetworkGatewaysGetAdvertisedRoutesFuture struct {
 37209  	azure.FutureAPI
 37210  	// Result returns the result of the asynchronous operation.
 37211  	// If the operation has not completed it will return an error.
 37212  	Result func(VirtualNetworkGatewaysClient) (GatewayRouteListResult, error)
 37213  }
 37214  
 37215  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37216  func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) UnmarshalJSON(body []byte) error {
 37217  	var azFuture azure.Future
 37218  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37219  		return err
 37220  	}
 37221  	future.FutureAPI = &azFuture
 37222  	future.Result = future.result
 37223  	return nil
 37224  }
 37225  
 37226  // result is the default implementation for VirtualNetworkGatewaysGetAdvertisedRoutesFuture.Result.
 37227  func (future *VirtualNetworkGatewaysGetAdvertisedRoutesFuture) result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
 37228  	var done bool
 37229  	done, err = future.DoneWithContext(context.Background(), client)
 37230  	if err != nil {
 37231  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", future.Response(), "Polling failure")
 37232  		return
 37233  	}
 37234  	if !done {
 37235  		grlr.Response.Response = future.Response()
 37236  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture")
 37237  		return
 37238  	}
 37239  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37240  	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
 37241  		grlr, err = client.GetAdvertisedRoutesResponder(grlr.Response.Response)
 37242  		if err != nil {
 37243  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetAdvertisedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
 37244  		}
 37245  	}
 37246  	return
 37247  }
 37248  
 37249  // VirtualNetworkGatewaysGetBgpPeerStatusFuture an abstraction for monitoring and retrieving the results of
 37250  // a long-running operation.
 37251  type VirtualNetworkGatewaysGetBgpPeerStatusFuture struct {
 37252  	azure.FutureAPI
 37253  	// Result returns the result of the asynchronous operation.
 37254  	// If the operation has not completed it will return an error.
 37255  	Result func(VirtualNetworkGatewaysClient) (BgpPeerStatusListResult, error)
 37256  }
 37257  
 37258  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37259  func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) UnmarshalJSON(body []byte) error {
 37260  	var azFuture azure.Future
 37261  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37262  		return err
 37263  	}
 37264  	future.FutureAPI = &azFuture
 37265  	future.Result = future.result
 37266  	return nil
 37267  }
 37268  
 37269  // result is the default implementation for VirtualNetworkGatewaysGetBgpPeerStatusFuture.Result.
 37270  func (future *VirtualNetworkGatewaysGetBgpPeerStatusFuture) result(client VirtualNetworkGatewaysClient) (bpslr BgpPeerStatusListResult, err error) {
 37271  	var done bool
 37272  	done, err = future.DoneWithContext(context.Background(), client)
 37273  	if err != nil {
 37274  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", future.Response(), "Polling failure")
 37275  		return
 37276  	}
 37277  	if !done {
 37278  		bpslr.Response.Response = future.Response()
 37279  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetBgpPeerStatusFuture")
 37280  		return
 37281  	}
 37282  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37283  	if bpslr.Response.Response, err = future.GetResult(sender); err == nil && bpslr.Response.Response.StatusCode != http.StatusNoContent {
 37284  		bpslr, err = client.GetBgpPeerStatusResponder(bpslr.Response.Response)
 37285  		if err != nil {
 37286  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetBgpPeerStatusFuture", "Result", bpslr.Response.Response, "Failure responding to request")
 37287  		}
 37288  	}
 37289  	return
 37290  }
 37291  
 37292  // VirtualNetworkGatewaysGetLearnedRoutesFuture an abstraction for monitoring and retrieving the results of
 37293  // a long-running operation.
 37294  type VirtualNetworkGatewaysGetLearnedRoutesFuture struct {
 37295  	azure.FutureAPI
 37296  	// Result returns the result of the asynchronous operation.
 37297  	// If the operation has not completed it will return an error.
 37298  	Result func(VirtualNetworkGatewaysClient) (GatewayRouteListResult, error)
 37299  }
 37300  
 37301  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37302  func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) UnmarshalJSON(body []byte) error {
 37303  	var azFuture azure.Future
 37304  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37305  		return err
 37306  	}
 37307  	future.FutureAPI = &azFuture
 37308  	future.Result = future.result
 37309  	return nil
 37310  }
 37311  
 37312  // result is the default implementation for VirtualNetworkGatewaysGetLearnedRoutesFuture.Result.
 37313  func (future *VirtualNetworkGatewaysGetLearnedRoutesFuture) result(client VirtualNetworkGatewaysClient) (grlr GatewayRouteListResult, err error) {
 37314  	var done bool
 37315  	done, err = future.DoneWithContext(context.Background(), client)
 37316  	if err != nil {
 37317  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", future.Response(), "Polling failure")
 37318  		return
 37319  	}
 37320  	if !done {
 37321  		grlr.Response.Response = future.Response()
 37322  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetLearnedRoutesFuture")
 37323  		return
 37324  	}
 37325  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37326  	if grlr.Response.Response, err = future.GetResult(sender); err == nil && grlr.Response.Response.StatusCode != http.StatusNoContent {
 37327  		grlr, err = client.GetLearnedRoutesResponder(grlr.Response.Response)
 37328  		if err != nil {
 37329  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetLearnedRoutesFuture", "Result", grlr.Response.Response, "Failure responding to request")
 37330  		}
 37331  	}
 37332  	return
 37333  }
 37334  
 37335  // VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture an abstraction for monitoring and retrieving
 37336  // the results of a long-running operation.
 37337  type VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture struct {
 37338  	azure.FutureAPI
 37339  	// Result returns the result of the asynchronous operation.
 37340  	// If the operation has not completed it will return an error.
 37341  	Result func(VirtualNetworkGatewaysClient) (VpnClientConnectionHealthDetailListResult, error)
 37342  }
 37343  
 37344  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37345  func (future *VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture) UnmarshalJSON(body []byte) error {
 37346  	var azFuture azure.Future
 37347  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37348  		return err
 37349  	}
 37350  	future.FutureAPI = &azFuture
 37351  	future.Result = future.result
 37352  	return nil
 37353  }
 37354  
 37355  // result is the default implementation for VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture.Result.
 37356  func (future *VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture) result(client VirtualNetworkGatewaysClient) (vcchdlr VpnClientConnectionHealthDetailListResult, err error) {
 37357  	var done bool
 37358  	done, err = future.DoneWithContext(context.Background(), client)
 37359  	if err != nil {
 37360  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", future.Response(), "Polling failure")
 37361  		return
 37362  	}
 37363  	if !done {
 37364  		vcchdlr.Response.Response = future.Response()
 37365  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture")
 37366  		return
 37367  	}
 37368  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37369  	if vcchdlr.Response.Response, err = future.GetResult(sender); err == nil && vcchdlr.Response.Response.StatusCode != http.StatusNoContent {
 37370  		vcchdlr, err = client.GetVpnclientConnectionHealthResponder(vcchdlr.Response.Response)
 37371  		if err != nil {
 37372  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientConnectionHealthFuture", "Result", vcchdlr.Response.Response, "Failure responding to request")
 37373  		}
 37374  	}
 37375  	return
 37376  }
 37377  
 37378  // VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
 37379  // results of a long-running operation.
 37380  type VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture struct {
 37381  	azure.FutureAPI
 37382  	// Result returns the result of the asynchronous operation.
 37383  	// If the operation has not completed it will return an error.
 37384  	Result func(VirtualNetworkGatewaysClient) (VpnClientIPsecParameters, error)
 37385  }
 37386  
 37387  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37388  func (future *VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture) UnmarshalJSON(body []byte) error {
 37389  	var azFuture azure.Future
 37390  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37391  		return err
 37392  	}
 37393  	future.FutureAPI = &azFuture
 37394  	future.Result = future.result
 37395  	return nil
 37396  }
 37397  
 37398  // result is the default implementation for VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture.Result.
 37399  func (future *VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture) result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
 37400  	var done bool
 37401  	done, err = future.DoneWithContext(context.Background(), client)
 37402  	if err != nil {
 37403  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
 37404  		return
 37405  	}
 37406  	if !done {
 37407  		vcipp.Response.Response = future.Response()
 37408  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture")
 37409  		return
 37410  	}
 37411  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37412  	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
 37413  		vcipp, err = client.GetVpnclientIpsecParametersResponder(vcipp.Response.Response)
 37414  		if err != nil {
 37415  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
 37416  		}
 37417  	}
 37418  	return
 37419  }
 37420  
 37421  // VirtualNetworkGatewaysGetVpnProfilePackageURLFuture an abstraction for monitoring and retrieving the
 37422  // results of a long-running operation.
 37423  type VirtualNetworkGatewaysGetVpnProfilePackageURLFuture struct {
 37424  	azure.FutureAPI
 37425  	// Result returns the result of the asynchronous operation.
 37426  	// If the operation has not completed it will return an error.
 37427  	Result func(VirtualNetworkGatewaysClient) (String, error)
 37428  }
 37429  
 37430  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37431  func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) UnmarshalJSON(body []byte) error {
 37432  	var azFuture azure.Future
 37433  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37434  		return err
 37435  	}
 37436  	future.FutureAPI = &azFuture
 37437  	future.Result = future.result
 37438  	return nil
 37439  }
 37440  
 37441  // result is the default implementation for VirtualNetworkGatewaysGetVpnProfilePackageURLFuture.Result.
 37442  func (future *VirtualNetworkGatewaysGetVpnProfilePackageURLFuture) result(client VirtualNetworkGatewaysClient) (s String, err error) {
 37443  	var done bool
 37444  	done, err = future.DoneWithContext(context.Background(), client)
 37445  	if err != nil {
 37446  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", future.Response(), "Polling failure")
 37447  		return
 37448  	}
 37449  	if !done {
 37450  		s.Response.Response = future.Response()
 37451  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture")
 37452  		return
 37453  	}
 37454  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37455  	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
 37456  		s, err = client.GetVpnProfilePackageURLResponder(s.Response.Response)
 37457  		if err != nil {
 37458  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysGetVpnProfilePackageURLFuture", "Result", s.Response.Response, "Failure responding to request")
 37459  		}
 37460  	}
 37461  	return
 37462  }
 37463  
 37464  // VirtualNetworkGatewaySku virtualNetworkGatewaySku details.
 37465  type VirtualNetworkGatewaySku struct {
 37466  	// Name - Gateway SKU name. Possible values include: 'VirtualNetworkGatewaySkuNameBasic', 'VirtualNetworkGatewaySkuNameHighPerformance', 'VirtualNetworkGatewaySkuNameStandard', 'VirtualNetworkGatewaySkuNameUltraPerformance', 'VirtualNetworkGatewaySkuNameVpnGw1', 'VirtualNetworkGatewaySkuNameVpnGw2', 'VirtualNetworkGatewaySkuNameVpnGw3', 'VirtualNetworkGatewaySkuNameVpnGw4', 'VirtualNetworkGatewaySkuNameVpnGw5', 'VirtualNetworkGatewaySkuNameVpnGw1AZ', 'VirtualNetworkGatewaySkuNameVpnGw2AZ', 'VirtualNetworkGatewaySkuNameVpnGw3AZ', 'VirtualNetworkGatewaySkuNameVpnGw4AZ', 'VirtualNetworkGatewaySkuNameVpnGw5AZ', 'VirtualNetworkGatewaySkuNameErGw1AZ', 'VirtualNetworkGatewaySkuNameErGw2AZ', 'VirtualNetworkGatewaySkuNameErGw3AZ'
 37467  	Name VirtualNetworkGatewaySkuName `json:"name,omitempty"`
 37468  	// Tier - Gateway SKU tier. Possible values include: 'VirtualNetworkGatewaySkuTierBasic', 'VirtualNetworkGatewaySkuTierHighPerformance', 'VirtualNetworkGatewaySkuTierStandard', 'VirtualNetworkGatewaySkuTierUltraPerformance', 'VirtualNetworkGatewaySkuTierVpnGw1', 'VirtualNetworkGatewaySkuTierVpnGw2', 'VirtualNetworkGatewaySkuTierVpnGw3', 'VirtualNetworkGatewaySkuTierVpnGw4', 'VirtualNetworkGatewaySkuTierVpnGw5', 'VirtualNetworkGatewaySkuTierVpnGw1AZ', 'VirtualNetworkGatewaySkuTierVpnGw2AZ', 'VirtualNetworkGatewaySkuTierVpnGw3AZ', 'VirtualNetworkGatewaySkuTierVpnGw4AZ', 'VirtualNetworkGatewaySkuTierVpnGw5AZ', 'VirtualNetworkGatewaySkuTierErGw1AZ', 'VirtualNetworkGatewaySkuTierErGw2AZ', 'VirtualNetworkGatewaySkuTierErGw3AZ'
 37469  	Tier VirtualNetworkGatewaySkuTier `json:"tier,omitempty"`
 37470  	// Capacity - READ-ONLY; The capacity.
 37471  	Capacity *int32 `json:"capacity,omitempty"`
 37472  }
 37473  
 37474  // MarshalJSON is the custom marshaler for VirtualNetworkGatewaySku.
 37475  func (vngs VirtualNetworkGatewaySku) MarshalJSON() ([]byte, error) {
 37476  	objectMap := make(map[string]interface{})
 37477  	if vngs.Name != "" {
 37478  		objectMap["name"] = vngs.Name
 37479  	}
 37480  	if vngs.Tier != "" {
 37481  		objectMap["tier"] = vngs.Tier
 37482  	}
 37483  	return json.Marshal(objectMap)
 37484  }
 37485  
 37486  // VirtualNetworkGatewaysResetFuture an abstraction for monitoring and retrieving the results of a
 37487  // long-running operation.
 37488  type VirtualNetworkGatewaysResetFuture struct {
 37489  	azure.FutureAPI
 37490  	// Result returns the result of the asynchronous operation.
 37491  	// If the operation has not completed it will return an error.
 37492  	Result func(VirtualNetworkGatewaysClient) (VirtualNetworkGateway, error)
 37493  }
 37494  
 37495  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37496  func (future *VirtualNetworkGatewaysResetFuture) UnmarshalJSON(body []byte) error {
 37497  	var azFuture azure.Future
 37498  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37499  		return err
 37500  	}
 37501  	future.FutureAPI = &azFuture
 37502  	future.Result = future.result
 37503  	return nil
 37504  }
 37505  
 37506  // result is the default implementation for VirtualNetworkGatewaysResetFuture.Result.
 37507  func (future *VirtualNetworkGatewaysResetFuture) result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
 37508  	var done bool
 37509  	done, err = future.DoneWithContext(context.Background(), client)
 37510  	if err != nil {
 37511  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", future.Response(), "Polling failure")
 37512  		return
 37513  	}
 37514  	if !done {
 37515  		vng.Response.Response = future.Response()
 37516  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetFuture")
 37517  		return
 37518  	}
 37519  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37520  	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
 37521  		vng, err = client.ResetResponder(vng.Response.Response)
 37522  		if err != nil {
 37523  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetFuture", "Result", vng.Response.Response, "Failure responding to request")
 37524  		}
 37525  	}
 37526  	return
 37527  }
 37528  
 37529  // VirtualNetworkGatewaysResetVpnClientSharedKeyFuture an abstraction for monitoring and retrieving the
 37530  // results of a long-running operation.
 37531  type VirtualNetworkGatewaysResetVpnClientSharedKeyFuture struct {
 37532  	azure.FutureAPI
 37533  	// Result returns the result of the asynchronous operation.
 37534  	// If the operation has not completed it will return an error.
 37535  	Result func(VirtualNetworkGatewaysClient) (autorest.Response, error)
 37536  }
 37537  
 37538  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37539  func (future *VirtualNetworkGatewaysResetVpnClientSharedKeyFuture) UnmarshalJSON(body []byte) error {
 37540  	var azFuture azure.Future
 37541  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37542  		return err
 37543  	}
 37544  	future.FutureAPI = &azFuture
 37545  	future.Result = future.result
 37546  	return nil
 37547  }
 37548  
 37549  // result is the default implementation for VirtualNetworkGatewaysResetVpnClientSharedKeyFuture.Result.
 37550  func (future *VirtualNetworkGatewaysResetVpnClientSharedKeyFuture) result(client VirtualNetworkGatewaysClient) (ar autorest.Response, err error) {
 37551  	var done bool
 37552  	done, err = future.DoneWithContext(context.Background(), client)
 37553  	if err != nil {
 37554  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture", "Result", future.Response(), "Polling failure")
 37555  		return
 37556  	}
 37557  	if !done {
 37558  		ar.Response = future.Response()
 37559  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysResetVpnClientSharedKeyFuture")
 37560  		return
 37561  	}
 37562  	ar.Response = future.Response()
 37563  	return
 37564  }
 37565  
 37566  // VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture an abstraction for monitoring and retrieving the
 37567  // results of a long-running operation.
 37568  type VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture struct {
 37569  	azure.FutureAPI
 37570  	// Result returns the result of the asynchronous operation.
 37571  	// If the operation has not completed it will return an error.
 37572  	Result func(VirtualNetworkGatewaysClient) (VpnClientIPsecParameters, error)
 37573  }
 37574  
 37575  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37576  func (future *VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture) UnmarshalJSON(body []byte) error {
 37577  	var azFuture azure.Future
 37578  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37579  		return err
 37580  	}
 37581  	future.FutureAPI = &azFuture
 37582  	future.Result = future.result
 37583  	return nil
 37584  }
 37585  
 37586  // result is the default implementation for VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture.Result.
 37587  func (future *VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture) result(client VirtualNetworkGatewaysClient) (vcipp VpnClientIPsecParameters, err error) {
 37588  	var done bool
 37589  	done, err = future.DoneWithContext(context.Background(), client)
 37590  	if err != nil {
 37591  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", future.Response(), "Polling failure")
 37592  		return
 37593  	}
 37594  	if !done {
 37595  		vcipp.Response.Response = future.Response()
 37596  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture")
 37597  		return
 37598  	}
 37599  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37600  	if vcipp.Response.Response, err = future.GetResult(sender); err == nil && vcipp.Response.Response.StatusCode != http.StatusNoContent {
 37601  		vcipp, err = client.SetVpnclientIpsecParametersResponder(vcipp.Response.Response)
 37602  		if err != nil {
 37603  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysSetVpnclientIpsecParametersFuture", "Result", vcipp.Response.Response, "Failure responding to request")
 37604  		}
 37605  	}
 37606  	return
 37607  }
 37608  
 37609  // VirtualNetworkGatewaysStartPacketCaptureFuture an abstraction for monitoring and retrieving the results
 37610  // of a long-running operation.
 37611  type VirtualNetworkGatewaysStartPacketCaptureFuture struct {
 37612  	azure.FutureAPI
 37613  	// Result returns the result of the asynchronous operation.
 37614  	// If the operation has not completed it will return an error.
 37615  	Result func(VirtualNetworkGatewaysClient) (String, error)
 37616  }
 37617  
 37618  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37619  func (future *VirtualNetworkGatewaysStartPacketCaptureFuture) UnmarshalJSON(body []byte) error {
 37620  	var azFuture azure.Future
 37621  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37622  		return err
 37623  	}
 37624  	future.FutureAPI = &azFuture
 37625  	future.Result = future.result
 37626  	return nil
 37627  }
 37628  
 37629  // result is the default implementation for VirtualNetworkGatewaysStartPacketCaptureFuture.Result.
 37630  func (future *VirtualNetworkGatewaysStartPacketCaptureFuture) result(client VirtualNetworkGatewaysClient) (s String, err error) {
 37631  	var done bool
 37632  	done, err = future.DoneWithContext(context.Background(), client)
 37633  	if err != nil {
 37634  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", future.Response(), "Polling failure")
 37635  		return
 37636  	}
 37637  	if !done {
 37638  		s.Response.Response = future.Response()
 37639  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStartPacketCaptureFuture")
 37640  		return
 37641  	}
 37642  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37643  	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
 37644  		s, err = client.StartPacketCaptureResponder(s.Response.Response)
 37645  		if err != nil {
 37646  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStartPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
 37647  		}
 37648  	}
 37649  	return
 37650  }
 37651  
 37652  // VirtualNetworkGatewaysStopPacketCaptureFuture an abstraction for monitoring and retrieving the results
 37653  // of a long-running operation.
 37654  type VirtualNetworkGatewaysStopPacketCaptureFuture struct {
 37655  	azure.FutureAPI
 37656  	// Result returns the result of the asynchronous operation.
 37657  	// If the operation has not completed it will return an error.
 37658  	Result func(VirtualNetworkGatewaysClient) (String, error)
 37659  }
 37660  
 37661  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37662  func (future *VirtualNetworkGatewaysStopPacketCaptureFuture) UnmarshalJSON(body []byte) error {
 37663  	var azFuture azure.Future
 37664  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37665  		return err
 37666  	}
 37667  	future.FutureAPI = &azFuture
 37668  	future.Result = future.result
 37669  	return nil
 37670  }
 37671  
 37672  // result is the default implementation for VirtualNetworkGatewaysStopPacketCaptureFuture.Result.
 37673  func (future *VirtualNetworkGatewaysStopPacketCaptureFuture) result(client VirtualNetworkGatewaysClient) (s String, err error) {
 37674  	var done bool
 37675  	done, err = future.DoneWithContext(context.Background(), client)
 37676  	if err != nil {
 37677  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", future.Response(), "Polling failure")
 37678  		return
 37679  	}
 37680  	if !done {
 37681  		s.Response.Response = future.Response()
 37682  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysStopPacketCaptureFuture")
 37683  		return
 37684  	}
 37685  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37686  	if s.Response.Response, err = future.GetResult(sender); err == nil && s.Response.Response.StatusCode != http.StatusNoContent {
 37687  		s, err = client.StopPacketCaptureResponder(s.Response.Response)
 37688  		if err != nil {
 37689  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysStopPacketCaptureFuture", "Result", s.Response.Response, "Failure responding to request")
 37690  		}
 37691  	}
 37692  	return
 37693  }
 37694  
 37695  // VirtualNetworkGatewaysUpdateTagsFuture an abstraction for monitoring and retrieving the results of a
 37696  // long-running operation.
 37697  type VirtualNetworkGatewaysUpdateTagsFuture struct {
 37698  	azure.FutureAPI
 37699  	// Result returns the result of the asynchronous operation.
 37700  	// If the operation has not completed it will return an error.
 37701  	Result func(VirtualNetworkGatewaysClient) (VirtualNetworkGateway, error)
 37702  }
 37703  
 37704  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 37705  func (future *VirtualNetworkGatewaysUpdateTagsFuture) UnmarshalJSON(body []byte) error {
 37706  	var azFuture azure.Future
 37707  	if err := json.Unmarshal(body, &azFuture); err != nil {
 37708  		return err
 37709  	}
 37710  	future.FutureAPI = &azFuture
 37711  	future.Result = future.result
 37712  	return nil
 37713  }
 37714  
 37715  // result is the default implementation for VirtualNetworkGatewaysUpdateTagsFuture.Result.
 37716  func (future *VirtualNetworkGatewaysUpdateTagsFuture) result(client VirtualNetworkGatewaysClient) (vng VirtualNetworkGateway, err error) {
 37717  	var done bool
 37718  	done, err = future.DoneWithContext(context.Background(), client)
 37719  	if err != nil {
 37720  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", future.Response(), "Polling failure")
 37721  		return
 37722  	}
 37723  	if !done {
 37724  		vng.Response.Response = future.Response()
 37725  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkGatewaysUpdateTagsFuture")
 37726  		return
 37727  	}
 37728  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 37729  	if vng.Response.Response, err = future.GetResult(sender); err == nil && vng.Response.Response.StatusCode != http.StatusNoContent {
 37730  		vng, err = client.UpdateTagsResponder(vng.Response.Response)
 37731  		if err != nil {
 37732  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkGatewaysUpdateTagsFuture", "Result", vng.Response.Response, "Failure responding to request")
 37733  		}
 37734  	}
 37735  	return
 37736  }
 37737  
 37738  // VirtualNetworkListResult response for the ListVirtualNetworks API service call.
 37739  type VirtualNetworkListResult struct {
 37740  	autorest.Response `json:"-"`
 37741  	// Value - A list of VirtualNetwork resources in a resource group.
 37742  	Value *[]VirtualNetwork `json:"value,omitempty"`
 37743  	// NextLink - The URL to get the next set of results.
 37744  	NextLink *string `json:"nextLink,omitempty"`
 37745  }
 37746  
 37747  // VirtualNetworkListResultIterator provides access to a complete listing of VirtualNetwork values.
 37748  type VirtualNetworkListResultIterator struct {
 37749  	i    int
 37750  	page VirtualNetworkListResultPage
 37751  }
 37752  
 37753  // NextWithContext advances to the next value.  If there was an error making
 37754  // the request the iterator does not advance and the error is returned.
 37755  func (iter *VirtualNetworkListResultIterator) NextWithContext(ctx context.Context) (err error) {
 37756  	if tracing.IsEnabled() {
 37757  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultIterator.NextWithContext")
 37758  		defer func() {
 37759  			sc := -1
 37760  			if iter.Response().Response.Response != nil {
 37761  				sc = iter.Response().Response.Response.StatusCode
 37762  			}
 37763  			tracing.EndSpan(ctx, sc, err)
 37764  		}()
 37765  	}
 37766  	iter.i++
 37767  	if iter.i < len(iter.page.Values()) {
 37768  		return nil
 37769  	}
 37770  	err = iter.page.NextWithContext(ctx)
 37771  	if err != nil {
 37772  		iter.i--
 37773  		return err
 37774  	}
 37775  	iter.i = 0
 37776  	return nil
 37777  }
 37778  
 37779  // Next advances to the next value.  If there was an error making
 37780  // the request the iterator does not advance and the error is returned.
 37781  // Deprecated: Use NextWithContext() instead.
 37782  func (iter *VirtualNetworkListResultIterator) Next() error {
 37783  	return iter.NextWithContext(context.Background())
 37784  }
 37785  
 37786  // NotDone returns true if the enumeration should be started or is not yet complete.
 37787  func (iter VirtualNetworkListResultIterator) NotDone() bool {
 37788  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 37789  }
 37790  
 37791  // Response returns the raw server response from the last page request.
 37792  func (iter VirtualNetworkListResultIterator) Response() VirtualNetworkListResult {
 37793  	return iter.page.Response()
 37794  }
 37795  
 37796  // Value returns the current value or a zero-initialized value if the
 37797  // iterator has advanced beyond the end of the collection.
 37798  func (iter VirtualNetworkListResultIterator) Value() VirtualNetwork {
 37799  	if !iter.page.NotDone() {
 37800  		return VirtualNetwork{}
 37801  	}
 37802  	return iter.page.Values()[iter.i]
 37803  }
 37804  
 37805  // Creates a new instance of the VirtualNetworkListResultIterator type.
 37806  func NewVirtualNetworkListResultIterator(page VirtualNetworkListResultPage) VirtualNetworkListResultIterator {
 37807  	return VirtualNetworkListResultIterator{page: page}
 37808  }
 37809  
 37810  // IsEmpty returns true if the ListResult contains no values.
 37811  func (vnlr VirtualNetworkListResult) IsEmpty() bool {
 37812  	return vnlr.Value == nil || len(*vnlr.Value) == 0
 37813  }
 37814  
 37815  // hasNextLink returns true if the NextLink is not empty.
 37816  func (vnlr VirtualNetworkListResult) hasNextLink() bool {
 37817  	return vnlr.NextLink != nil && len(*vnlr.NextLink) != 0
 37818  }
 37819  
 37820  // virtualNetworkListResultPreparer prepares a request to retrieve the next set of results.
 37821  // It returns nil if no more results exist.
 37822  func (vnlr VirtualNetworkListResult) virtualNetworkListResultPreparer(ctx context.Context) (*http.Request, error) {
 37823  	if !vnlr.hasNextLink() {
 37824  		return nil, nil
 37825  	}
 37826  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 37827  		autorest.AsJSON(),
 37828  		autorest.AsGet(),
 37829  		autorest.WithBaseURL(to.String(vnlr.NextLink)))
 37830  }
 37831  
 37832  // VirtualNetworkListResultPage contains a page of VirtualNetwork values.
 37833  type VirtualNetworkListResultPage struct {
 37834  	fn   func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)
 37835  	vnlr VirtualNetworkListResult
 37836  }
 37837  
 37838  // NextWithContext advances to the next page of values.  If there was an error making
 37839  // the request the page does not advance and the error is returned.
 37840  func (page *VirtualNetworkListResultPage) NextWithContext(ctx context.Context) (err error) {
 37841  	if tracing.IsEnabled() {
 37842  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListResultPage.NextWithContext")
 37843  		defer func() {
 37844  			sc := -1
 37845  			if page.Response().Response.Response != nil {
 37846  				sc = page.Response().Response.Response.StatusCode
 37847  			}
 37848  			tracing.EndSpan(ctx, sc, err)
 37849  		}()
 37850  	}
 37851  	for {
 37852  		next, err := page.fn(ctx, page.vnlr)
 37853  		if err != nil {
 37854  			return err
 37855  		}
 37856  		page.vnlr = next
 37857  		if !next.hasNextLink() || !next.IsEmpty() {
 37858  			break
 37859  		}
 37860  	}
 37861  	return nil
 37862  }
 37863  
 37864  // Next advances to the next page of values.  If there was an error making
 37865  // the request the page does not advance and the error is returned.
 37866  // Deprecated: Use NextWithContext() instead.
 37867  func (page *VirtualNetworkListResultPage) Next() error {
 37868  	return page.NextWithContext(context.Background())
 37869  }
 37870  
 37871  // NotDone returns true if the page enumeration should be started or is not yet complete.
 37872  func (page VirtualNetworkListResultPage) NotDone() bool {
 37873  	return !page.vnlr.IsEmpty()
 37874  }
 37875  
 37876  // Response returns the raw server response from the last page request.
 37877  func (page VirtualNetworkListResultPage) Response() VirtualNetworkListResult {
 37878  	return page.vnlr
 37879  }
 37880  
 37881  // Values returns the slice of values for the current page or nil if there are no values.
 37882  func (page VirtualNetworkListResultPage) Values() []VirtualNetwork {
 37883  	if page.vnlr.IsEmpty() {
 37884  		return nil
 37885  	}
 37886  	return *page.vnlr.Value
 37887  }
 37888  
 37889  // Creates a new instance of the VirtualNetworkListResultPage type.
 37890  func NewVirtualNetworkListResultPage(cur VirtualNetworkListResult, getNextPage func(context.Context, VirtualNetworkListResult) (VirtualNetworkListResult, error)) VirtualNetworkListResultPage {
 37891  	return VirtualNetworkListResultPage{
 37892  		fn:   getNextPage,
 37893  		vnlr: cur,
 37894  	}
 37895  }
 37896  
 37897  // VirtualNetworkListUsageResult response for the virtual networks GetUsage API service call.
 37898  type VirtualNetworkListUsageResult struct {
 37899  	autorest.Response `json:"-"`
 37900  	// Value - READ-ONLY; VirtualNetwork usage stats.
 37901  	Value *[]VirtualNetworkUsage `json:"value,omitempty"`
 37902  	// NextLink - The URL to get the next set of results.
 37903  	NextLink *string `json:"nextLink,omitempty"`
 37904  }
 37905  
 37906  // MarshalJSON is the custom marshaler for VirtualNetworkListUsageResult.
 37907  func (vnlur VirtualNetworkListUsageResult) MarshalJSON() ([]byte, error) {
 37908  	objectMap := make(map[string]interface{})
 37909  	if vnlur.NextLink != nil {
 37910  		objectMap["nextLink"] = vnlur.NextLink
 37911  	}
 37912  	return json.Marshal(objectMap)
 37913  }
 37914  
 37915  // VirtualNetworkListUsageResultIterator provides access to a complete listing of VirtualNetworkUsage
 37916  // values.
 37917  type VirtualNetworkListUsageResultIterator struct {
 37918  	i    int
 37919  	page VirtualNetworkListUsageResultPage
 37920  }
 37921  
 37922  // NextWithContext advances to the next value.  If there was an error making
 37923  // the request the iterator does not advance and the error is returned.
 37924  func (iter *VirtualNetworkListUsageResultIterator) NextWithContext(ctx context.Context) (err error) {
 37925  	if tracing.IsEnabled() {
 37926  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultIterator.NextWithContext")
 37927  		defer func() {
 37928  			sc := -1
 37929  			if iter.Response().Response.Response != nil {
 37930  				sc = iter.Response().Response.Response.StatusCode
 37931  			}
 37932  			tracing.EndSpan(ctx, sc, err)
 37933  		}()
 37934  	}
 37935  	iter.i++
 37936  	if iter.i < len(iter.page.Values()) {
 37937  		return nil
 37938  	}
 37939  	err = iter.page.NextWithContext(ctx)
 37940  	if err != nil {
 37941  		iter.i--
 37942  		return err
 37943  	}
 37944  	iter.i = 0
 37945  	return nil
 37946  }
 37947  
 37948  // Next advances to the next value.  If there was an error making
 37949  // the request the iterator does not advance and the error is returned.
 37950  // Deprecated: Use NextWithContext() instead.
 37951  func (iter *VirtualNetworkListUsageResultIterator) Next() error {
 37952  	return iter.NextWithContext(context.Background())
 37953  }
 37954  
 37955  // NotDone returns true if the enumeration should be started or is not yet complete.
 37956  func (iter VirtualNetworkListUsageResultIterator) NotDone() bool {
 37957  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 37958  }
 37959  
 37960  // Response returns the raw server response from the last page request.
 37961  func (iter VirtualNetworkListUsageResultIterator) Response() VirtualNetworkListUsageResult {
 37962  	return iter.page.Response()
 37963  }
 37964  
 37965  // Value returns the current value or a zero-initialized value if the
 37966  // iterator has advanced beyond the end of the collection.
 37967  func (iter VirtualNetworkListUsageResultIterator) Value() VirtualNetworkUsage {
 37968  	if !iter.page.NotDone() {
 37969  		return VirtualNetworkUsage{}
 37970  	}
 37971  	return iter.page.Values()[iter.i]
 37972  }
 37973  
 37974  // Creates a new instance of the VirtualNetworkListUsageResultIterator type.
 37975  func NewVirtualNetworkListUsageResultIterator(page VirtualNetworkListUsageResultPage) VirtualNetworkListUsageResultIterator {
 37976  	return VirtualNetworkListUsageResultIterator{page: page}
 37977  }
 37978  
 37979  // IsEmpty returns true if the ListResult contains no values.
 37980  func (vnlur VirtualNetworkListUsageResult) IsEmpty() bool {
 37981  	return vnlur.Value == nil || len(*vnlur.Value) == 0
 37982  }
 37983  
 37984  // hasNextLink returns true if the NextLink is not empty.
 37985  func (vnlur VirtualNetworkListUsageResult) hasNextLink() bool {
 37986  	return vnlur.NextLink != nil && len(*vnlur.NextLink) != 0
 37987  }
 37988  
 37989  // virtualNetworkListUsageResultPreparer prepares a request to retrieve the next set of results.
 37990  // It returns nil if no more results exist.
 37991  func (vnlur VirtualNetworkListUsageResult) virtualNetworkListUsageResultPreparer(ctx context.Context) (*http.Request, error) {
 37992  	if !vnlur.hasNextLink() {
 37993  		return nil, nil
 37994  	}
 37995  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 37996  		autorest.AsJSON(),
 37997  		autorest.AsGet(),
 37998  		autorest.WithBaseURL(to.String(vnlur.NextLink)))
 37999  }
 38000  
 38001  // VirtualNetworkListUsageResultPage contains a page of VirtualNetworkUsage values.
 38002  type VirtualNetworkListUsageResultPage struct {
 38003  	fn    func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)
 38004  	vnlur VirtualNetworkListUsageResult
 38005  }
 38006  
 38007  // NextWithContext advances to the next page of values.  If there was an error making
 38008  // the request the page does not advance and the error is returned.
 38009  func (page *VirtualNetworkListUsageResultPage) NextWithContext(ctx context.Context) (err error) {
 38010  	if tracing.IsEnabled() {
 38011  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkListUsageResultPage.NextWithContext")
 38012  		defer func() {
 38013  			sc := -1
 38014  			if page.Response().Response.Response != nil {
 38015  				sc = page.Response().Response.Response.StatusCode
 38016  			}
 38017  			tracing.EndSpan(ctx, sc, err)
 38018  		}()
 38019  	}
 38020  	for {
 38021  		next, err := page.fn(ctx, page.vnlur)
 38022  		if err != nil {
 38023  			return err
 38024  		}
 38025  		page.vnlur = next
 38026  		if !next.hasNextLink() || !next.IsEmpty() {
 38027  			break
 38028  		}
 38029  	}
 38030  	return nil
 38031  }
 38032  
 38033  // Next advances to the next page of values.  If there was an error making
 38034  // the request the page does not advance and the error is returned.
 38035  // Deprecated: Use NextWithContext() instead.
 38036  func (page *VirtualNetworkListUsageResultPage) Next() error {
 38037  	return page.NextWithContext(context.Background())
 38038  }
 38039  
 38040  // NotDone returns true if the page enumeration should be started or is not yet complete.
 38041  func (page VirtualNetworkListUsageResultPage) NotDone() bool {
 38042  	return !page.vnlur.IsEmpty()
 38043  }
 38044  
 38045  // Response returns the raw server response from the last page request.
 38046  func (page VirtualNetworkListUsageResultPage) Response() VirtualNetworkListUsageResult {
 38047  	return page.vnlur
 38048  }
 38049  
 38050  // Values returns the slice of values for the current page or nil if there are no values.
 38051  func (page VirtualNetworkListUsageResultPage) Values() []VirtualNetworkUsage {
 38052  	if page.vnlur.IsEmpty() {
 38053  		return nil
 38054  	}
 38055  	return *page.vnlur.Value
 38056  }
 38057  
 38058  // Creates a new instance of the VirtualNetworkListUsageResultPage type.
 38059  func NewVirtualNetworkListUsageResultPage(cur VirtualNetworkListUsageResult, getNextPage func(context.Context, VirtualNetworkListUsageResult) (VirtualNetworkListUsageResult, error)) VirtualNetworkListUsageResultPage {
 38060  	return VirtualNetworkListUsageResultPage{
 38061  		fn:    getNextPage,
 38062  		vnlur: cur,
 38063  	}
 38064  }
 38065  
 38066  // VirtualNetworkPeering peerings in a virtual network resource.
 38067  type VirtualNetworkPeering struct {
 38068  	autorest.Response `json:"-"`
 38069  	// VirtualNetworkPeeringPropertiesFormat - Properties of the virtual network peering.
 38070  	*VirtualNetworkPeeringPropertiesFormat `json:"properties,omitempty"`
 38071  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 38072  	Name *string `json:"name,omitempty"`
 38073  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 38074  	Etag *string `json:"etag,omitempty"`
 38075  	// ID - Resource ID.
 38076  	ID *string `json:"id,omitempty"`
 38077  }
 38078  
 38079  // MarshalJSON is the custom marshaler for VirtualNetworkPeering.
 38080  func (vnp VirtualNetworkPeering) MarshalJSON() ([]byte, error) {
 38081  	objectMap := make(map[string]interface{})
 38082  	if vnp.VirtualNetworkPeeringPropertiesFormat != nil {
 38083  		objectMap["properties"] = vnp.VirtualNetworkPeeringPropertiesFormat
 38084  	}
 38085  	if vnp.Name != nil {
 38086  		objectMap["name"] = vnp.Name
 38087  	}
 38088  	if vnp.ID != nil {
 38089  		objectMap["id"] = vnp.ID
 38090  	}
 38091  	return json.Marshal(objectMap)
 38092  }
 38093  
 38094  // UnmarshalJSON is the custom unmarshaler for VirtualNetworkPeering struct.
 38095  func (vnp *VirtualNetworkPeering) UnmarshalJSON(body []byte) error {
 38096  	var m map[string]*json.RawMessage
 38097  	err := json.Unmarshal(body, &m)
 38098  	if err != nil {
 38099  		return err
 38100  	}
 38101  	for k, v := range m {
 38102  		switch k {
 38103  		case "properties":
 38104  			if v != nil {
 38105  				var virtualNetworkPeeringPropertiesFormat VirtualNetworkPeeringPropertiesFormat
 38106  				err = json.Unmarshal(*v, &virtualNetworkPeeringPropertiesFormat)
 38107  				if err != nil {
 38108  					return err
 38109  				}
 38110  				vnp.VirtualNetworkPeeringPropertiesFormat = &virtualNetworkPeeringPropertiesFormat
 38111  			}
 38112  		case "name":
 38113  			if v != nil {
 38114  				var name string
 38115  				err = json.Unmarshal(*v, &name)
 38116  				if err != nil {
 38117  					return err
 38118  				}
 38119  				vnp.Name = &name
 38120  			}
 38121  		case "etag":
 38122  			if v != nil {
 38123  				var etag string
 38124  				err = json.Unmarshal(*v, &etag)
 38125  				if err != nil {
 38126  					return err
 38127  				}
 38128  				vnp.Etag = &etag
 38129  			}
 38130  		case "id":
 38131  			if v != nil {
 38132  				var ID string
 38133  				err = json.Unmarshal(*v, &ID)
 38134  				if err != nil {
 38135  					return err
 38136  				}
 38137  				vnp.ID = &ID
 38138  			}
 38139  		}
 38140  	}
 38141  
 38142  	return nil
 38143  }
 38144  
 38145  // VirtualNetworkPeeringListResult response for ListSubnets API service call. Retrieves all subnets that
 38146  // belong to a virtual network.
 38147  type VirtualNetworkPeeringListResult struct {
 38148  	autorest.Response `json:"-"`
 38149  	// Value - The peerings in a virtual network.
 38150  	Value *[]VirtualNetworkPeering `json:"value,omitempty"`
 38151  	// NextLink - The URL to get the next set of results.
 38152  	NextLink *string `json:"nextLink,omitempty"`
 38153  }
 38154  
 38155  // VirtualNetworkPeeringListResultIterator provides access to a complete listing of VirtualNetworkPeering
 38156  // values.
 38157  type VirtualNetworkPeeringListResultIterator struct {
 38158  	i    int
 38159  	page VirtualNetworkPeeringListResultPage
 38160  }
 38161  
 38162  // NextWithContext advances to the next value.  If there was an error making
 38163  // the request the iterator does not advance and the error is returned.
 38164  func (iter *VirtualNetworkPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
 38165  	if tracing.IsEnabled() {
 38166  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultIterator.NextWithContext")
 38167  		defer func() {
 38168  			sc := -1
 38169  			if iter.Response().Response.Response != nil {
 38170  				sc = iter.Response().Response.Response.StatusCode
 38171  			}
 38172  			tracing.EndSpan(ctx, sc, err)
 38173  		}()
 38174  	}
 38175  	iter.i++
 38176  	if iter.i < len(iter.page.Values()) {
 38177  		return nil
 38178  	}
 38179  	err = iter.page.NextWithContext(ctx)
 38180  	if err != nil {
 38181  		iter.i--
 38182  		return err
 38183  	}
 38184  	iter.i = 0
 38185  	return nil
 38186  }
 38187  
 38188  // Next advances to the next value.  If there was an error making
 38189  // the request the iterator does not advance and the error is returned.
 38190  // Deprecated: Use NextWithContext() instead.
 38191  func (iter *VirtualNetworkPeeringListResultIterator) Next() error {
 38192  	return iter.NextWithContext(context.Background())
 38193  }
 38194  
 38195  // NotDone returns true if the enumeration should be started or is not yet complete.
 38196  func (iter VirtualNetworkPeeringListResultIterator) NotDone() bool {
 38197  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 38198  }
 38199  
 38200  // Response returns the raw server response from the last page request.
 38201  func (iter VirtualNetworkPeeringListResultIterator) Response() VirtualNetworkPeeringListResult {
 38202  	return iter.page.Response()
 38203  }
 38204  
 38205  // Value returns the current value or a zero-initialized value if the
 38206  // iterator has advanced beyond the end of the collection.
 38207  func (iter VirtualNetworkPeeringListResultIterator) Value() VirtualNetworkPeering {
 38208  	if !iter.page.NotDone() {
 38209  		return VirtualNetworkPeering{}
 38210  	}
 38211  	return iter.page.Values()[iter.i]
 38212  }
 38213  
 38214  // Creates a new instance of the VirtualNetworkPeeringListResultIterator type.
 38215  func NewVirtualNetworkPeeringListResultIterator(page VirtualNetworkPeeringListResultPage) VirtualNetworkPeeringListResultIterator {
 38216  	return VirtualNetworkPeeringListResultIterator{page: page}
 38217  }
 38218  
 38219  // IsEmpty returns true if the ListResult contains no values.
 38220  func (vnplr VirtualNetworkPeeringListResult) IsEmpty() bool {
 38221  	return vnplr.Value == nil || len(*vnplr.Value) == 0
 38222  }
 38223  
 38224  // hasNextLink returns true if the NextLink is not empty.
 38225  func (vnplr VirtualNetworkPeeringListResult) hasNextLink() bool {
 38226  	return vnplr.NextLink != nil && len(*vnplr.NextLink) != 0
 38227  }
 38228  
 38229  // virtualNetworkPeeringListResultPreparer prepares a request to retrieve the next set of results.
 38230  // It returns nil if no more results exist.
 38231  func (vnplr VirtualNetworkPeeringListResult) virtualNetworkPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
 38232  	if !vnplr.hasNextLink() {
 38233  		return nil, nil
 38234  	}
 38235  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 38236  		autorest.AsJSON(),
 38237  		autorest.AsGet(),
 38238  		autorest.WithBaseURL(to.String(vnplr.NextLink)))
 38239  }
 38240  
 38241  // VirtualNetworkPeeringListResultPage contains a page of VirtualNetworkPeering values.
 38242  type VirtualNetworkPeeringListResultPage struct {
 38243  	fn    func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)
 38244  	vnplr VirtualNetworkPeeringListResult
 38245  }
 38246  
 38247  // NextWithContext advances to the next page of values.  If there was an error making
 38248  // the request the page does not advance and the error is returned.
 38249  func (page *VirtualNetworkPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
 38250  	if tracing.IsEnabled() {
 38251  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkPeeringListResultPage.NextWithContext")
 38252  		defer func() {
 38253  			sc := -1
 38254  			if page.Response().Response.Response != nil {
 38255  				sc = page.Response().Response.Response.StatusCode
 38256  			}
 38257  			tracing.EndSpan(ctx, sc, err)
 38258  		}()
 38259  	}
 38260  	for {
 38261  		next, err := page.fn(ctx, page.vnplr)
 38262  		if err != nil {
 38263  			return err
 38264  		}
 38265  		page.vnplr = next
 38266  		if !next.hasNextLink() || !next.IsEmpty() {
 38267  			break
 38268  		}
 38269  	}
 38270  	return nil
 38271  }
 38272  
 38273  // Next advances to the next page of values.  If there was an error making
 38274  // the request the page does not advance and the error is returned.
 38275  // Deprecated: Use NextWithContext() instead.
 38276  func (page *VirtualNetworkPeeringListResultPage) Next() error {
 38277  	return page.NextWithContext(context.Background())
 38278  }
 38279  
 38280  // NotDone returns true if the page enumeration should be started or is not yet complete.
 38281  func (page VirtualNetworkPeeringListResultPage) NotDone() bool {
 38282  	return !page.vnplr.IsEmpty()
 38283  }
 38284  
 38285  // Response returns the raw server response from the last page request.
 38286  func (page VirtualNetworkPeeringListResultPage) Response() VirtualNetworkPeeringListResult {
 38287  	return page.vnplr
 38288  }
 38289  
 38290  // Values returns the slice of values for the current page or nil if there are no values.
 38291  func (page VirtualNetworkPeeringListResultPage) Values() []VirtualNetworkPeering {
 38292  	if page.vnplr.IsEmpty() {
 38293  		return nil
 38294  	}
 38295  	return *page.vnplr.Value
 38296  }
 38297  
 38298  // Creates a new instance of the VirtualNetworkPeeringListResultPage type.
 38299  func NewVirtualNetworkPeeringListResultPage(cur VirtualNetworkPeeringListResult, getNextPage func(context.Context, VirtualNetworkPeeringListResult) (VirtualNetworkPeeringListResult, error)) VirtualNetworkPeeringListResultPage {
 38300  	return VirtualNetworkPeeringListResultPage{
 38301  		fn:    getNextPage,
 38302  		vnplr: cur,
 38303  	}
 38304  }
 38305  
 38306  // VirtualNetworkPeeringPropertiesFormat properties of the virtual network peering.
 38307  type VirtualNetworkPeeringPropertiesFormat struct {
 38308  	// AllowVirtualNetworkAccess - Whether the VMs in the local virtual network space would be able to access the VMs in remote virtual network space.
 38309  	AllowVirtualNetworkAccess *bool `json:"allowVirtualNetworkAccess,omitempty"`
 38310  	// AllowForwardedTraffic - Whether the forwarded traffic from the VMs in the local virtual network will be allowed/disallowed in remote virtual network.
 38311  	AllowForwardedTraffic *bool `json:"allowForwardedTraffic,omitempty"`
 38312  	// AllowGatewayTransit - If gateway links can be used in remote virtual networking to link to this virtual network.
 38313  	AllowGatewayTransit *bool `json:"allowGatewayTransit,omitempty"`
 38314  	// 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.
 38315  	UseRemoteGateways *bool `json:"useRemoteGateways,omitempty"`
 38316  	// RemoteVirtualNetwork - The reference to the remote virtual network. The remote virtual network can be in the same or different region (preview). See here to register for the preview and learn more (https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-create-peering).
 38317  	RemoteVirtualNetwork *SubResource `json:"remoteVirtualNetwork,omitempty"`
 38318  	// RemoteAddressSpace - The reference to the remote virtual network address space.
 38319  	RemoteAddressSpace *AddressSpace `json:"remoteAddressSpace,omitempty"`
 38320  	// PeeringState - The status of the virtual network peering. Possible values include: 'VirtualNetworkPeeringStateInitiated', 'VirtualNetworkPeeringStateConnected', 'VirtualNetworkPeeringStateDisconnected'
 38321  	PeeringState VirtualNetworkPeeringState `json:"peeringState,omitempty"`
 38322  	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network peering resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 38323  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 38324  }
 38325  
 38326  // MarshalJSON is the custom marshaler for VirtualNetworkPeeringPropertiesFormat.
 38327  func (vnppf VirtualNetworkPeeringPropertiesFormat) MarshalJSON() ([]byte, error) {
 38328  	objectMap := make(map[string]interface{})
 38329  	if vnppf.AllowVirtualNetworkAccess != nil {
 38330  		objectMap["allowVirtualNetworkAccess"] = vnppf.AllowVirtualNetworkAccess
 38331  	}
 38332  	if vnppf.AllowForwardedTraffic != nil {
 38333  		objectMap["allowForwardedTraffic"] = vnppf.AllowForwardedTraffic
 38334  	}
 38335  	if vnppf.AllowGatewayTransit != nil {
 38336  		objectMap["allowGatewayTransit"] = vnppf.AllowGatewayTransit
 38337  	}
 38338  	if vnppf.UseRemoteGateways != nil {
 38339  		objectMap["useRemoteGateways"] = vnppf.UseRemoteGateways
 38340  	}
 38341  	if vnppf.RemoteVirtualNetwork != nil {
 38342  		objectMap["remoteVirtualNetwork"] = vnppf.RemoteVirtualNetwork
 38343  	}
 38344  	if vnppf.RemoteAddressSpace != nil {
 38345  		objectMap["remoteAddressSpace"] = vnppf.RemoteAddressSpace
 38346  	}
 38347  	if vnppf.PeeringState != "" {
 38348  		objectMap["peeringState"] = vnppf.PeeringState
 38349  	}
 38350  	return json.Marshal(objectMap)
 38351  }
 38352  
 38353  // VirtualNetworkPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 38354  // long-running operation.
 38355  type VirtualNetworkPeeringsCreateOrUpdateFuture struct {
 38356  	azure.FutureAPI
 38357  	// Result returns the result of the asynchronous operation.
 38358  	// If the operation has not completed it will return an error.
 38359  	Result func(VirtualNetworkPeeringsClient) (VirtualNetworkPeering, error)
 38360  }
 38361  
 38362  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 38363  func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 38364  	var azFuture azure.Future
 38365  	if err := json.Unmarshal(body, &azFuture); err != nil {
 38366  		return err
 38367  	}
 38368  	future.FutureAPI = &azFuture
 38369  	future.Result = future.result
 38370  	return nil
 38371  }
 38372  
 38373  // result is the default implementation for VirtualNetworkPeeringsCreateOrUpdateFuture.Result.
 38374  func (future *VirtualNetworkPeeringsCreateOrUpdateFuture) result(client VirtualNetworkPeeringsClient) (vnp VirtualNetworkPeering, err error) {
 38375  	var done bool
 38376  	done, err = future.DoneWithContext(context.Background(), client)
 38377  	if err != nil {
 38378  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 38379  		return
 38380  	}
 38381  	if !done {
 38382  		vnp.Response.Response = future.Response()
 38383  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsCreateOrUpdateFuture")
 38384  		return
 38385  	}
 38386  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 38387  	if vnp.Response.Response, err = future.GetResult(sender); err == nil && vnp.Response.Response.StatusCode != http.StatusNoContent {
 38388  		vnp, err = client.CreateOrUpdateResponder(vnp.Response.Response)
 38389  		if err != nil {
 38390  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsCreateOrUpdateFuture", "Result", vnp.Response.Response, "Failure responding to request")
 38391  		}
 38392  	}
 38393  	return
 38394  }
 38395  
 38396  // VirtualNetworkPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
 38397  // long-running operation.
 38398  type VirtualNetworkPeeringsDeleteFuture struct {
 38399  	azure.FutureAPI
 38400  	// Result returns the result of the asynchronous operation.
 38401  	// If the operation has not completed it will return an error.
 38402  	Result func(VirtualNetworkPeeringsClient) (autorest.Response, error)
 38403  }
 38404  
 38405  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 38406  func (future *VirtualNetworkPeeringsDeleteFuture) UnmarshalJSON(body []byte) error {
 38407  	var azFuture azure.Future
 38408  	if err := json.Unmarshal(body, &azFuture); err != nil {
 38409  		return err
 38410  	}
 38411  	future.FutureAPI = &azFuture
 38412  	future.Result = future.result
 38413  	return nil
 38414  }
 38415  
 38416  // result is the default implementation for VirtualNetworkPeeringsDeleteFuture.Result.
 38417  func (future *VirtualNetworkPeeringsDeleteFuture) result(client VirtualNetworkPeeringsClient) (ar autorest.Response, err error) {
 38418  	var done bool
 38419  	done, err = future.DoneWithContext(context.Background(), client)
 38420  	if err != nil {
 38421  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
 38422  		return
 38423  	}
 38424  	if !done {
 38425  		ar.Response = future.Response()
 38426  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkPeeringsDeleteFuture")
 38427  		return
 38428  	}
 38429  	ar.Response = future.Response()
 38430  	return
 38431  }
 38432  
 38433  // VirtualNetworkPropertiesFormat properties of the virtual network.
 38434  type VirtualNetworkPropertiesFormat struct {
 38435  	// AddressSpace - The AddressSpace that contains an array of IP address ranges that can be used by subnets.
 38436  	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
 38437  	// DhcpOptions - The dhcpOptions that contains an array of DNS servers available to VMs deployed in the virtual network.
 38438  	DhcpOptions *DhcpOptions `json:"dhcpOptions,omitempty"`
 38439  	// Subnets - A list of subnets in a Virtual Network.
 38440  	Subnets *[]Subnet `json:"subnets,omitempty"`
 38441  	// VirtualNetworkPeerings - A list of peerings in a Virtual Network.
 38442  	VirtualNetworkPeerings *[]VirtualNetworkPeering `json:"virtualNetworkPeerings,omitempty"`
 38443  	// ResourceGUID - READ-ONLY; The resourceGuid property of the Virtual Network resource.
 38444  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 38445  	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 38446  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 38447  	// EnableDdosProtection - Indicates if DDoS protection is enabled for all the protected resources in the virtual network. It requires a DDoS protection plan associated with the resource.
 38448  	EnableDdosProtection *bool `json:"enableDdosProtection,omitempty"`
 38449  	// EnableVMProtection - Indicates if VM protection is enabled for all the subnets in the virtual network.
 38450  	EnableVMProtection *bool `json:"enableVmProtection,omitempty"`
 38451  	// DdosProtectionPlan - The DDoS protection plan associated with the virtual network.
 38452  	DdosProtectionPlan *SubResource `json:"ddosProtectionPlan,omitempty"`
 38453  	// BgpCommunities - Bgp Communities sent over ExpressRoute with each route corresponding to a prefix in this VNET.
 38454  	BgpCommunities *VirtualNetworkBgpCommunities `json:"bgpCommunities,omitempty"`
 38455  	// IPAllocations - Array of IpAllocation which reference this VNET.
 38456  	IPAllocations *[]SubResource `json:"ipAllocations,omitempty"`
 38457  }
 38458  
 38459  // MarshalJSON is the custom marshaler for VirtualNetworkPropertiesFormat.
 38460  func (vnpf VirtualNetworkPropertiesFormat) MarshalJSON() ([]byte, error) {
 38461  	objectMap := make(map[string]interface{})
 38462  	if vnpf.AddressSpace != nil {
 38463  		objectMap["addressSpace"] = vnpf.AddressSpace
 38464  	}
 38465  	if vnpf.DhcpOptions != nil {
 38466  		objectMap["dhcpOptions"] = vnpf.DhcpOptions
 38467  	}
 38468  	if vnpf.Subnets != nil {
 38469  		objectMap["subnets"] = vnpf.Subnets
 38470  	}
 38471  	if vnpf.VirtualNetworkPeerings != nil {
 38472  		objectMap["virtualNetworkPeerings"] = vnpf.VirtualNetworkPeerings
 38473  	}
 38474  	if vnpf.EnableDdosProtection != nil {
 38475  		objectMap["enableDdosProtection"] = vnpf.EnableDdosProtection
 38476  	}
 38477  	if vnpf.EnableVMProtection != nil {
 38478  		objectMap["enableVmProtection"] = vnpf.EnableVMProtection
 38479  	}
 38480  	if vnpf.DdosProtectionPlan != nil {
 38481  		objectMap["ddosProtectionPlan"] = vnpf.DdosProtectionPlan
 38482  	}
 38483  	if vnpf.BgpCommunities != nil {
 38484  		objectMap["bgpCommunities"] = vnpf.BgpCommunities
 38485  	}
 38486  	if vnpf.IPAllocations != nil {
 38487  		objectMap["ipAllocations"] = vnpf.IPAllocations
 38488  	}
 38489  	return json.Marshal(objectMap)
 38490  }
 38491  
 38492  // VirtualNetworksCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 38493  // long-running operation.
 38494  type VirtualNetworksCreateOrUpdateFuture struct {
 38495  	azure.FutureAPI
 38496  	// Result returns the result of the asynchronous operation.
 38497  	// If the operation has not completed it will return an error.
 38498  	Result func(VirtualNetworksClient) (VirtualNetwork, error)
 38499  }
 38500  
 38501  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 38502  func (future *VirtualNetworksCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 38503  	var azFuture azure.Future
 38504  	if err := json.Unmarshal(body, &azFuture); err != nil {
 38505  		return err
 38506  	}
 38507  	future.FutureAPI = &azFuture
 38508  	future.Result = future.result
 38509  	return nil
 38510  }
 38511  
 38512  // result is the default implementation for VirtualNetworksCreateOrUpdateFuture.Result.
 38513  func (future *VirtualNetworksCreateOrUpdateFuture) result(client VirtualNetworksClient) (vn VirtualNetwork, err error) {
 38514  	var done bool
 38515  	done, err = future.DoneWithContext(context.Background(), client)
 38516  	if err != nil {
 38517  		err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 38518  		return
 38519  	}
 38520  	if !done {
 38521  		vn.Response.Response = future.Response()
 38522  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksCreateOrUpdateFuture")
 38523  		return
 38524  	}
 38525  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 38526  	if vn.Response.Response, err = future.GetResult(sender); err == nil && vn.Response.Response.StatusCode != http.StatusNoContent {
 38527  		vn, err = client.CreateOrUpdateResponder(vn.Response.Response)
 38528  		if err != nil {
 38529  			err = autorest.NewErrorWithError(err, "network.VirtualNetworksCreateOrUpdateFuture", "Result", vn.Response.Response, "Failure responding to request")
 38530  		}
 38531  	}
 38532  	return
 38533  }
 38534  
 38535  // VirtualNetworksDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 38536  // operation.
 38537  type VirtualNetworksDeleteFuture struct {
 38538  	azure.FutureAPI
 38539  	// Result returns the result of the asynchronous operation.
 38540  	// If the operation has not completed it will return an error.
 38541  	Result func(VirtualNetworksClient) (autorest.Response, error)
 38542  }
 38543  
 38544  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 38545  func (future *VirtualNetworksDeleteFuture) UnmarshalJSON(body []byte) error {
 38546  	var azFuture azure.Future
 38547  	if err := json.Unmarshal(body, &azFuture); err != nil {
 38548  		return err
 38549  	}
 38550  	future.FutureAPI = &azFuture
 38551  	future.Result = future.result
 38552  	return nil
 38553  }
 38554  
 38555  // result is the default implementation for VirtualNetworksDeleteFuture.Result.
 38556  func (future *VirtualNetworksDeleteFuture) result(client VirtualNetworksClient) (ar autorest.Response, err error) {
 38557  	var done bool
 38558  	done, err = future.DoneWithContext(context.Background(), client)
 38559  	if err != nil {
 38560  		err = autorest.NewErrorWithError(err, "network.VirtualNetworksDeleteFuture", "Result", future.Response(), "Polling failure")
 38561  		return
 38562  	}
 38563  	if !done {
 38564  		ar.Response = future.Response()
 38565  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworksDeleteFuture")
 38566  		return
 38567  	}
 38568  	ar.Response = future.Response()
 38569  	return
 38570  }
 38571  
 38572  // VirtualNetworkTap virtual Network Tap resource.
 38573  type VirtualNetworkTap struct {
 38574  	autorest.Response `json:"-"`
 38575  	// VirtualNetworkTapPropertiesFormat - Virtual Network Tap Properties.
 38576  	*VirtualNetworkTapPropertiesFormat `json:"properties,omitempty"`
 38577  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 38578  	Etag *string `json:"etag,omitempty"`
 38579  	// ID - Resource ID.
 38580  	ID *string `json:"id,omitempty"`
 38581  	// Name - READ-ONLY; Resource name.
 38582  	Name *string `json:"name,omitempty"`
 38583  	// Type - READ-ONLY; Resource type.
 38584  	Type *string `json:"type,omitempty"`
 38585  	// Location - Resource location.
 38586  	Location *string `json:"location,omitempty"`
 38587  	// Tags - Resource tags.
 38588  	Tags map[string]*string `json:"tags"`
 38589  }
 38590  
 38591  // MarshalJSON is the custom marshaler for VirtualNetworkTap.
 38592  func (vnt VirtualNetworkTap) MarshalJSON() ([]byte, error) {
 38593  	objectMap := make(map[string]interface{})
 38594  	if vnt.VirtualNetworkTapPropertiesFormat != nil {
 38595  		objectMap["properties"] = vnt.VirtualNetworkTapPropertiesFormat
 38596  	}
 38597  	if vnt.ID != nil {
 38598  		objectMap["id"] = vnt.ID
 38599  	}
 38600  	if vnt.Location != nil {
 38601  		objectMap["location"] = vnt.Location
 38602  	}
 38603  	if vnt.Tags != nil {
 38604  		objectMap["tags"] = vnt.Tags
 38605  	}
 38606  	return json.Marshal(objectMap)
 38607  }
 38608  
 38609  // UnmarshalJSON is the custom unmarshaler for VirtualNetworkTap struct.
 38610  func (vnt *VirtualNetworkTap) UnmarshalJSON(body []byte) error {
 38611  	var m map[string]*json.RawMessage
 38612  	err := json.Unmarshal(body, &m)
 38613  	if err != nil {
 38614  		return err
 38615  	}
 38616  	for k, v := range m {
 38617  		switch k {
 38618  		case "properties":
 38619  			if v != nil {
 38620  				var virtualNetworkTapPropertiesFormat VirtualNetworkTapPropertiesFormat
 38621  				err = json.Unmarshal(*v, &virtualNetworkTapPropertiesFormat)
 38622  				if err != nil {
 38623  					return err
 38624  				}
 38625  				vnt.VirtualNetworkTapPropertiesFormat = &virtualNetworkTapPropertiesFormat
 38626  			}
 38627  		case "etag":
 38628  			if v != nil {
 38629  				var etag string
 38630  				err = json.Unmarshal(*v, &etag)
 38631  				if err != nil {
 38632  					return err
 38633  				}
 38634  				vnt.Etag = &etag
 38635  			}
 38636  		case "id":
 38637  			if v != nil {
 38638  				var ID string
 38639  				err = json.Unmarshal(*v, &ID)
 38640  				if err != nil {
 38641  					return err
 38642  				}
 38643  				vnt.ID = &ID
 38644  			}
 38645  		case "name":
 38646  			if v != nil {
 38647  				var name string
 38648  				err = json.Unmarshal(*v, &name)
 38649  				if err != nil {
 38650  					return err
 38651  				}
 38652  				vnt.Name = &name
 38653  			}
 38654  		case "type":
 38655  			if v != nil {
 38656  				var typeVar string
 38657  				err = json.Unmarshal(*v, &typeVar)
 38658  				if err != nil {
 38659  					return err
 38660  				}
 38661  				vnt.Type = &typeVar
 38662  			}
 38663  		case "location":
 38664  			if v != nil {
 38665  				var location string
 38666  				err = json.Unmarshal(*v, &location)
 38667  				if err != nil {
 38668  					return err
 38669  				}
 38670  				vnt.Location = &location
 38671  			}
 38672  		case "tags":
 38673  			if v != nil {
 38674  				var tags map[string]*string
 38675  				err = json.Unmarshal(*v, &tags)
 38676  				if err != nil {
 38677  					return err
 38678  				}
 38679  				vnt.Tags = tags
 38680  			}
 38681  		}
 38682  	}
 38683  
 38684  	return nil
 38685  }
 38686  
 38687  // VirtualNetworkTapListResult response for ListVirtualNetworkTap API service call.
 38688  type VirtualNetworkTapListResult struct {
 38689  	autorest.Response `json:"-"`
 38690  	// Value - A list of VirtualNetworkTaps in a resource group.
 38691  	Value *[]VirtualNetworkTap `json:"value,omitempty"`
 38692  	// NextLink - The URL to get the next set of results.
 38693  	NextLink *string `json:"nextLink,omitempty"`
 38694  }
 38695  
 38696  // VirtualNetworkTapListResultIterator provides access to a complete listing of VirtualNetworkTap values.
 38697  type VirtualNetworkTapListResultIterator struct {
 38698  	i    int
 38699  	page VirtualNetworkTapListResultPage
 38700  }
 38701  
 38702  // NextWithContext advances to the next value.  If there was an error making
 38703  // the request the iterator does not advance and the error is returned.
 38704  func (iter *VirtualNetworkTapListResultIterator) NextWithContext(ctx context.Context) (err error) {
 38705  	if tracing.IsEnabled() {
 38706  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultIterator.NextWithContext")
 38707  		defer func() {
 38708  			sc := -1
 38709  			if iter.Response().Response.Response != nil {
 38710  				sc = iter.Response().Response.Response.StatusCode
 38711  			}
 38712  			tracing.EndSpan(ctx, sc, err)
 38713  		}()
 38714  	}
 38715  	iter.i++
 38716  	if iter.i < len(iter.page.Values()) {
 38717  		return nil
 38718  	}
 38719  	err = iter.page.NextWithContext(ctx)
 38720  	if err != nil {
 38721  		iter.i--
 38722  		return err
 38723  	}
 38724  	iter.i = 0
 38725  	return nil
 38726  }
 38727  
 38728  // Next advances to the next value.  If there was an error making
 38729  // the request the iterator does not advance and the error is returned.
 38730  // Deprecated: Use NextWithContext() instead.
 38731  func (iter *VirtualNetworkTapListResultIterator) Next() error {
 38732  	return iter.NextWithContext(context.Background())
 38733  }
 38734  
 38735  // NotDone returns true if the enumeration should be started or is not yet complete.
 38736  func (iter VirtualNetworkTapListResultIterator) NotDone() bool {
 38737  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 38738  }
 38739  
 38740  // Response returns the raw server response from the last page request.
 38741  func (iter VirtualNetworkTapListResultIterator) Response() VirtualNetworkTapListResult {
 38742  	return iter.page.Response()
 38743  }
 38744  
 38745  // Value returns the current value or a zero-initialized value if the
 38746  // iterator has advanced beyond the end of the collection.
 38747  func (iter VirtualNetworkTapListResultIterator) Value() VirtualNetworkTap {
 38748  	if !iter.page.NotDone() {
 38749  		return VirtualNetworkTap{}
 38750  	}
 38751  	return iter.page.Values()[iter.i]
 38752  }
 38753  
 38754  // Creates a new instance of the VirtualNetworkTapListResultIterator type.
 38755  func NewVirtualNetworkTapListResultIterator(page VirtualNetworkTapListResultPage) VirtualNetworkTapListResultIterator {
 38756  	return VirtualNetworkTapListResultIterator{page: page}
 38757  }
 38758  
 38759  // IsEmpty returns true if the ListResult contains no values.
 38760  func (vntlr VirtualNetworkTapListResult) IsEmpty() bool {
 38761  	return vntlr.Value == nil || len(*vntlr.Value) == 0
 38762  }
 38763  
 38764  // hasNextLink returns true if the NextLink is not empty.
 38765  func (vntlr VirtualNetworkTapListResult) hasNextLink() bool {
 38766  	return vntlr.NextLink != nil && len(*vntlr.NextLink) != 0
 38767  }
 38768  
 38769  // virtualNetworkTapListResultPreparer prepares a request to retrieve the next set of results.
 38770  // It returns nil if no more results exist.
 38771  func (vntlr VirtualNetworkTapListResult) virtualNetworkTapListResultPreparer(ctx context.Context) (*http.Request, error) {
 38772  	if !vntlr.hasNextLink() {
 38773  		return nil, nil
 38774  	}
 38775  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 38776  		autorest.AsJSON(),
 38777  		autorest.AsGet(),
 38778  		autorest.WithBaseURL(to.String(vntlr.NextLink)))
 38779  }
 38780  
 38781  // VirtualNetworkTapListResultPage contains a page of VirtualNetworkTap values.
 38782  type VirtualNetworkTapListResultPage struct {
 38783  	fn    func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)
 38784  	vntlr VirtualNetworkTapListResult
 38785  }
 38786  
 38787  // NextWithContext advances to the next page of values.  If there was an error making
 38788  // the request the page does not advance and the error is returned.
 38789  func (page *VirtualNetworkTapListResultPage) NextWithContext(ctx context.Context) (err error) {
 38790  	if tracing.IsEnabled() {
 38791  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualNetworkTapListResultPage.NextWithContext")
 38792  		defer func() {
 38793  			sc := -1
 38794  			if page.Response().Response.Response != nil {
 38795  				sc = page.Response().Response.Response.StatusCode
 38796  			}
 38797  			tracing.EndSpan(ctx, sc, err)
 38798  		}()
 38799  	}
 38800  	for {
 38801  		next, err := page.fn(ctx, page.vntlr)
 38802  		if err != nil {
 38803  			return err
 38804  		}
 38805  		page.vntlr = next
 38806  		if !next.hasNextLink() || !next.IsEmpty() {
 38807  			break
 38808  		}
 38809  	}
 38810  	return nil
 38811  }
 38812  
 38813  // Next advances to the next page of values.  If there was an error making
 38814  // the request the page does not advance and the error is returned.
 38815  // Deprecated: Use NextWithContext() instead.
 38816  func (page *VirtualNetworkTapListResultPage) Next() error {
 38817  	return page.NextWithContext(context.Background())
 38818  }
 38819  
 38820  // NotDone returns true if the page enumeration should be started or is not yet complete.
 38821  func (page VirtualNetworkTapListResultPage) NotDone() bool {
 38822  	return !page.vntlr.IsEmpty()
 38823  }
 38824  
 38825  // Response returns the raw server response from the last page request.
 38826  func (page VirtualNetworkTapListResultPage) Response() VirtualNetworkTapListResult {
 38827  	return page.vntlr
 38828  }
 38829  
 38830  // Values returns the slice of values for the current page or nil if there are no values.
 38831  func (page VirtualNetworkTapListResultPage) Values() []VirtualNetworkTap {
 38832  	if page.vntlr.IsEmpty() {
 38833  		return nil
 38834  	}
 38835  	return *page.vntlr.Value
 38836  }
 38837  
 38838  // Creates a new instance of the VirtualNetworkTapListResultPage type.
 38839  func NewVirtualNetworkTapListResultPage(cur VirtualNetworkTapListResult, getNextPage func(context.Context, VirtualNetworkTapListResult) (VirtualNetworkTapListResult, error)) VirtualNetworkTapListResultPage {
 38840  	return VirtualNetworkTapListResultPage{
 38841  		fn:    getNextPage,
 38842  		vntlr: cur,
 38843  	}
 38844  }
 38845  
 38846  // VirtualNetworkTapPropertiesFormat virtual Network Tap properties.
 38847  type VirtualNetworkTapPropertiesFormat struct {
 38848  	// NetworkInterfaceTapConfigurations - READ-ONLY; Specifies the list of resource IDs for the network interface IP configuration that needs to be tapped.
 38849  	NetworkInterfaceTapConfigurations *[]InterfaceTapConfiguration `json:"networkInterfaceTapConfigurations,omitempty"`
 38850  	// ResourceGUID - READ-ONLY; The resource GUID property of the virtual network tap resource.
 38851  	ResourceGUID *string `json:"resourceGuid,omitempty"`
 38852  	// ProvisioningState - READ-ONLY; The provisioning state of the virtual network tap resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 38853  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 38854  	// DestinationNetworkInterfaceIPConfiguration - The reference to the private IP Address of the collector nic that will receive the tap.
 38855  	DestinationNetworkInterfaceIPConfiguration *InterfaceIPConfiguration `json:"destinationNetworkInterfaceIPConfiguration,omitempty"`
 38856  	// DestinationLoadBalancerFrontEndIPConfiguration - The reference to the private IP address on the internal Load Balancer that will receive the tap.
 38857  	DestinationLoadBalancerFrontEndIPConfiguration *FrontendIPConfiguration `json:"destinationLoadBalancerFrontEndIPConfiguration,omitempty"`
 38858  	// DestinationPort - The VXLAN destination port that will receive the tapped traffic.
 38859  	DestinationPort *int32 `json:"destinationPort,omitempty"`
 38860  }
 38861  
 38862  // MarshalJSON is the custom marshaler for VirtualNetworkTapPropertiesFormat.
 38863  func (vntpf VirtualNetworkTapPropertiesFormat) MarshalJSON() ([]byte, error) {
 38864  	objectMap := make(map[string]interface{})
 38865  	if vntpf.DestinationNetworkInterfaceIPConfiguration != nil {
 38866  		objectMap["destinationNetworkInterfaceIPConfiguration"] = vntpf.DestinationNetworkInterfaceIPConfiguration
 38867  	}
 38868  	if vntpf.DestinationLoadBalancerFrontEndIPConfiguration != nil {
 38869  		objectMap["destinationLoadBalancerFrontEndIPConfiguration"] = vntpf.DestinationLoadBalancerFrontEndIPConfiguration
 38870  	}
 38871  	if vntpf.DestinationPort != nil {
 38872  		objectMap["destinationPort"] = vntpf.DestinationPort
 38873  	}
 38874  	return json.Marshal(objectMap)
 38875  }
 38876  
 38877  // VirtualNetworkTapsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 38878  // long-running operation.
 38879  type VirtualNetworkTapsCreateOrUpdateFuture struct {
 38880  	azure.FutureAPI
 38881  	// Result returns the result of the asynchronous operation.
 38882  	// If the operation has not completed it will return an error.
 38883  	Result func(VirtualNetworkTapsClient) (VirtualNetworkTap, error)
 38884  }
 38885  
 38886  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 38887  func (future *VirtualNetworkTapsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 38888  	var azFuture azure.Future
 38889  	if err := json.Unmarshal(body, &azFuture); err != nil {
 38890  		return err
 38891  	}
 38892  	future.FutureAPI = &azFuture
 38893  	future.Result = future.result
 38894  	return nil
 38895  }
 38896  
 38897  // result is the default implementation for VirtualNetworkTapsCreateOrUpdateFuture.Result.
 38898  func (future *VirtualNetworkTapsCreateOrUpdateFuture) result(client VirtualNetworkTapsClient) (vnt VirtualNetworkTap, err error) {
 38899  	var done bool
 38900  	done, err = future.DoneWithContext(context.Background(), client)
 38901  	if err != nil {
 38902  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 38903  		return
 38904  	}
 38905  	if !done {
 38906  		vnt.Response.Response = future.Response()
 38907  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsCreateOrUpdateFuture")
 38908  		return
 38909  	}
 38910  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 38911  	if vnt.Response.Response, err = future.GetResult(sender); err == nil && vnt.Response.Response.StatusCode != http.StatusNoContent {
 38912  		vnt, err = client.CreateOrUpdateResponder(vnt.Response.Response)
 38913  		if err != nil {
 38914  			err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsCreateOrUpdateFuture", "Result", vnt.Response.Response, "Failure responding to request")
 38915  		}
 38916  	}
 38917  	return
 38918  }
 38919  
 38920  // VirtualNetworkTapsDeleteFuture an abstraction for monitoring and retrieving the results of a
 38921  // long-running operation.
 38922  type VirtualNetworkTapsDeleteFuture struct {
 38923  	azure.FutureAPI
 38924  	// Result returns the result of the asynchronous operation.
 38925  	// If the operation has not completed it will return an error.
 38926  	Result func(VirtualNetworkTapsClient) (autorest.Response, error)
 38927  }
 38928  
 38929  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 38930  func (future *VirtualNetworkTapsDeleteFuture) UnmarshalJSON(body []byte) error {
 38931  	var azFuture azure.Future
 38932  	if err := json.Unmarshal(body, &azFuture); err != nil {
 38933  		return err
 38934  	}
 38935  	future.FutureAPI = &azFuture
 38936  	future.Result = future.result
 38937  	return nil
 38938  }
 38939  
 38940  // result is the default implementation for VirtualNetworkTapsDeleteFuture.Result.
 38941  func (future *VirtualNetworkTapsDeleteFuture) result(client VirtualNetworkTapsClient) (ar autorest.Response, err error) {
 38942  	var done bool
 38943  	done, err = future.DoneWithContext(context.Background(), client)
 38944  	if err != nil {
 38945  		err = autorest.NewErrorWithError(err, "network.VirtualNetworkTapsDeleteFuture", "Result", future.Response(), "Polling failure")
 38946  		return
 38947  	}
 38948  	if !done {
 38949  		ar.Response = future.Response()
 38950  		err = azure.NewAsyncOpIncompleteError("network.VirtualNetworkTapsDeleteFuture")
 38951  		return
 38952  	}
 38953  	ar.Response = future.Response()
 38954  	return
 38955  }
 38956  
 38957  // VirtualNetworkUsage usage details for subnet.
 38958  type VirtualNetworkUsage struct {
 38959  	// CurrentValue - READ-ONLY; Indicates number of IPs used from the Subnet.
 38960  	CurrentValue *float64 `json:"currentValue,omitempty"`
 38961  	// ID - READ-ONLY; Subnet identifier.
 38962  	ID *string `json:"id,omitempty"`
 38963  	// Limit - READ-ONLY; Indicates the size of the subnet.
 38964  	Limit *float64 `json:"limit,omitempty"`
 38965  	// Name - READ-ONLY; The name containing common and localized value for usage.
 38966  	Name *VirtualNetworkUsageName `json:"name,omitempty"`
 38967  	// Unit - READ-ONLY; Usage units. Returns 'Count'.
 38968  	Unit *string `json:"unit,omitempty"`
 38969  }
 38970  
 38971  // MarshalJSON is the custom marshaler for VirtualNetworkUsage.
 38972  func (vnu VirtualNetworkUsage) MarshalJSON() ([]byte, error) {
 38973  	objectMap := make(map[string]interface{})
 38974  	return json.Marshal(objectMap)
 38975  }
 38976  
 38977  // VirtualNetworkUsageName usage strings container.
 38978  type VirtualNetworkUsageName struct {
 38979  	// LocalizedValue - READ-ONLY; Localized subnet size and usage string.
 38980  	LocalizedValue *string `json:"localizedValue,omitempty"`
 38981  	// Value - READ-ONLY; Subnet size and usage string.
 38982  	Value *string `json:"value,omitempty"`
 38983  }
 38984  
 38985  // MarshalJSON is the custom marshaler for VirtualNetworkUsageName.
 38986  func (vnun VirtualNetworkUsageName) MarshalJSON() ([]byte, error) {
 38987  	objectMap := make(map[string]interface{})
 38988  	return json.Marshal(objectMap)
 38989  }
 38990  
 38991  // VirtualRouter virtualRouter Resource.
 38992  type VirtualRouter struct {
 38993  	autorest.Response `json:"-"`
 38994  	// VirtualRouterPropertiesFormat - Properties of the Virtual Router.
 38995  	*VirtualRouterPropertiesFormat `json:"properties,omitempty"`
 38996  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 38997  	Etag *string `json:"etag,omitempty"`
 38998  	// ID - Resource ID.
 38999  	ID *string `json:"id,omitempty"`
 39000  	// Name - READ-ONLY; Resource name.
 39001  	Name *string `json:"name,omitempty"`
 39002  	// Type - READ-ONLY; Resource type.
 39003  	Type *string `json:"type,omitempty"`
 39004  	// Location - Resource location.
 39005  	Location *string `json:"location,omitempty"`
 39006  	// Tags - Resource tags.
 39007  	Tags map[string]*string `json:"tags"`
 39008  }
 39009  
 39010  // MarshalJSON is the custom marshaler for VirtualRouter.
 39011  func (vr VirtualRouter) MarshalJSON() ([]byte, error) {
 39012  	objectMap := make(map[string]interface{})
 39013  	if vr.VirtualRouterPropertiesFormat != nil {
 39014  		objectMap["properties"] = vr.VirtualRouterPropertiesFormat
 39015  	}
 39016  	if vr.ID != nil {
 39017  		objectMap["id"] = vr.ID
 39018  	}
 39019  	if vr.Location != nil {
 39020  		objectMap["location"] = vr.Location
 39021  	}
 39022  	if vr.Tags != nil {
 39023  		objectMap["tags"] = vr.Tags
 39024  	}
 39025  	return json.Marshal(objectMap)
 39026  }
 39027  
 39028  // UnmarshalJSON is the custom unmarshaler for VirtualRouter struct.
 39029  func (vr *VirtualRouter) UnmarshalJSON(body []byte) error {
 39030  	var m map[string]*json.RawMessage
 39031  	err := json.Unmarshal(body, &m)
 39032  	if err != nil {
 39033  		return err
 39034  	}
 39035  	for k, v := range m {
 39036  		switch k {
 39037  		case "properties":
 39038  			if v != nil {
 39039  				var virtualRouterPropertiesFormat VirtualRouterPropertiesFormat
 39040  				err = json.Unmarshal(*v, &virtualRouterPropertiesFormat)
 39041  				if err != nil {
 39042  					return err
 39043  				}
 39044  				vr.VirtualRouterPropertiesFormat = &virtualRouterPropertiesFormat
 39045  			}
 39046  		case "etag":
 39047  			if v != nil {
 39048  				var etag string
 39049  				err = json.Unmarshal(*v, &etag)
 39050  				if err != nil {
 39051  					return err
 39052  				}
 39053  				vr.Etag = &etag
 39054  			}
 39055  		case "id":
 39056  			if v != nil {
 39057  				var ID string
 39058  				err = json.Unmarshal(*v, &ID)
 39059  				if err != nil {
 39060  					return err
 39061  				}
 39062  				vr.ID = &ID
 39063  			}
 39064  		case "name":
 39065  			if v != nil {
 39066  				var name string
 39067  				err = json.Unmarshal(*v, &name)
 39068  				if err != nil {
 39069  					return err
 39070  				}
 39071  				vr.Name = &name
 39072  			}
 39073  		case "type":
 39074  			if v != nil {
 39075  				var typeVar string
 39076  				err = json.Unmarshal(*v, &typeVar)
 39077  				if err != nil {
 39078  					return err
 39079  				}
 39080  				vr.Type = &typeVar
 39081  			}
 39082  		case "location":
 39083  			if v != nil {
 39084  				var location string
 39085  				err = json.Unmarshal(*v, &location)
 39086  				if err != nil {
 39087  					return err
 39088  				}
 39089  				vr.Location = &location
 39090  			}
 39091  		case "tags":
 39092  			if v != nil {
 39093  				var tags map[string]*string
 39094  				err = json.Unmarshal(*v, &tags)
 39095  				if err != nil {
 39096  					return err
 39097  				}
 39098  				vr.Tags = tags
 39099  			}
 39100  		}
 39101  	}
 39102  
 39103  	return nil
 39104  }
 39105  
 39106  // VirtualRouterListResult response for ListVirtualRouters API service call.
 39107  type VirtualRouterListResult struct {
 39108  	autorest.Response `json:"-"`
 39109  	// Value - List of Virtual Routers.
 39110  	Value *[]VirtualRouter `json:"value,omitempty"`
 39111  	// NextLink - URL to get the next set of results.
 39112  	NextLink *string `json:"nextLink,omitempty"`
 39113  }
 39114  
 39115  // VirtualRouterListResultIterator provides access to a complete listing of VirtualRouter values.
 39116  type VirtualRouterListResultIterator struct {
 39117  	i    int
 39118  	page VirtualRouterListResultPage
 39119  }
 39120  
 39121  // NextWithContext advances to the next value.  If there was an error making
 39122  // the request the iterator does not advance and the error is returned.
 39123  func (iter *VirtualRouterListResultIterator) NextWithContext(ctx context.Context) (err error) {
 39124  	if tracing.IsEnabled() {
 39125  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterListResultIterator.NextWithContext")
 39126  		defer func() {
 39127  			sc := -1
 39128  			if iter.Response().Response.Response != nil {
 39129  				sc = iter.Response().Response.Response.StatusCode
 39130  			}
 39131  			tracing.EndSpan(ctx, sc, err)
 39132  		}()
 39133  	}
 39134  	iter.i++
 39135  	if iter.i < len(iter.page.Values()) {
 39136  		return nil
 39137  	}
 39138  	err = iter.page.NextWithContext(ctx)
 39139  	if err != nil {
 39140  		iter.i--
 39141  		return err
 39142  	}
 39143  	iter.i = 0
 39144  	return nil
 39145  }
 39146  
 39147  // Next advances to the next value.  If there was an error making
 39148  // the request the iterator does not advance and the error is returned.
 39149  // Deprecated: Use NextWithContext() instead.
 39150  func (iter *VirtualRouterListResultIterator) Next() error {
 39151  	return iter.NextWithContext(context.Background())
 39152  }
 39153  
 39154  // NotDone returns true if the enumeration should be started or is not yet complete.
 39155  func (iter VirtualRouterListResultIterator) NotDone() bool {
 39156  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 39157  }
 39158  
 39159  // Response returns the raw server response from the last page request.
 39160  func (iter VirtualRouterListResultIterator) Response() VirtualRouterListResult {
 39161  	return iter.page.Response()
 39162  }
 39163  
 39164  // Value returns the current value or a zero-initialized value if the
 39165  // iterator has advanced beyond the end of the collection.
 39166  func (iter VirtualRouterListResultIterator) Value() VirtualRouter {
 39167  	if !iter.page.NotDone() {
 39168  		return VirtualRouter{}
 39169  	}
 39170  	return iter.page.Values()[iter.i]
 39171  }
 39172  
 39173  // Creates a new instance of the VirtualRouterListResultIterator type.
 39174  func NewVirtualRouterListResultIterator(page VirtualRouterListResultPage) VirtualRouterListResultIterator {
 39175  	return VirtualRouterListResultIterator{page: page}
 39176  }
 39177  
 39178  // IsEmpty returns true if the ListResult contains no values.
 39179  func (vrlr VirtualRouterListResult) IsEmpty() bool {
 39180  	return vrlr.Value == nil || len(*vrlr.Value) == 0
 39181  }
 39182  
 39183  // hasNextLink returns true if the NextLink is not empty.
 39184  func (vrlr VirtualRouterListResult) hasNextLink() bool {
 39185  	return vrlr.NextLink != nil && len(*vrlr.NextLink) != 0
 39186  }
 39187  
 39188  // virtualRouterListResultPreparer prepares a request to retrieve the next set of results.
 39189  // It returns nil if no more results exist.
 39190  func (vrlr VirtualRouterListResult) virtualRouterListResultPreparer(ctx context.Context) (*http.Request, error) {
 39191  	if !vrlr.hasNextLink() {
 39192  		return nil, nil
 39193  	}
 39194  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 39195  		autorest.AsJSON(),
 39196  		autorest.AsGet(),
 39197  		autorest.WithBaseURL(to.String(vrlr.NextLink)))
 39198  }
 39199  
 39200  // VirtualRouterListResultPage contains a page of VirtualRouter values.
 39201  type VirtualRouterListResultPage struct {
 39202  	fn   func(context.Context, VirtualRouterListResult) (VirtualRouterListResult, error)
 39203  	vrlr VirtualRouterListResult
 39204  }
 39205  
 39206  // NextWithContext advances to the next page of values.  If there was an error making
 39207  // the request the page does not advance and the error is returned.
 39208  func (page *VirtualRouterListResultPage) NextWithContext(ctx context.Context) (err error) {
 39209  	if tracing.IsEnabled() {
 39210  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterListResultPage.NextWithContext")
 39211  		defer func() {
 39212  			sc := -1
 39213  			if page.Response().Response.Response != nil {
 39214  				sc = page.Response().Response.Response.StatusCode
 39215  			}
 39216  			tracing.EndSpan(ctx, sc, err)
 39217  		}()
 39218  	}
 39219  	for {
 39220  		next, err := page.fn(ctx, page.vrlr)
 39221  		if err != nil {
 39222  			return err
 39223  		}
 39224  		page.vrlr = next
 39225  		if !next.hasNextLink() || !next.IsEmpty() {
 39226  			break
 39227  		}
 39228  	}
 39229  	return nil
 39230  }
 39231  
 39232  // Next advances to the next page of values.  If there was an error making
 39233  // the request the page does not advance and the error is returned.
 39234  // Deprecated: Use NextWithContext() instead.
 39235  func (page *VirtualRouterListResultPage) Next() error {
 39236  	return page.NextWithContext(context.Background())
 39237  }
 39238  
 39239  // NotDone returns true if the page enumeration should be started or is not yet complete.
 39240  func (page VirtualRouterListResultPage) NotDone() bool {
 39241  	return !page.vrlr.IsEmpty()
 39242  }
 39243  
 39244  // Response returns the raw server response from the last page request.
 39245  func (page VirtualRouterListResultPage) Response() VirtualRouterListResult {
 39246  	return page.vrlr
 39247  }
 39248  
 39249  // Values returns the slice of values for the current page or nil if there are no values.
 39250  func (page VirtualRouterListResultPage) Values() []VirtualRouter {
 39251  	if page.vrlr.IsEmpty() {
 39252  		return nil
 39253  	}
 39254  	return *page.vrlr.Value
 39255  }
 39256  
 39257  // Creates a new instance of the VirtualRouterListResultPage type.
 39258  func NewVirtualRouterListResultPage(cur VirtualRouterListResult, getNextPage func(context.Context, VirtualRouterListResult) (VirtualRouterListResult, error)) VirtualRouterListResultPage {
 39259  	return VirtualRouterListResultPage{
 39260  		fn:   getNextPage,
 39261  		vrlr: cur,
 39262  	}
 39263  }
 39264  
 39265  // VirtualRouterPeering virtual Router Peering resource.
 39266  type VirtualRouterPeering struct {
 39267  	autorest.Response `json:"-"`
 39268  	// VirtualRouterPeeringProperties - The properties of the Virtual Router Peering.
 39269  	*VirtualRouterPeeringProperties `json:"properties,omitempty"`
 39270  	// Name - Name of the virtual router peering that is unique within a virtual router.
 39271  	Name *string `json:"name,omitempty"`
 39272  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 39273  	Etag *string `json:"etag,omitempty"`
 39274  	// Type - READ-ONLY; Peering type.
 39275  	Type *string `json:"type,omitempty"`
 39276  	// ID - Resource ID.
 39277  	ID *string `json:"id,omitempty"`
 39278  }
 39279  
 39280  // MarshalJSON is the custom marshaler for VirtualRouterPeering.
 39281  func (vrp VirtualRouterPeering) MarshalJSON() ([]byte, error) {
 39282  	objectMap := make(map[string]interface{})
 39283  	if vrp.VirtualRouterPeeringProperties != nil {
 39284  		objectMap["properties"] = vrp.VirtualRouterPeeringProperties
 39285  	}
 39286  	if vrp.Name != nil {
 39287  		objectMap["name"] = vrp.Name
 39288  	}
 39289  	if vrp.ID != nil {
 39290  		objectMap["id"] = vrp.ID
 39291  	}
 39292  	return json.Marshal(objectMap)
 39293  }
 39294  
 39295  // UnmarshalJSON is the custom unmarshaler for VirtualRouterPeering struct.
 39296  func (vrp *VirtualRouterPeering) UnmarshalJSON(body []byte) error {
 39297  	var m map[string]*json.RawMessage
 39298  	err := json.Unmarshal(body, &m)
 39299  	if err != nil {
 39300  		return err
 39301  	}
 39302  	for k, v := range m {
 39303  		switch k {
 39304  		case "properties":
 39305  			if v != nil {
 39306  				var virtualRouterPeeringProperties VirtualRouterPeeringProperties
 39307  				err = json.Unmarshal(*v, &virtualRouterPeeringProperties)
 39308  				if err != nil {
 39309  					return err
 39310  				}
 39311  				vrp.VirtualRouterPeeringProperties = &virtualRouterPeeringProperties
 39312  			}
 39313  		case "name":
 39314  			if v != nil {
 39315  				var name string
 39316  				err = json.Unmarshal(*v, &name)
 39317  				if err != nil {
 39318  					return err
 39319  				}
 39320  				vrp.Name = &name
 39321  			}
 39322  		case "etag":
 39323  			if v != nil {
 39324  				var etag string
 39325  				err = json.Unmarshal(*v, &etag)
 39326  				if err != nil {
 39327  					return err
 39328  				}
 39329  				vrp.Etag = &etag
 39330  			}
 39331  		case "type":
 39332  			if v != nil {
 39333  				var typeVar string
 39334  				err = json.Unmarshal(*v, &typeVar)
 39335  				if err != nil {
 39336  					return err
 39337  				}
 39338  				vrp.Type = &typeVar
 39339  			}
 39340  		case "id":
 39341  			if v != nil {
 39342  				var ID string
 39343  				err = json.Unmarshal(*v, &ID)
 39344  				if err != nil {
 39345  					return err
 39346  				}
 39347  				vrp.ID = &ID
 39348  			}
 39349  		}
 39350  	}
 39351  
 39352  	return nil
 39353  }
 39354  
 39355  // VirtualRouterPeeringListResult response for ListVirtualRouterPeerings API service call.
 39356  type VirtualRouterPeeringListResult struct {
 39357  	autorest.Response `json:"-"`
 39358  	// Value - List of VirtualRouterPeerings in a VirtualRouter.
 39359  	Value *[]VirtualRouterPeering `json:"value,omitempty"`
 39360  	// NextLink - URL to get the next set of results.
 39361  	NextLink *string `json:"nextLink,omitempty"`
 39362  }
 39363  
 39364  // VirtualRouterPeeringListResultIterator provides access to a complete listing of VirtualRouterPeering
 39365  // values.
 39366  type VirtualRouterPeeringListResultIterator struct {
 39367  	i    int
 39368  	page VirtualRouterPeeringListResultPage
 39369  }
 39370  
 39371  // NextWithContext advances to the next value.  If there was an error making
 39372  // the request the iterator does not advance and the error is returned.
 39373  func (iter *VirtualRouterPeeringListResultIterator) NextWithContext(ctx context.Context) (err error) {
 39374  	if tracing.IsEnabled() {
 39375  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterPeeringListResultIterator.NextWithContext")
 39376  		defer func() {
 39377  			sc := -1
 39378  			if iter.Response().Response.Response != nil {
 39379  				sc = iter.Response().Response.Response.StatusCode
 39380  			}
 39381  			tracing.EndSpan(ctx, sc, err)
 39382  		}()
 39383  	}
 39384  	iter.i++
 39385  	if iter.i < len(iter.page.Values()) {
 39386  		return nil
 39387  	}
 39388  	err = iter.page.NextWithContext(ctx)
 39389  	if err != nil {
 39390  		iter.i--
 39391  		return err
 39392  	}
 39393  	iter.i = 0
 39394  	return nil
 39395  }
 39396  
 39397  // Next advances to the next value.  If there was an error making
 39398  // the request the iterator does not advance and the error is returned.
 39399  // Deprecated: Use NextWithContext() instead.
 39400  func (iter *VirtualRouterPeeringListResultIterator) Next() error {
 39401  	return iter.NextWithContext(context.Background())
 39402  }
 39403  
 39404  // NotDone returns true if the enumeration should be started or is not yet complete.
 39405  func (iter VirtualRouterPeeringListResultIterator) NotDone() bool {
 39406  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 39407  }
 39408  
 39409  // Response returns the raw server response from the last page request.
 39410  func (iter VirtualRouterPeeringListResultIterator) Response() VirtualRouterPeeringListResult {
 39411  	return iter.page.Response()
 39412  }
 39413  
 39414  // Value returns the current value or a zero-initialized value if the
 39415  // iterator has advanced beyond the end of the collection.
 39416  func (iter VirtualRouterPeeringListResultIterator) Value() VirtualRouterPeering {
 39417  	if !iter.page.NotDone() {
 39418  		return VirtualRouterPeering{}
 39419  	}
 39420  	return iter.page.Values()[iter.i]
 39421  }
 39422  
 39423  // Creates a new instance of the VirtualRouterPeeringListResultIterator type.
 39424  func NewVirtualRouterPeeringListResultIterator(page VirtualRouterPeeringListResultPage) VirtualRouterPeeringListResultIterator {
 39425  	return VirtualRouterPeeringListResultIterator{page: page}
 39426  }
 39427  
 39428  // IsEmpty returns true if the ListResult contains no values.
 39429  func (vrplr VirtualRouterPeeringListResult) IsEmpty() bool {
 39430  	return vrplr.Value == nil || len(*vrplr.Value) == 0
 39431  }
 39432  
 39433  // hasNextLink returns true if the NextLink is not empty.
 39434  func (vrplr VirtualRouterPeeringListResult) hasNextLink() bool {
 39435  	return vrplr.NextLink != nil && len(*vrplr.NextLink) != 0
 39436  }
 39437  
 39438  // virtualRouterPeeringListResultPreparer prepares a request to retrieve the next set of results.
 39439  // It returns nil if no more results exist.
 39440  func (vrplr VirtualRouterPeeringListResult) virtualRouterPeeringListResultPreparer(ctx context.Context) (*http.Request, error) {
 39441  	if !vrplr.hasNextLink() {
 39442  		return nil, nil
 39443  	}
 39444  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 39445  		autorest.AsJSON(),
 39446  		autorest.AsGet(),
 39447  		autorest.WithBaseURL(to.String(vrplr.NextLink)))
 39448  }
 39449  
 39450  // VirtualRouterPeeringListResultPage contains a page of VirtualRouterPeering values.
 39451  type VirtualRouterPeeringListResultPage struct {
 39452  	fn    func(context.Context, VirtualRouterPeeringListResult) (VirtualRouterPeeringListResult, error)
 39453  	vrplr VirtualRouterPeeringListResult
 39454  }
 39455  
 39456  // NextWithContext advances to the next page of values.  If there was an error making
 39457  // the request the page does not advance and the error is returned.
 39458  func (page *VirtualRouterPeeringListResultPage) NextWithContext(ctx context.Context) (err error) {
 39459  	if tracing.IsEnabled() {
 39460  		ctx = tracing.StartSpan(ctx, fqdn+"/VirtualRouterPeeringListResultPage.NextWithContext")
 39461  		defer func() {
 39462  			sc := -1
 39463  			if page.Response().Response.Response != nil {
 39464  				sc = page.Response().Response.Response.StatusCode
 39465  			}
 39466  			tracing.EndSpan(ctx, sc, err)
 39467  		}()
 39468  	}
 39469  	for {
 39470  		next, err := page.fn(ctx, page.vrplr)
 39471  		if err != nil {
 39472  			return err
 39473  		}
 39474  		page.vrplr = next
 39475  		if !next.hasNextLink() || !next.IsEmpty() {
 39476  			break
 39477  		}
 39478  	}
 39479  	return nil
 39480  }
 39481  
 39482  // Next advances to the next page of values.  If there was an error making
 39483  // the request the page does not advance and the error is returned.
 39484  // Deprecated: Use NextWithContext() instead.
 39485  func (page *VirtualRouterPeeringListResultPage) Next() error {
 39486  	return page.NextWithContext(context.Background())
 39487  }
 39488  
 39489  // NotDone returns true if the page enumeration should be started or is not yet complete.
 39490  func (page VirtualRouterPeeringListResultPage) NotDone() bool {
 39491  	return !page.vrplr.IsEmpty()
 39492  }
 39493  
 39494  // Response returns the raw server response from the last page request.
 39495  func (page VirtualRouterPeeringListResultPage) Response() VirtualRouterPeeringListResult {
 39496  	return page.vrplr
 39497  }
 39498  
 39499  // Values returns the slice of values for the current page or nil if there are no values.
 39500  func (page VirtualRouterPeeringListResultPage) Values() []VirtualRouterPeering {
 39501  	if page.vrplr.IsEmpty() {
 39502  		return nil
 39503  	}
 39504  	return *page.vrplr.Value
 39505  }
 39506  
 39507  // Creates a new instance of the VirtualRouterPeeringListResultPage type.
 39508  func NewVirtualRouterPeeringListResultPage(cur VirtualRouterPeeringListResult, getNextPage func(context.Context, VirtualRouterPeeringListResult) (VirtualRouterPeeringListResult, error)) VirtualRouterPeeringListResultPage {
 39509  	return VirtualRouterPeeringListResultPage{
 39510  		fn:    getNextPage,
 39511  		vrplr: cur,
 39512  	}
 39513  }
 39514  
 39515  // VirtualRouterPeeringProperties properties of the rule group.
 39516  type VirtualRouterPeeringProperties struct {
 39517  	// PeerAsn - Peer ASN.
 39518  	PeerAsn *int64 `json:"peerAsn,omitempty"`
 39519  	// PeerIP - Peer IP.
 39520  	PeerIP *string `json:"peerIp,omitempty"`
 39521  	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 39522  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 39523  }
 39524  
 39525  // MarshalJSON is the custom marshaler for VirtualRouterPeeringProperties.
 39526  func (vrpp VirtualRouterPeeringProperties) MarshalJSON() ([]byte, error) {
 39527  	objectMap := make(map[string]interface{})
 39528  	if vrpp.PeerAsn != nil {
 39529  		objectMap["peerAsn"] = vrpp.PeerAsn
 39530  	}
 39531  	if vrpp.PeerIP != nil {
 39532  		objectMap["peerIp"] = vrpp.PeerIP
 39533  	}
 39534  	return json.Marshal(objectMap)
 39535  }
 39536  
 39537  // VirtualRouterPeeringsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 39538  // long-running operation.
 39539  type VirtualRouterPeeringsCreateOrUpdateFuture struct {
 39540  	azure.FutureAPI
 39541  	// Result returns the result of the asynchronous operation.
 39542  	// If the operation has not completed it will return an error.
 39543  	Result func(VirtualRouterPeeringsClient) (VirtualRouterPeering, error)
 39544  }
 39545  
 39546  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 39547  func (future *VirtualRouterPeeringsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 39548  	var azFuture azure.Future
 39549  	if err := json.Unmarshal(body, &azFuture); err != nil {
 39550  		return err
 39551  	}
 39552  	future.FutureAPI = &azFuture
 39553  	future.Result = future.result
 39554  	return nil
 39555  }
 39556  
 39557  // result is the default implementation for VirtualRouterPeeringsCreateOrUpdateFuture.Result.
 39558  func (future *VirtualRouterPeeringsCreateOrUpdateFuture) result(client VirtualRouterPeeringsClient) (vrp VirtualRouterPeering, err error) {
 39559  	var done bool
 39560  	done, err = future.DoneWithContext(context.Background(), client)
 39561  	if err != nil {
 39562  		err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 39563  		return
 39564  	}
 39565  	if !done {
 39566  		vrp.Response.Response = future.Response()
 39567  		err = azure.NewAsyncOpIncompleteError("network.VirtualRouterPeeringsCreateOrUpdateFuture")
 39568  		return
 39569  	}
 39570  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 39571  	if vrp.Response.Response, err = future.GetResult(sender); err == nil && vrp.Response.Response.StatusCode != http.StatusNoContent {
 39572  		vrp, err = client.CreateOrUpdateResponder(vrp.Response.Response)
 39573  		if err != nil {
 39574  			err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsCreateOrUpdateFuture", "Result", vrp.Response.Response, "Failure responding to request")
 39575  		}
 39576  	}
 39577  	return
 39578  }
 39579  
 39580  // VirtualRouterPeeringsDeleteFuture an abstraction for monitoring and retrieving the results of a
 39581  // long-running operation.
 39582  type VirtualRouterPeeringsDeleteFuture struct {
 39583  	azure.FutureAPI
 39584  	// Result returns the result of the asynchronous operation.
 39585  	// If the operation has not completed it will return an error.
 39586  	Result func(VirtualRouterPeeringsClient) (autorest.Response, error)
 39587  }
 39588  
 39589  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 39590  func (future *VirtualRouterPeeringsDeleteFuture) UnmarshalJSON(body []byte) error {
 39591  	var azFuture azure.Future
 39592  	if err := json.Unmarshal(body, &azFuture); err != nil {
 39593  		return err
 39594  	}
 39595  	future.FutureAPI = &azFuture
 39596  	future.Result = future.result
 39597  	return nil
 39598  }
 39599  
 39600  // result is the default implementation for VirtualRouterPeeringsDeleteFuture.Result.
 39601  func (future *VirtualRouterPeeringsDeleteFuture) result(client VirtualRouterPeeringsClient) (ar autorest.Response, err error) {
 39602  	var done bool
 39603  	done, err = future.DoneWithContext(context.Background(), client)
 39604  	if err != nil {
 39605  		err = autorest.NewErrorWithError(err, "network.VirtualRouterPeeringsDeleteFuture", "Result", future.Response(), "Polling failure")
 39606  		return
 39607  	}
 39608  	if !done {
 39609  		ar.Response = future.Response()
 39610  		err = azure.NewAsyncOpIncompleteError("network.VirtualRouterPeeringsDeleteFuture")
 39611  		return
 39612  	}
 39613  	ar.Response = future.Response()
 39614  	return
 39615  }
 39616  
 39617  // VirtualRouterPropertiesFormat virtual Router definition.
 39618  type VirtualRouterPropertiesFormat struct {
 39619  	// VirtualRouterAsn - VirtualRouter ASN.
 39620  	VirtualRouterAsn *int64 `json:"virtualRouterAsn,omitempty"`
 39621  	// VirtualRouterIps - VirtualRouter IPs.
 39622  	VirtualRouterIps *[]string `json:"virtualRouterIps,omitempty"`
 39623  	// HostedSubnet - The Subnet on which VirtualRouter is hosted.
 39624  	HostedSubnet *SubResource `json:"hostedSubnet,omitempty"`
 39625  	// HostedGateway - The Gateway on which VirtualRouter is hosted.
 39626  	HostedGateway *SubResource `json:"hostedGateway,omitempty"`
 39627  	// Peerings - READ-ONLY; List of references to VirtualRouterPeerings.
 39628  	Peerings *[]SubResource `json:"peerings,omitempty"`
 39629  	// ProvisioningState - READ-ONLY; The provisioning state of the resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 39630  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 39631  }
 39632  
 39633  // MarshalJSON is the custom marshaler for VirtualRouterPropertiesFormat.
 39634  func (vrpf VirtualRouterPropertiesFormat) MarshalJSON() ([]byte, error) {
 39635  	objectMap := make(map[string]interface{})
 39636  	if vrpf.VirtualRouterAsn != nil {
 39637  		objectMap["virtualRouterAsn"] = vrpf.VirtualRouterAsn
 39638  	}
 39639  	if vrpf.VirtualRouterIps != nil {
 39640  		objectMap["virtualRouterIps"] = vrpf.VirtualRouterIps
 39641  	}
 39642  	if vrpf.HostedSubnet != nil {
 39643  		objectMap["hostedSubnet"] = vrpf.HostedSubnet
 39644  	}
 39645  	if vrpf.HostedGateway != nil {
 39646  		objectMap["hostedGateway"] = vrpf.HostedGateway
 39647  	}
 39648  	return json.Marshal(objectMap)
 39649  }
 39650  
 39651  // VirtualRoutersCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 39652  // long-running operation.
 39653  type VirtualRoutersCreateOrUpdateFuture struct {
 39654  	azure.FutureAPI
 39655  	// Result returns the result of the asynchronous operation.
 39656  	// If the operation has not completed it will return an error.
 39657  	Result func(VirtualRoutersClient) (VirtualRouter, error)
 39658  }
 39659  
 39660  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 39661  func (future *VirtualRoutersCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 39662  	var azFuture azure.Future
 39663  	if err := json.Unmarshal(body, &azFuture); err != nil {
 39664  		return err
 39665  	}
 39666  	future.FutureAPI = &azFuture
 39667  	future.Result = future.result
 39668  	return nil
 39669  }
 39670  
 39671  // result is the default implementation for VirtualRoutersCreateOrUpdateFuture.Result.
 39672  func (future *VirtualRoutersCreateOrUpdateFuture) result(client VirtualRoutersClient) (vr VirtualRouter, err error) {
 39673  	var done bool
 39674  	done, err = future.DoneWithContext(context.Background(), client)
 39675  	if err != nil {
 39676  		err = autorest.NewErrorWithError(err, "network.VirtualRoutersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 39677  		return
 39678  	}
 39679  	if !done {
 39680  		vr.Response.Response = future.Response()
 39681  		err = azure.NewAsyncOpIncompleteError("network.VirtualRoutersCreateOrUpdateFuture")
 39682  		return
 39683  	}
 39684  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 39685  	if vr.Response.Response, err = future.GetResult(sender); err == nil && vr.Response.Response.StatusCode != http.StatusNoContent {
 39686  		vr, err = client.CreateOrUpdateResponder(vr.Response.Response)
 39687  		if err != nil {
 39688  			err = autorest.NewErrorWithError(err, "network.VirtualRoutersCreateOrUpdateFuture", "Result", vr.Response.Response, "Failure responding to request")
 39689  		}
 39690  	}
 39691  	return
 39692  }
 39693  
 39694  // VirtualRoutersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 39695  // operation.
 39696  type VirtualRoutersDeleteFuture struct {
 39697  	azure.FutureAPI
 39698  	// Result returns the result of the asynchronous operation.
 39699  	// If the operation has not completed it will return an error.
 39700  	Result func(VirtualRoutersClient) (autorest.Response, error)
 39701  }
 39702  
 39703  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 39704  func (future *VirtualRoutersDeleteFuture) UnmarshalJSON(body []byte) error {
 39705  	var azFuture azure.Future
 39706  	if err := json.Unmarshal(body, &azFuture); err != nil {
 39707  		return err
 39708  	}
 39709  	future.FutureAPI = &azFuture
 39710  	future.Result = future.result
 39711  	return nil
 39712  }
 39713  
 39714  // result is the default implementation for VirtualRoutersDeleteFuture.Result.
 39715  func (future *VirtualRoutersDeleteFuture) result(client VirtualRoutersClient) (ar autorest.Response, err error) {
 39716  	var done bool
 39717  	done, err = future.DoneWithContext(context.Background(), client)
 39718  	if err != nil {
 39719  		err = autorest.NewErrorWithError(err, "network.VirtualRoutersDeleteFuture", "Result", future.Response(), "Polling failure")
 39720  		return
 39721  	}
 39722  	if !done {
 39723  		ar.Response = future.Response()
 39724  		err = azure.NewAsyncOpIncompleteError("network.VirtualRoutersDeleteFuture")
 39725  		return
 39726  	}
 39727  	ar.Response = future.Response()
 39728  	return
 39729  }
 39730  
 39731  // VirtualWAN virtualWAN Resource.
 39732  type VirtualWAN struct {
 39733  	autorest.Response `json:"-"`
 39734  	// VirtualWanProperties - Properties of the virtual WAN.
 39735  	*VirtualWanProperties `json:"properties,omitempty"`
 39736  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 39737  	Etag *string `json:"etag,omitempty"`
 39738  	// ID - Resource ID.
 39739  	ID *string `json:"id,omitempty"`
 39740  	// Name - READ-ONLY; Resource name.
 39741  	Name *string `json:"name,omitempty"`
 39742  	// Type - READ-ONLY; Resource type.
 39743  	Type *string `json:"type,omitempty"`
 39744  	// Location - Resource location.
 39745  	Location *string `json:"location,omitempty"`
 39746  	// Tags - Resource tags.
 39747  	Tags map[string]*string `json:"tags"`
 39748  }
 39749  
 39750  // MarshalJSON is the custom marshaler for VirtualWAN.
 39751  func (vw VirtualWAN) MarshalJSON() ([]byte, error) {
 39752  	objectMap := make(map[string]interface{})
 39753  	if vw.VirtualWanProperties != nil {
 39754  		objectMap["properties"] = vw.VirtualWanProperties
 39755  	}
 39756  	if vw.ID != nil {
 39757  		objectMap["id"] = vw.ID
 39758  	}
 39759  	if vw.Location != nil {
 39760  		objectMap["location"] = vw.Location
 39761  	}
 39762  	if vw.Tags != nil {
 39763  		objectMap["tags"] = vw.Tags
 39764  	}
 39765  	return json.Marshal(objectMap)
 39766  }
 39767  
 39768  // UnmarshalJSON is the custom unmarshaler for VirtualWAN struct.
 39769  func (vw *VirtualWAN) UnmarshalJSON(body []byte) error {
 39770  	var m map[string]*json.RawMessage
 39771  	err := json.Unmarshal(body, &m)
 39772  	if err != nil {
 39773  		return err
 39774  	}
 39775  	for k, v := range m {
 39776  		switch k {
 39777  		case "properties":
 39778  			if v != nil {
 39779  				var virtualWanProperties VirtualWanProperties
 39780  				err = json.Unmarshal(*v, &virtualWanProperties)
 39781  				if err != nil {
 39782  					return err
 39783  				}
 39784  				vw.VirtualWanProperties = &virtualWanProperties
 39785  			}
 39786  		case "etag":
 39787  			if v != nil {
 39788  				var etag string
 39789  				err = json.Unmarshal(*v, &etag)
 39790  				if err != nil {
 39791  					return err
 39792  				}
 39793  				vw.Etag = &etag
 39794  			}
 39795  		case "id":
 39796  			if v != nil {
 39797  				var ID string
 39798  				err = json.Unmarshal(*v, &ID)
 39799  				if err != nil {
 39800  					return err
 39801  				}
 39802  				vw.ID = &ID
 39803  			}
 39804  		case "name":
 39805  			if v != nil {
 39806  				var name string
 39807  				err = json.Unmarshal(*v, &name)
 39808  				if err != nil {
 39809  					return err
 39810  				}
 39811  				vw.Name = &name
 39812  			}
 39813  		case "type":
 39814  			if v != nil {
 39815  				var typeVar string
 39816  				err = json.Unmarshal(*v, &typeVar)
 39817  				if err != nil {
 39818  					return err
 39819  				}
 39820  				vw.Type = &typeVar
 39821  			}
 39822  		case "location":
 39823  			if v != nil {
 39824  				var location string
 39825  				err = json.Unmarshal(*v, &location)
 39826  				if err != nil {
 39827  					return err
 39828  				}
 39829  				vw.Location = &location
 39830  			}
 39831  		case "tags":
 39832  			if v != nil {
 39833  				var tags map[string]*string
 39834  				err = json.Unmarshal(*v, &tags)
 39835  				if err != nil {
 39836  					return err
 39837  				}
 39838  				vw.Tags = tags
 39839  			}
 39840  		}
 39841  	}
 39842  
 39843  	return nil
 39844  }
 39845  
 39846  // VirtualWanProperties parameters for VirtualWAN.
 39847  type VirtualWanProperties struct {
 39848  	// DisableVpnEncryption - Vpn encryption to be disabled or not.
 39849  	DisableVpnEncryption *bool `json:"disableVpnEncryption,omitempty"`
 39850  	// VirtualHubs - READ-ONLY; List of VirtualHubs in the VirtualWAN.
 39851  	VirtualHubs *[]SubResource `json:"virtualHubs,omitempty"`
 39852  	// VpnSites - READ-ONLY; List of VpnSites in the VirtualWAN.
 39853  	VpnSites *[]SubResource `json:"vpnSites,omitempty"`
 39854  	// AllowBranchToBranchTraffic - True if branch to branch traffic is allowed.
 39855  	AllowBranchToBranchTraffic *bool `json:"allowBranchToBranchTraffic,omitempty"`
 39856  	// AllowVnetToVnetTraffic - True if Vnet to Vnet traffic is allowed.
 39857  	AllowVnetToVnetTraffic *bool `json:"allowVnetToVnetTraffic,omitempty"`
 39858  	// Office365LocalBreakoutCategory - The office local breakout category. Possible values include: 'OfficeTrafficCategoryOptimize', 'OfficeTrafficCategoryOptimizeAndAllow', 'OfficeTrafficCategoryAll', 'OfficeTrafficCategoryNone'
 39859  	Office365LocalBreakoutCategory OfficeTrafficCategory `json:"office365LocalBreakoutCategory,omitempty"`
 39860  	// ProvisioningState - READ-ONLY; The provisioning state of the virtual WAN resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 39861  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 39862  	// Type - The type of the VirtualWAN.
 39863  	Type *string `json:"type,omitempty"`
 39864  }
 39865  
 39866  // MarshalJSON is the custom marshaler for VirtualWanProperties.
 39867  func (vwp VirtualWanProperties) MarshalJSON() ([]byte, error) {
 39868  	objectMap := make(map[string]interface{})
 39869  	if vwp.DisableVpnEncryption != nil {
 39870  		objectMap["disableVpnEncryption"] = vwp.DisableVpnEncryption
 39871  	}
 39872  	if vwp.AllowBranchToBranchTraffic != nil {
 39873  		objectMap["allowBranchToBranchTraffic"] = vwp.AllowBranchToBranchTraffic
 39874  	}
 39875  	if vwp.AllowVnetToVnetTraffic != nil {
 39876  		objectMap["allowVnetToVnetTraffic"] = vwp.AllowVnetToVnetTraffic
 39877  	}
 39878  	if vwp.Office365LocalBreakoutCategory != "" {
 39879  		objectMap["office365LocalBreakoutCategory"] = vwp.Office365LocalBreakoutCategory
 39880  	}
 39881  	if vwp.Type != nil {
 39882  		objectMap["type"] = vwp.Type
 39883  	}
 39884  	return json.Marshal(objectMap)
 39885  }
 39886  
 39887  // VirtualWansCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 39888  // long-running operation.
 39889  type VirtualWansCreateOrUpdateFuture struct {
 39890  	azure.FutureAPI
 39891  	// Result returns the result of the asynchronous operation.
 39892  	// If the operation has not completed it will return an error.
 39893  	Result func(VirtualWansClient) (VirtualWAN, error)
 39894  }
 39895  
 39896  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 39897  func (future *VirtualWansCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 39898  	var azFuture azure.Future
 39899  	if err := json.Unmarshal(body, &azFuture); err != nil {
 39900  		return err
 39901  	}
 39902  	future.FutureAPI = &azFuture
 39903  	future.Result = future.result
 39904  	return nil
 39905  }
 39906  
 39907  // result is the default implementation for VirtualWansCreateOrUpdateFuture.Result.
 39908  func (future *VirtualWansCreateOrUpdateFuture) result(client VirtualWansClient) (vw VirtualWAN, err error) {
 39909  	var done bool
 39910  	done, err = future.DoneWithContext(context.Background(), client)
 39911  	if err != nil {
 39912  		err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 39913  		return
 39914  	}
 39915  	if !done {
 39916  		vw.Response.Response = future.Response()
 39917  		err = azure.NewAsyncOpIncompleteError("network.VirtualWansCreateOrUpdateFuture")
 39918  		return
 39919  	}
 39920  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 39921  	if vw.Response.Response, err = future.GetResult(sender); err == nil && vw.Response.Response.StatusCode != http.StatusNoContent {
 39922  		vw, err = client.CreateOrUpdateResponder(vw.Response.Response)
 39923  		if err != nil {
 39924  			err = autorest.NewErrorWithError(err, "network.VirtualWansCreateOrUpdateFuture", "Result", vw.Response.Response, "Failure responding to request")
 39925  		}
 39926  	}
 39927  	return
 39928  }
 39929  
 39930  // VirtualWansDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 39931  // operation.
 39932  type VirtualWansDeleteFuture struct {
 39933  	azure.FutureAPI
 39934  	// Result returns the result of the asynchronous operation.
 39935  	// If the operation has not completed it will return an error.
 39936  	Result func(VirtualWansClient) (autorest.Response, error)
 39937  }
 39938  
 39939  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 39940  func (future *VirtualWansDeleteFuture) UnmarshalJSON(body []byte) error {
 39941  	var azFuture azure.Future
 39942  	if err := json.Unmarshal(body, &azFuture); err != nil {
 39943  		return err
 39944  	}
 39945  	future.FutureAPI = &azFuture
 39946  	future.Result = future.result
 39947  	return nil
 39948  }
 39949  
 39950  // result is the default implementation for VirtualWansDeleteFuture.Result.
 39951  func (future *VirtualWansDeleteFuture) result(client VirtualWansClient) (ar autorest.Response, err error) {
 39952  	var done bool
 39953  	done, err = future.DoneWithContext(context.Background(), client)
 39954  	if err != nil {
 39955  		err = autorest.NewErrorWithError(err, "network.VirtualWansDeleteFuture", "Result", future.Response(), "Polling failure")
 39956  		return
 39957  	}
 39958  	if !done {
 39959  		ar.Response = future.Response()
 39960  		err = azure.NewAsyncOpIncompleteError("network.VirtualWansDeleteFuture")
 39961  		return
 39962  	}
 39963  	ar.Response = future.Response()
 39964  	return
 39965  }
 39966  
 39967  // VirtualWanSecurityProvider collection of SecurityProviders.
 39968  type VirtualWanSecurityProvider struct {
 39969  	// Name - Name of the security provider.
 39970  	Name *string `json:"name,omitempty"`
 39971  	// URL - Url of the security provider.
 39972  	URL *string `json:"url,omitempty"`
 39973  	// Type - Name of the security provider. Possible values include: 'External', 'Native'
 39974  	Type VirtualWanSecurityProviderType `json:"type,omitempty"`
 39975  }
 39976  
 39977  // VirtualWanSecurityProviders collection of SecurityProviders.
 39978  type VirtualWanSecurityProviders struct {
 39979  	autorest.Response `json:"-"`
 39980  	// SupportedProviders - List of VirtualWAN security providers.
 39981  	SupportedProviders *[]VirtualWanSecurityProvider `json:"supportedProviders,omitempty"`
 39982  }
 39983  
 39984  // VirtualWanVpnProfileParameters virtual Wan Vpn profile parameters Vpn profile generation.
 39985  type VirtualWanVpnProfileParameters struct {
 39986  	// VpnServerConfigurationResourceID - VpnServerConfiguration partial resource uri with which VirtualWan is associated to.
 39987  	VpnServerConfigurationResourceID *string `json:"vpnServerConfigurationResourceId,omitempty"`
 39988  	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
 39989  	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
 39990  }
 39991  
 39992  // VM describes a Virtual Machine.
 39993  type VM struct {
 39994  	// ID - Resource ID.
 39995  	ID *string `json:"id,omitempty"`
 39996  	// Name - READ-ONLY; Resource name.
 39997  	Name *string `json:"name,omitempty"`
 39998  	// Type - READ-ONLY; Resource type.
 39999  	Type *string `json:"type,omitempty"`
 40000  	// Location - Resource location.
 40001  	Location *string `json:"location,omitempty"`
 40002  	// Tags - Resource tags.
 40003  	Tags map[string]*string `json:"tags"`
 40004  }
 40005  
 40006  // MarshalJSON is the custom marshaler for VM.
 40007  func (vVar VM) MarshalJSON() ([]byte, error) {
 40008  	objectMap := make(map[string]interface{})
 40009  	if vVar.ID != nil {
 40010  		objectMap["id"] = vVar.ID
 40011  	}
 40012  	if vVar.Location != nil {
 40013  		objectMap["location"] = vVar.Location
 40014  	}
 40015  	if vVar.Tags != nil {
 40016  		objectMap["tags"] = vVar.Tags
 40017  	}
 40018  	return json.Marshal(objectMap)
 40019  }
 40020  
 40021  // VnetRoute list of routes that control routing from VirtualHub into a virtual network connection.
 40022  type VnetRoute struct {
 40023  	// StaticRoutes - List of all Static Routes.
 40024  	StaticRoutes *[]StaticRoute `json:"staticRoutes,omitempty"`
 40025  }
 40026  
 40027  // VpnClientConfiguration vpnClientConfiguration for P2S client.
 40028  type VpnClientConfiguration struct {
 40029  	// VpnClientAddressPool - The reference to the address space resource which represents Address space for P2S VpnClient.
 40030  	VpnClientAddressPool *AddressSpace `json:"vpnClientAddressPool,omitempty"`
 40031  	// VpnClientRootCertificates - VpnClientRootCertificate for virtual network gateway.
 40032  	VpnClientRootCertificates *[]VpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
 40033  	// VpnClientRevokedCertificates - VpnClientRevokedCertificate for Virtual network gateway.
 40034  	VpnClientRevokedCertificates *[]VpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
 40035  	// VpnClientProtocols - VpnClientProtocols for Virtual network gateway.
 40036  	VpnClientProtocols *[]VpnClientProtocol `json:"vpnClientProtocols,omitempty"`
 40037  	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for virtual network gateway P2S client.
 40038  	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
 40039  	// RadiusServerAddress - The radius server address property of the VirtualNetworkGateway resource for vpn client connection.
 40040  	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
 40041  	// RadiusServerSecret - The radius secret property of the VirtualNetworkGateway resource for vpn client connection.
 40042  	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
 40043  	// RadiusServers - The radiusServers property for multiple radius server configuration.
 40044  	RadiusServers *[]RadiusServer `json:"radiusServers,omitempty"`
 40045  	// AadTenant - The AADTenant property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
 40046  	AadTenant *string `json:"aadTenant,omitempty"`
 40047  	// AadAudience - The AADAudience property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
 40048  	AadAudience *string `json:"aadAudience,omitempty"`
 40049  	// AadIssuer - The AADIssuer property of the VirtualNetworkGateway resource for vpn client connection used for AAD authentication.
 40050  	AadIssuer *string `json:"aadIssuer,omitempty"`
 40051  }
 40052  
 40053  // VpnClientConnectionHealth vpnClientConnectionHealth properties.
 40054  type VpnClientConnectionHealth struct {
 40055  	// TotalIngressBytesTransferred - READ-ONLY; Total of the Ingress Bytes Transferred in this P2S Vpn connection.
 40056  	TotalIngressBytesTransferred *int64 `json:"totalIngressBytesTransferred,omitempty"`
 40057  	// TotalEgressBytesTransferred - READ-ONLY; Total of the Egress Bytes Transferred in this connection.
 40058  	TotalEgressBytesTransferred *int64 `json:"totalEgressBytesTransferred,omitempty"`
 40059  	// VpnClientConnectionsCount - The total of p2s vpn clients connected at this time to this P2SVpnGateway.
 40060  	VpnClientConnectionsCount *int32 `json:"vpnClientConnectionsCount,omitempty"`
 40061  	// AllocatedIPAddresses - List of allocated ip addresses to the connected p2s vpn clients.
 40062  	AllocatedIPAddresses *[]string `json:"allocatedIpAddresses,omitempty"`
 40063  }
 40064  
 40065  // MarshalJSON is the custom marshaler for VpnClientConnectionHealth.
 40066  func (vcch VpnClientConnectionHealth) MarshalJSON() ([]byte, error) {
 40067  	objectMap := make(map[string]interface{})
 40068  	if vcch.VpnClientConnectionsCount != nil {
 40069  		objectMap["vpnClientConnectionsCount"] = vcch.VpnClientConnectionsCount
 40070  	}
 40071  	if vcch.AllocatedIPAddresses != nil {
 40072  		objectMap["allocatedIpAddresses"] = vcch.AllocatedIPAddresses
 40073  	}
 40074  	return json.Marshal(objectMap)
 40075  }
 40076  
 40077  // VpnClientConnectionHealthDetail VPN client connection health detail.
 40078  type VpnClientConnectionHealthDetail struct {
 40079  	// VpnConnectionID - READ-ONLY; The vpn client Id.
 40080  	VpnConnectionID *string `json:"vpnConnectionId,omitempty"`
 40081  	// VpnConnectionDuration - READ-ONLY; The duration time of a connected vpn client.
 40082  	VpnConnectionDuration *int64 `json:"vpnConnectionDuration,omitempty"`
 40083  	// VpnConnectionTime - READ-ONLY; The start time of a connected vpn client.
 40084  	VpnConnectionTime *string `json:"vpnConnectionTime,omitempty"`
 40085  	// PublicIPAddress - READ-ONLY; The public Ip of a connected vpn client.
 40086  	PublicIPAddress *string `json:"publicIpAddress,omitempty"`
 40087  	// PrivateIPAddress - READ-ONLY; The assigned private Ip of a connected vpn client.
 40088  	PrivateIPAddress *string `json:"privateIpAddress,omitempty"`
 40089  	// VpnUserName - READ-ONLY; The user name of a connected vpn client.
 40090  	VpnUserName *string `json:"vpnUserName,omitempty"`
 40091  	// MaxBandwidth - READ-ONLY; The max band width.
 40092  	MaxBandwidth *int64 `json:"maxBandwidth,omitempty"`
 40093  	// EgressPacketsTransferred - READ-ONLY; The egress packets per second.
 40094  	EgressPacketsTransferred *int64 `json:"egressPacketsTransferred,omitempty"`
 40095  	// EgressBytesTransferred - READ-ONLY; The egress bytes per second.
 40096  	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
 40097  	// IngressPacketsTransferred - READ-ONLY; The ingress packets per second.
 40098  	IngressPacketsTransferred *int64 `json:"ingressPacketsTransferred,omitempty"`
 40099  	// IngressBytesTransferred - READ-ONLY; The ingress bytes per second.
 40100  	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
 40101  	// MaxPacketsPerSecond - READ-ONLY; The max packets transferred per second.
 40102  	MaxPacketsPerSecond *int64 `json:"maxPacketsPerSecond,omitempty"`
 40103  }
 40104  
 40105  // MarshalJSON is the custom marshaler for VpnClientConnectionHealthDetail.
 40106  func (vcchd VpnClientConnectionHealthDetail) MarshalJSON() ([]byte, error) {
 40107  	objectMap := make(map[string]interface{})
 40108  	return json.Marshal(objectMap)
 40109  }
 40110  
 40111  // VpnClientConnectionHealthDetailListResult list of virtual network gateway vpn client connection health.
 40112  type VpnClientConnectionHealthDetailListResult struct {
 40113  	autorest.Response `json:"-"`
 40114  	// Value - List of vpn client connection health.
 40115  	Value *[]VpnClientConnectionHealthDetail `json:"value,omitempty"`
 40116  }
 40117  
 40118  // VpnClientIPsecParameters an IPSec parameters for a virtual network gateway P2S connection.
 40119  type VpnClientIPsecParameters struct {
 40120  	autorest.Response `json:"-"`
 40121  	// SaLifeTimeSeconds - The IPSec Security Association (also called Quick Mode or Phase 2 SA) lifetime in seconds for P2S client.
 40122  	SaLifeTimeSeconds *int32 `json:"saLifeTimeSeconds,omitempty"`
 40123  	// SaDataSizeKilobytes - The IPSec Security Association (also called Quick Mode or Phase 2 SA) payload size in KB for P2S client..
 40124  	SaDataSizeKilobytes *int32 `json:"saDataSizeKilobytes,omitempty"`
 40125  	// IpsecEncryption - The IPSec encryption algorithm (IKE phase 1). Possible values include: 'IpsecEncryptionNone', 'IpsecEncryptionDES', 'IpsecEncryptionDES3', 'IpsecEncryptionAES128', 'IpsecEncryptionAES192', 'IpsecEncryptionAES256', 'IpsecEncryptionGCMAES128', 'IpsecEncryptionGCMAES192', 'IpsecEncryptionGCMAES256'
 40126  	IpsecEncryption IpsecEncryption `json:"ipsecEncryption,omitempty"`
 40127  	// IpsecIntegrity - The IPSec integrity algorithm (IKE phase 1). Possible values include: 'IpsecIntegrityMD5', 'IpsecIntegritySHA1', 'IpsecIntegritySHA256', 'IpsecIntegrityGCMAES128', 'IpsecIntegrityGCMAES192', 'IpsecIntegrityGCMAES256'
 40128  	IpsecIntegrity IpsecIntegrity `json:"ipsecIntegrity,omitempty"`
 40129  	// IkeEncryption - The IKE encryption algorithm (IKE phase 2). Possible values include: 'DES', 'DES3', 'AES128', 'AES192', 'AES256', 'GCMAES256', 'GCMAES128'
 40130  	IkeEncryption IkeEncryption `json:"ikeEncryption,omitempty"`
 40131  	// IkeIntegrity - The IKE integrity algorithm (IKE phase 2). Possible values include: 'IkeIntegrityMD5', 'IkeIntegritySHA1', 'IkeIntegritySHA256', 'IkeIntegritySHA384', 'IkeIntegrityGCMAES256', 'IkeIntegrityGCMAES128'
 40132  	IkeIntegrity IkeIntegrity `json:"ikeIntegrity,omitempty"`
 40133  	// DhGroup - The DH Group used in IKE Phase 1 for initial SA. Possible values include: 'None', 'DHGroup1', 'DHGroup2', 'DHGroup14', 'DHGroup2048', 'ECP256', 'ECP384', 'DHGroup24'
 40134  	DhGroup DhGroup `json:"dhGroup,omitempty"`
 40135  	// PfsGroup - The Pfs Group used in IKE Phase 2 for new child SA. Possible values include: 'PfsGroupNone', 'PfsGroupPFS1', 'PfsGroupPFS2', 'PfsGroupPFS2048', 'PfsGroupECP256', 'PfsGroupECP384', 'PfsGroupPFS24', 'PfsGroupPFS14', 'PfsGroupPFSMM'
 40136  	PfsGroup PfsGroup `json:"pfsGroup,omitempty"`
 40137  }
 40138  
 40139  // VpnClientParameters vpn Client Parameters for package generation.
 40140  type VpnClientParameters struct {
 40141  	// ProcessorArchitecture - VPN client Processor Architecture. Possible values include: 'Amd64', 'X86'
 40142  	ProcessorArchitecture ProcessorArchitecture `json:"processorArchitecture,omitempty"`
 40143  	// AuthenticationMethod - VPN client authentication method. Possible values include: 'EAPTLS', 'EAPMSCHAPv2'
 40144  	AuthenticationMethod AuthenticationMethod `json:"authenticationMethod,omitempty"`
 40145  	// 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.
 40146  	RadiusServerAuthCertificate *string `json:"radiusServerAuthCertificate,omitempty"`
 40147  	// ClientRootCertificates - A list of client root certificates public certificate data encoded as Base-64 strings. Optional parameter for external radius based authentication with EAPTLS.
 40148  	ClientRootCertificates *[]string `json:"clientRootCertificates,omitempty"`
 40149  }
 40150  
 40151  // VpnClientRevokedCertificate VPN client revoked certificate of virtual network gateway.
 40152  type VpnClientRevokedCertificate struct {
 40153  	// VpnClientRevokedCertificatePropertiesFormat - Properties of the vpn client revoked certificate.
 40154  	*VpnClientRevokedCertificatePropertiesFormat `json:"properties,omitempty"`
 40155  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 40156  	Name *string `json:"name,omitempty"`
 40157  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 40158  	Etag *string `json:"etag,omitempty"`
 40159  	// ID - Resource ID.
 40160  	ID *string `json:"id,omitempty"`
 40161  }
 40162  
 40163  // MarshalJSON is the custom marshaler for VpnClientRevokedCertificate.
 40164  func (vcrc VpnClientRevokedCertificate) MarshalJSON() ([]byte, error) {
 40165  	objectMap := make(map[string]interface{})
 40166  	if vcrc.VpnClientRevokedCertificatePropertiesFormat != nil {
 40167  		objectMap["properties"] = vcrc.VpnClientRevokedCertificatePropertiesFormat
 40168  	}
 40169  	if vcrc.Name != nil {
 40170  		objectMap["name"] = vcrc.Name
 40171  	}
 40172  	if vcrc.ID != nil {
 40173  		objectMap["id"] = vcrc.ID
 40174  	}
 40175  	return json.Marshal(objectMap)
 40176  }
 40177  
 40178  // UnmarshalJSON is the custom unmarshaler for VpnClientRevokedCertificate struct.
 40179  func (vcrc *VpnClientRevokedCertificate) UnmarshalJSON(body []byte) error {
 40180  	var m map[string]*json.RawMessage
 40181  	err := json.Unmarshal(body, &m)
 40182  	if err != nil {
 40183  		return err
 40184  	}
 40185  	for k, v := range m {
 40186  		switch k {
 40187  		case "properties":
 40188  			if v != nil {
 40189  				var vpnClientRevokedCertificatePropertiesFormat VpnClientRevokedCertificatePropertiesFormat
 40190  				err = json.Unmarshal(*v, &vpnClientRevokedCertificatePropertiesFormat)
 40191  				if err != nil {
 40192  					return err
 40193  				}
 40194  				vcrc.VpnClientRevokedCertificatePropertiesFormat = &vpnClientRevokedCertificatePropertiesFormat
 40195  			}
 40196  		case "name":
 40197  			if v != nil {
 40198  				var name string
 40199  				err = json.Unmarshal(*v, &name)
 40200  				if err != nil {
 40201  					return err
 40202  				}
 40203  				vcrc.Name = &name
 40204  			}
 40205  		case "etag":
 40206  			if v != nil {
 40207  				var etag string
 40208  				err = json.Unmarshal(*v, &etag)
 40209  				if err != nil {
 40210  					return err
 40211  				}
 40212  				vcrc.Etag = &etag
 40213  			}
 40214  		case "id":
 40215  			if v != nil {
 40216  				var ID string
 40217  				err = json.Unmarshal(*v, &ID)
 40218  				if err != nil {
 40219  					return err
 40220  				}
 40221  				vcrc.ID = &ID
 40222  			}
 40223  		}
 40224  	}
 40225  
 40226  	return nil
 40227  }
 40228  
 40229  // VpnClientRevokedCertificatePropertiesFormat properties of the revoked VPN client certificate of virtual
 40230  // network gateway.
 40231  type VpnClientRevokedCertificatePropertiesFormat struct {
 40232  	// Thumbprint - The revoked VPN client certificate thumbprint.
 40233  	Thumbprint *string `json:"thumbprint,omitempty"`
 40234  	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client revoked certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 40235  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 40236  }
 40237  
 40238  // MarshalJSON is the custom marshaler for VpnClientRevokedCertificatePropertiesFormat.
 40239  func (vcrcpf VpnClientRevokedCertificatePropertiesFormat) MarshalJSON() ([]byte, error) {
 40240  	objectMap := make(map[string]interface{})
 40241  	if vcrcpf.Thumbprint != nil {
 40242  		objectMap["thumbprint"] = vcrcpf.Thumbprint
 40243  	}
 40244  	return json.Marshal(objectMap)
 40245  }
 40246  
 40247  // VpnClientRootCertificate VPN client root certificate of virtual network gateway.
 40248  type VpnClientRootCertificate struct {
 40249  	// VpnClientRootCertificatePropertiesFormat - Properties of the vpn client root certificate.
 40250  	*VpnClientRootCertificatePropertiesFormat `json:"properties,omitempty"`
 40251  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 40252  	Name *string `json:"name,omitempty"`
 40253  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 40254  	Etag *string `json:"etag,omitempty"`
 40255  	// ID - Resource ID.
 40256  	ID *string `json:"id,omitempty"`
 40257  }
 40258  
 40259  // MarshalJSON is the custom marshaler for VpnClientRootCertificate.
 40260  func (vcrc VpnClientRootCertificate) MarshalJSON() ([]byte, error) {
 40261  	objectMap := make(map[string]interface{})
 40262  	if vcrc.VpnClientRootCertificatePropertiesFormat != nil {
 40263  		objectMap["properties"] = vcrc.VpnClientRootCertificatePropertiesFormat
 40264  	}
 40265  	if vcrc.Name != nil {
 40266  		objectMap["name"] = vcrc.Name
 40267  	}
 40268  	if vcrc.ID != nil {
 40269  		objectMap["id"] = vcrc.ID
 40270  	}
 40271  	return json.Marshal(objectMap)
 40272  }
 40273  
 40274  // UnmarshalJSON is the custom unmarshaler for VpnClientRootCertificate struct.
 40275  func (vcrc *VpnClientRootCertificate) UnmarshalJSON(body []byte) error {
 40276  	var m map[string]*json.RawMessage
 40277  	err := json.Unmarshal(body, &m)
 40278  	if err != nil {
 40279  		return err
 40280  	}
 40281  	for k, v := range m {
 40282  		switch k {
 40283  		case "properties":
 40284  			if v != nil {
 40285  				var vpnClientRootCertificatePropertiesFormat VpnClientRootCertificatePropertiesFormat
 40286  				err = json.Unmarshal(*v, &vpnClientRootCertificatePropertiesFormat)
 40287  				if err != nil {
 40288  					return err
 40289  				}
 40290  				vcrc.VpnClientRootCertificatePropertiesFormat = &vpnClientRootCertificatePropertiesFormat
 40291  			}
 40292  		case "name":
 40293  			if v != nil {
 40294  				var name string
 40295  				err = json.Unmarshal(*v, &name)
 40296  				if err != nil {
 40297  					return err
 40298  				}
 40299  				vcrc.Name = &name
 40300  			}
 40301  		case "etag":
 40302  			if v != nil {
 40303  				var etag string
 40304  				err = json.Unmarshal(*v, &etag)
 40305  				if err != nil {
 40306  					return err
 40307  				}
 40308  				vcrc.Etag = &etag
 40309  			}
 40310  		case "id":
 40311  			if v != nil {
 40312  				var ID string
 40313  				err = json.Unmarshal(*v, &ID)
 40314  				if err != nil {
 40315  					return err
 40316  				}
 40317  				vcrc.ID = &ID
 40318  			}
 40319  		}
 40320  	}
 40321  
 40322  	return nil
 40323  }
 40324  
 40325  // VpnClientRootCertificatePropertiesFormat properties of SSL certificates of application gateway.
 40326  type VpnClientRootCertificatePropertiesFormat struct {
 40327  	// PublicCertData - The certificate public data.
 40328  	PublicCertData *string `json:"publicCertData,omitempty"`
 40329  	// ProvisioningState - READ-ONLY; The provisioning state of the VPN client root certificate resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 40330  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 40331  }
 40332  
 40333  // MarshalJSON is the custom marshaler for VpnClientRootCertificatePropertiesFormat.
 40334  func (vcrcpf VpnClientRootCertificatePropertiesFormat) MarshalJSON() ([]byte, error) {
 40335  	objectMap := make(map[string]interface{})
 40336  	if vcrcpf.PublicCertData != nil {
 40337  		objectMap["publicCertData"] = vcrcpf.PublicCertData
 40338  	}
 40339  	return json.Marshal(objectMap)
 40340  }
 40341  
 40342  // VpnConnection vpnConnection Resource.
 40343  type VpnConnection struct {
 40344  	autorest.Response `json:"-"`
 40345  	// VpnConnectionProperties - Properties of the VPN connection.
 40346  	*VpnConnectionProperties `json:"properties,omitempty"`
 40347  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 40348  	Name *string `json:"name,omitempty"`
 40349  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 40350  	Etag *string `json:"etag,omitempty"`
 40351  	// ID - Resource ID.
 40352  	ID *string `json:"id,omitempty"`
 40353  }
 40354  
 40355  // MarshalJSON is the custom marshaler for VpnConnection.
 40356  func (vc VpnConnection) MarshalJSON() ([]byte, error) {
 40357  	objectMap := make(map[string]interface{})
 40358  	if vc.VpnConnectionProperties != nil {
 40359  		objectMap["properties"] = vc.VpnConnectionProperties
 40360  	}
 40361  	if vc.Name != nil {
 40362  		objectMap["name"] = vc.Name
 40363  	}
 40364  	if vc.ID != nil {
 40365  		objectMap["id"] = vc.ID
 40366  	}
 40367  	return json.Marshal(objectMap)
 40368  }
 40369  
 40370  // UnmarshalJSON is the custom unmarshaler for VpnConnection struct.
 40371  func (vc *VpnConnection) UnmarshalJSON(body []byte) error {
 40372  	var m map[string]*json.RawMessage
 40373  	err := json.Unmarshal(body, &m)
 40374  	if err != nil {
 40375  		return err
 40376  	}
 40377  	for k, v := range m {
 40378  		switch k {
 40379  		case "properties":
 40380  			if v != nil {
 40381  				var vpnConnectionProperties VpnConnectionProperties
 40382  				err = json.Unmarshal(*v, &vpnConnectionProperties)
 40383  				if err != nil {
 40384  					return err
 40385  				}
 40386  				vc.VpnConnectionProperties = &vpnConnectionProperties
 40387  			}
 40388  		case "name":
 40389  			if v != nil {
 40390  				var name string
 40391  				err = json.Unmarshal(*v, &name)
 40392  				if err != nil {
 40393  					return err
 40394  				}
 40395  				vc.Name = &name
 40396  			}
 40397  		case "etag":
 40398  			if v != nil {
 40399  				var etag string
 40400  				err = json.Unmarshal(*v, &etag)
 40401  				if err != nil {
 40402  					return err
 40403  				}
 40404  				vc.Etag = &etag
 40405  			}
 40406  		case "id":
 40407  			if v != nil {
 40408  				var ID string
 40409  				err = json.Unmarshal(*v, &ID)
 40410  				if err != nil {
 40411  					return err
 40412  				}
 40413  				vc.ID = &ID
 40414  			}
 40415  		}
 40416  	}
 40417  
 40418  	return nil
 40419  }
 40420  
 40421  // VpnConnectionProperties parameters for VpnConnection.
 40422  type VpnConnectionProperties struct {
 40423  	// RemoteVpnSite - Id of the connected vpn site.
 40424  	RemoteVpnSite *SubResource `json:"remoteVpnSite,omitempty"`
 40425  	// RoutingWeight - Routing weight for vpn connection.
 40426  	RoutingWeight *int32 `json:"routingWeight,omitempty"`
 40427  	// DpdTimeoutSeconds - The dead peer detection timeout for a vpn connection in seconds.
 40428  	DpdTimeoutSeconds *int32 `json:"dpdTimeoutSeconds,omitempty"`
 40429  	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
 40430  	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
 40431  	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
 40432  	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
 40433  	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
 40434  	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
 40435  	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
 40436  	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
 40437  	// ConnectionBandwidth - Expected bandwidth in MBPS.
 40438  	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
 40439  	// SharedKey - SharedKey for the vpn connection.
 40440  	SharedKey *string `json:"sharedKey,omitempty"`
 40441  	// EnableBgp - EnableBgp flag.
 40442  	EnableBgp *bool `json:"enableBgp,omitempty"`
 40443  	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
 40444  	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
 40445  	// IpsecPolicies - The IPSec Policies to be considered by this connection.
 40446  	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
 40447  	// EnableRateLimiting - EnableBgp flag.
 40448  	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
 40449  	// EnableInternetSecurity - Enable internet security.
 40450  	EnableInternetSecurity *bool `json:"enableInternetSecurity,omitempty"`
 40451  	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
 40452  	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
 40453  	// ProvisioningState - READ-ONLY; The provisioning state of the VPN connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 40454  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 40455  	// VpnLinkConnections - List of all vpn site link connections to the gateway.
 40456  	VpnLinkConnections *[]VpnSiteLinkConnection `json:"vpnLinkConnections,omitempty"`
 40457  	// RoutingConfiguration - The Routing Configuration indicating the associated and propagated route tables on this connection.
 40458  	RoutingConfiguration *RoutingConfiguration `json:"routingConfiguration,omitempty"`
 40459  }
 40460  
 40461  // MarshalJSON is the custom marshaler for VpnConnectionProperties.
 40462  func (vcp VpnConnectionProperties) MarshalJSON() ([]byte, error) {
 40463  	objectMap := make(map[string]interface{})
 40464  	if vcp.RemoteVpnSite != nil {
 40465  		objectMap["remoteVpnSite"] = vcp.RemoteVpnSite
 40466  	}
 40467  	if vcp.RoutingWeight != nil {
 40468  		objectMap["routingWeight"] = vcp.RoutingWeight
 40469  	}
 40470  	if vcp.DpdTimeoutSeconds != nil {
 40471  		objectMap["dpdTimeoutSeconds"] = vcp.DpdTimeoutSeconds
 40472  	}
 40473  	if vcp.ConnectionStatus != "" {
 40474  		objectMap["connectionStatus"] = vcp.ConnectionStatus
 40475  	}
 40476  	if vcp.VpnConnectionProtocolType != "" {
 40477  		objectMap["vpnConnectionProtocolType"] = vcp.VpnConnectionProtocolType
 40478  	}
 40479  	if vcp.ConnectionBandwidth != nil {
 40480  		objectMap["connectionBandwidth"] = vcp.ConnectionBandwidth
 40481  	}
 40482  	if vcp.SharedKey != nil {
 40483  		objectMap["sharedKey"] = vcp.SharedKey
 40484  	}
 40485  	if vcp.EnableBgp != nil {
 40486  		objectMap["enableBgp"] = vcp.EnableBgp
 40487  	}
 40488  	if vcp.UsePolicyBasedTrafficSelectors != nil {
 40489  		objectMap["usePolicyBasedTrafficSelectors"] = vcp.UsePolicyBasedTrafficSelectors
 40490  	}
 40491  	if vcp.IpsecPolicies != nil {
 40492  		objectMap["ipsecPolicies"] = vcp.IpsecPolicies
 40493  	}
 40494  	if vcp.EnableRateLimiting != nil {
 40495  		objectMap["enableRateLimiting"] = vcp.EnableRateLimiting
 40496  	}
 40497  	if vcp.EnableInternetSecurity != nil {
 40498  		objectMap["enableInternetSecurity"] = vcp.EnableInternetSecurity
 40499  	}
 40500  	if vcp.UseLocalAzureIPAddress != nil {
 40501  		objectMap["useLocalAzureIpAddress"] = vcp.UseLocalAzureIPAddress
 40502  	}
 40503  	if vcp.VpnLinkConnections != nil {
 40504  		objectMap["vpnLinkConnections"] = vcp.VpnLinkConnections
 40505  	}
 40506  	if vcp.RoutingConfiguration != nil {
 40507  		objectMap["routingConfiguration"] = vcp.RoutingConfiguration
 40508  	}
 40509  	return json.Marshal(objectMap)
 40510  }
 40511  
 40512  // VpnConnectionsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 40513  // long-running operation.
 40514  type VpnConnectionsCreateOrUpdateFuture struct {
 40515  	azure.FutureAPI
 40516  	// Result returns the result of the asynchronous operation.
 40517  	// If the operation has not completed it will return an error.
 40518  	Result func(VpnConnectionsClient) (VpnConnection, error)
 40519  }
 40520  
 40521  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 40522  func (future *VpnConnectionsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 40523  	var azFuture azure.Future
 40524  	if err := json.Unmarshal(body, &azFuture); err != nil {
 40525  		return err
 40526  	}
 40527  	future.FutureAPI = &azFuture
 40528  	future.Result = future.result
 40529  	return nil
 40530  }
 40531  
 40532  // result is the default implementation for VpnConnectionsCreateOrUpdateFuture.Result.
 40533  func (future *VpnConnectionsCreateOrUpdateFuture) result(client VpnConnectionsClient) (vc VpnConnection, err error) {
 40534  	var done bool
 40535  	done, err = future.DoneWithContext(context.Background(), client)
 40536  	if err != nil {
 40537  		err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 40538  		return
 40539  	}
 40540  	if !done {
 40541  		vc.Response.Response = future.Response()
 40542  		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsCreateOrUpdateFuture")
 40543  		return
 40544  	}
 40545  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 40546  	if vc.Response.Response, err = future.GetResult(sender); err == nil && vc.Response.Response.StatusCode != http.StatusNoContent {
 40547  		vc, err = client.CreateOrUpdateResponder(vc.Response.Response)
 40548  		if err != nil {
 40549  			err = autorest.NewErrorWithError(err, "network.VpnConnectionsCreateOrUpdateFuture", "Result", vc.Response.Response, "Failure responding to request")
 40550  		}
 40551  	}
 40552  	return
 40553  }
 40554  
 40555  // VpnConnectionsDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 40556  // operation.
 40557  type VpnConnectionsDeleteFuture struct {
 40558  	azure.FutureAPI
 40559  	// Result returns the result of the asynchronous operation.
 40560  	// If the operation has not completed it will return an error.
 40561  	Result func(VpnConnectionsClient) (autorest.Response, error)
 40562  }
 40563  
 40564  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 40565  func (future *VpnConnectionsDeleteFuture) UnmarshalJSON(body []byte) error {
 40566  	var azFuture azure.Future
 40567  	if err := json.Unmarshal(body, &azFuture); err != nil {
 40568  		return err
 40569  	}
 40570  	future.FutureAPI = &azFuture
 40571  	future.Result = future.result
 40572  	return nil
 40573  }
 40574  
 40575  // result is the default implementation for VpnConnectionsDeleteFuture.Result.
 40576  func (future *VpnConnectionsDeleteFuture) result(client VpnConnectionsClient) (ar autorest.Response, err error) {
 40577  	var done bool
 40578  	done, err = future.DoneWithContext(context.Background(), client)
 40579  	if err != nil {
 40580  		err = autorest.NewErrorWithError(err, "network.VpnConnectionsDeleteFuture", "Result", future.Response(), "Polling failure")
 40581  		return
 40582  	}
 40583  	if !done {
 40584  		ar.Response = future.Response()
 40585  		err = azure.NewAsyncOpIncompleteError("network.VpnConnectionsDeleteFuture")
 40586  		return
 40587  	}
 40588  	ar.Response = future.Response()
 40589  	return
 40590  }
 40591  
 40592  // VpnDeviceScriptParameters vpn device configuration script generation parameters.
 40593  type VpnDeviceScriptParameters struct {
 40594  	// Vendor - The vendor for the vpn device.
 40595  	Vendor *string `json:"vendor,omitempty"`
 40596  	// DeviceFamily - The device family for the vpn device.
 40597  	DeviceFamily *string `json:"deviceFamily,omitempty"`
 40598  	// FirmwareVersion - The firmware version for the vpn device.
 40599  	FirmwareVersion *string `json:"firmwareVersion,omitempty"`
 40600  }
 40601  
 40602  // VpnGateway vpnGateway Resource.
 40603  type VpnGateway struct {
 40604  	autorest.Response `json:"-"`
 40605  	// VpnGatewayProperties - Properties of the VPN gateway.
 40606  	*VpnGatewayProperties `json:"properties,omitempty"`
 40607  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 40608  	Etag *string `json:"etag,omitempty"`
 40609  	// ID - Resource ID.
 40610  	ID *string `json:"id,omitempty"`
 40611  	// Name - READ-ONLY; Resource name.
 40612  	Name *string `json:"name,omitempty"`
 40613  	// Type - READ-ONLY; Resource type.
 40614  	Type *string `json:"type,omitempty"`
 40615  	// Location - Resource location.
 40616  	Location *string `json:"location,omitempty"`
 40617  	// Tags - Resource tags.
 40618  	Tags map[string]*string `json:"tags"`
 40619  }
 40620  
 40621  // MarshalJSON is the custom marshaler for VpnGateway.
 40622  func (vg VpnGateway) MarshalJSON() ([]byte, error) {
 40623  	objectMap := make(map[string]interface{})
 40624  	if vg.VpnGatewayProperties != nil {
 40625  		objectMap["properties"] = vg.VpnGatewayProperties
 40626  	}
 40627  	if vg.ID != nil {
 40628  		objectMap["id"] = vg.ID
 40629  	}
 40630  	if vg.Location != nil {
 40631  		objectMap["location"] = vg.Location
 40632  	}
 40633  	if vg.Tags != nil {
 40634  		objectMap["tags"] = vg.Tags
 40635  	}
 40636  	return json.Marshal(objectMap)
 40637  }
 40638  
 40639  // UnmarshalJSON is the custom unmarshaler for VpnGateway struct.
 40640  func (vg *VpnGateway) UnmarshalJSON(body []byte) error {
 40641  	var m map[string]*json.RawMessage
 40642  	err := json.Unmarshal(body, &m)
 40643  	if err != nil {
 40644  		return err
 40645  	}
 40646  	for k, v := range m {
 40647  		switch k {
 40648  		case "properties":
 40649  			if v != nil {
 40650  				var vpnGatewayProperties VpnGatewayProperties
 40651  				err = json.Unmarshal(*v, &vpnGatewayProperties)
 40652  				if err != nil {
 40653  					return err
 40654  				}
 40655  				vg.VpnGatewayProperties = &vpnGatewayProperties
 40656  			}
 40657  		case "etag":
 40658  			if v != nil {
 40659  				var etag string
 40660  				err = json.Unmarshal(*v, &etag)
 40661  				if err != nil {
 40662  					return err
 40663  				}
 40664  				vg.Etag = &etag
 40665  			}
 40666  		case "id":
 40667  			if v != nil {
 40668  				var ID string
 40669  				err = json.Unmarshal(*v, &ID)
 40670  				if err != nil {
 40671  					return err
 40672  				}
 40673  				vg.ID = &ID
 40674  			}
 40675  		case "name":
 40676  			if v != nil {
 40677  				var name string
 40678  				err = json.Unmarshal(*v, &name)
 40679  				if err != nil {
 40680  					return err
 40681  				}
 40682  				vg.Name = &name
 40683  			}
 40684  		case "type":
 40685  			if v != nil {
 40686  				var typeVar string
 40687  				err = json.Unmarshal(*v, &typeVar)
 40688  				if err != nil {
 40689  					return err
 40690  				}
 40691  				vg.Type = &typeVar
 40692  			}
 40693  		case "location":
 40694  			if v != nil {
 40695  				var location string
 40696  				err = json.Unmarshal(*v, &location)
 40697  				if err != nil {
 40698  					return err
 40699  				}
 40700  				vg.Location = &location
 40701  			}
 40702  		case "tags":
 40703  			if v != nil {
 40704  				var tags map[string]*string
 40705  				err = json.Unmarshal(*v, &tags)
 40706  				if err != nil {
 40707  					return err
 40708  				}
 40709  				vg.Tags = tags
 40710  			}
 40711  		}
 40712  	}
 40713  
 40714  	return nil
 40715  }
 40716  
 40717  // VpnGatewayProperties parameters for VpnGateway.
 40718  type VpnGatewayProperties struct {
 40719  	// VirtualHub - The VirtualHub to which the gateway belongs.
 40720  	VirtualHub *SubResource `json:"virtualHub,omitempty"`
 40721  	// Connections - List of all vpn connections to the gateway.
 40722  	Connections *[]VpnConnection `json:"connections,omitempty"`
 40723  	// BgpSettings - Local network gateway's BGP speaker settings.
 40724  	BgpSettings *BgpSettings `json:"bgpSettings,omitempty"`
 40725  	// ProvisioningState - READ-ONLY; The provisioning state of the VPN gateway resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 40726  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 40727  	// VpnGatewayScaleUnit - The scale unit for this vpn gateway.
 40728  	VpnGatewayScaleUnit *int32 `json:"vpnGatewayScaleUnit,omitempty"`
 40729  }
 40730  
 40731  // MarshalJSON is the custom marshaler for VpnGatewayProperties.
 40732  func (vgp VpnGatewayProperties) MarshalJSON() ([]byte, error) {
 40733  	objectMap := make(map[string]interface{})
 40734  	if vgp.VirtualHub != nil {
 40735  		objectMap["virtualHub"] = vgp.VirtualHub
 40736  	}
 40737  	if vgp.Connections != nil {
 40738  		objectMap["connections"] = vgp.Connections
 40739  	}
 40740  	if vgp.BgpSettings != nil {
 40741  		objectMap["bgpSettings"] = vgp.BgpSettings
 40742  	}
 40743  	if vgp.VpnGatewayScaleUnit != nil {
 40744  		objectMap["vpnGatewayScaleUnit"] = vgp.VpnGatewayScaleUnit
 40745  	}
 40746  	return json.Marshal(objectMap)
 40747  }
 40748  
 40749  // VpnGatewaysCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a
 40750  // long-running operation.
 40751  type VpnGatewaysCreateOrUpdateFuture struct {
 40752  	azure.FutureAPI
 40753  	// Result returns the result of the asynchronous operation.
 40754  	// If the operation has not completed it will return an error.
 40755  	Result func(VpnGatewaysClient) (VpnGateway, error)
 40756  }
 40757  
 40758  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 40759  func (future *VpnGatewaysCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 40760  	var azFuture azure.Future
 40761  	if err := json.Unmarshal(body, &azFuture); err != nil {
 40762  		return err
 40763  	}
 40764  	future.FutureAPI = &azFuture
 40765  	future.Result = future.result
 40766  	return nil
 40767  }
 40768  
 40769  // result is the default implementation for VpnGatewaysCreateOrUpdateFuture.Result.
 40770  func (future *VpnGatewaysCreateOrUpdateFuture) result(client VpnGatewaysClient) (vg VpnGateway, err error) {
 40771  	var done bool
 40772  	done, err = future.DoneWithContext(context.Background(), client)
 40773  	if err != nil {
 40774  		err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 40775  		return
 40776  	}
 40777  	if !done {
 40778  		vg.Response.Response = future.Response()
 40779  		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysCreateOrUpdateFuture")
 40780  		return
 40781  	}
 40782  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 40783  	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
 40784  		vg, err = client.CreateOrUpdateResponder(vg.Response.Response)
 40785  		if err != nil {
 40786  			err = autorest.NewErrorWithError(err, "network.VpnGatewaysCreateOrUpdateFuture", "Result", vg.Response.Response, "Failure responding to request")
 40787  		}
 40788  	}
 40789  	return
 40790  }
 40791  
 40792  // VpnGatewaysDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 40793  // operation.
 40794  type VpnGatewaysDeleteFuture struct {
 40795  	azure.FutureAPI
 40796  	// Result returns the result of the asynchronous operation.
 40797  	// If the operation has not completed it will return an error.
 40798  	Result func(VpnGatewaysClient) (autorest.Response, error)
 40799  }
 40800  
 40801  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 40802  func (future *VpnGatewaysDeleteFuture) UnmarshalJSON(body []byte) error {
 40803  	var azFuture azure.Future
 40804  	if err := json.Unmarshal(body, &azFuture); err != nil {
 40805  		return err
 40806  	}
 40807  	future.FutureAPI = &azFuture
 40808  	future.Result = future.result
 40809  	return nil
 40810  }
 40811  
 40812  // result is the default implementation for VpnGatewaysDeleteFuture.Result.
 40813  func (future *VpnGatewaysDeleteFuture) result(client VpnGatewaysClient) (ar autorest.Response, err error) {
 40814  	var done bool
 40815  	done, err = future.DoneWithContext(context.Background(), client)
 40816  	if err != nil {
 40817  		err = autorest.NewErrorWithError(err, "network.VpnGatewaysDeleteFuture", "Result", future.Response(), "Polling failure")
 40818  		return
 40819  	}
 40820  	if !done {
 40821  		ar.Response = future.Response()
 40822  		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysDeleteFuture")
 40823  		return
 40824  	}
 40825  	ar.Response = future.Response()
 40826  	return
 40827  }
 40828  
 40829  // VpnGatewaysResetFuture an abstraction for monitoring and retrieving the results of a long-running
 40830  // operation.
 40831  type VpnGatewaysResetFuture struct {
 40832  	azure.FutureAPI
 40833  	// Result returns the result of the asynchronous operation.
 40834  	// If the operation has not completed it will return an error.
 40835  	Result func(VpnGatewaysClient) (VpnGateway, error)
 40836  }
 40837  
 40838  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 40839  func (future *VpnGatewaysResetFuture) UnmarshalJSON(body []byte) error {
 40840  	var azFuture azure.Future
 40841  	if err := json.Unmarshal(body, &azFuture); err != nil {
 40842  		return err
 40843  	}
 40844  	future.FutureAPI = &azFuture
 40845  	future.Result = future.result
 40846  	return nil
 40847  }
 40848  
 40849  // result is the default implementation for VpnGatewaysResetFuture.Result.
 40850  func (future *VpnGatewaysResetFuture) result(client VpnGatewaysClient) (vg VpnGateway, err error) {
 40851  	var done bool
 40852  	done, err = future.DoneWithContext(context.Background(), client)
 40853  	if err != nil {
 40854  		err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", future.Response(), "Polling failure")
 40855  		return
 40856  	}
 40857  	if !done {
 40858  		vg.Response.Response = future.Response()
 40859  		err = azure.NewAsyncOpIncompleteError("network.VpnGatewaysResetFuture")
 40860  		return
 40861  	}
 40862  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 40863  	if vg.Response.Response, err = future.GetResult(sender); err == nil && vg.Response.Response.StatusCode != http.StatusNoContent {
 40864  		vg, err = client.ResetResponder(vg.Response.Response)
 40865  		if err != nil {
 40866  			err = autorest.NewErrorWithError(err, "network.VpnGatewaysResetFuture", "Result", vg.Response.Response, "Failure responding to request")
 40867  		}
 40868  	}
 40869  	return
 40870  }
 40871  
 40872  // VpnLinkBgpSettings BGP settings details for a link.
 40873  type VpnLinkBgpSettings struct {
 40874  	// Asn - The BGP speaker's ASN.
 40875  	Asn *int64 `json:"asn,omitempty"`
 40876  	// BgpPeeringAddress - The BGP peering address and BGP identifier of this BGP speaker.
 40877  	BgpPeeringAddress *string `json:"bgpPeeringAddress,omitempty"`
 40878  }
 40879  
 40880  // VpnLinkProviderProperties list of properties of a link provider.
 40881  type VpnLinkProviderProperties struct {
 40882  	// LinkProviderName - Name of the link provider.
 40883  	LinkProviderName *string `json:"linkProviderName,omitempty"`
 40884  	// LinkSpeedInMbps - Link speed.
 40885  	LinkSpeedInMbps *int32 `json:"linkSpeedInMbps,omitempty"`
 40886  }
 40887  
 40888  // VpnPacketCaptureStartParameters start packet capture parameters on virtual network gateway.
 40889  type VpnPacketCaptureStartParameters struct {
 40890  	// FilterData - Start Packet capture parameters.
 40891  	FilterData *string `json:"filterData,omitempty"`
 40892  }
 40893  
 40894  // VpnPacketCaptureStopParameters stop packet capture parameters.
 40895  type VpnPacketCaptureStopParameters struct {
 40896  	// SasURL - SAS url for packet capture on virtual network gateway.
 40897  	SasURL *string `json:"sasUrl,omitempty"`
 40898  }
 40899  
 40900  // VpnProfileResponse vpn Profile Response for package generation.
 40901  type VpnProfileResponse struct {
 40902  	autorest.Response `json:"-"`
 40903  	// ProfileURL - URL to the VPN profile.
 40904  	ProfileURL *string `json:"profileUrl,omitempty"`
 40905  }
 40906  
 40907  // VpnServerConfigRadiusClientRootCertificate properties of the Radius client root certificate of
 40908  // VpnServerConfiguration.
 40909  type VpnServerConfigRadiusClientRootCertificate struct {
 40910  	// Name - The certificate name.
 40911  	Name *string `json:"name,omitempty"`
 40912  	// Thumbprint - The Radius client root certificate thumbprint.
 40913  	Thumbprint *string `json:"thumbprint,omitempty"`
 40914  }
 40915  
 40916  // VpnServerConfigRadiusServerRootCertificate properties of Radius Server root certificate of
 40917  // VpnServerConfiguration.
 40918  type VpnServerConfigRadiusServerRootCertificate struct {
 40919  	// Name - The certificate name.
 40920  	Name *string `json:"name,omitempty"`
 40921  	// PublicCertData - The certificate public data.
 40922  	PublicCertData *string `json:"publicCertData,omitempty"`
 40923  }
 40924  
 40925  // VpnServerConfiguration vpnServerConfiguration Resource.
 40926  type VpnServerConfiguration struct {
 40927  	autorest.Response `json:"-"`
 40928  	// VpnServerConfigurationProperties - Properties of the P2SVpnServer configuration.
 40929  	*VpnServerConfigurationProperties `json:"properties,omitempty"`
 40930  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 40931  	Etag *string `json:"etag,omitempty"`
 40932  	// ID - Resource ID.
 40933  	ID *string `json:"id,omitempty"`
 40934  	// Name - READ-ONLY; Resource name.
 40935  	Name *string `json:"name,omitempty"`
 40936  	// Type - READ-ONLY; Resource type.
 40937  	Type *string `json:"type,omitempty"`
 40938  	// Location - Resource location.
 40939  	Location *string `json:"location,omitempty"`
 40940  	// Tags - Resource tags.
 40941  	Tags map[string]*string `json:"tags"`
 40942  }
 40943  
 40944  // MarshalJSON is the custom marshaler for VpnServerConfiguration.
 40945  func (vsc VpnServerConfiguration) MarshalJSON() ([]byte, error) {
 40946  	objectMap := make(map[string]interface{})
 40947  	if vsc.VpnServerConfigurationProperties != nil {
 40948  		objectMap["properties"] = vsc.VpnServerConfigurationProperties
 40949  	}
 40950  	if vsc.ID != nil {
 40951  		objectMap["id"] = vsc.ID
 40952  	}
 40953  	if vsc.Location != nil {
 40954  		objectMap["location"] = vsc.Location
 40955  	}
 40956  	if vsc.Tags != nil {
 40957  		objectMap["tags"] = vsc.Tags
 40958  	}
 40959  	return json.Marshal(objectMap)
 40960  }
 40961  
 40962  // UnmarshalJSON is the custom unmarshaler for VpnServerConfiguration struct.
 40963  func (vsc *VpnServerConfiguration) UnmarshalJSON(body []byte) error {
 40964  	var m map[string]*json.RawMessage
 40965  	err := json.Unmarshal(body, &m)
 40966  	if err != nil {
 40967  		return err
 40968  	}
 40969  	for k, v := range m {
 40970  		switch k {
 40971  		case "properties":
 40972  			if v != nil {
 40973  				var vpnServerConfigurationProperties VpnServerConfigurationProperties
 40974  				err = json.Unmarshal(*v, &vpnServerConfigurationProperties)
 40975  				if err != nil {
 40976  					return err
 40977  				}
 40978  				vsc.VpnServerConfigurationProperties = &vpnServerConfigurationProperties
 40979  			}
 40980  		case "etag":
 40981  			if v != nil {
 40982  				var etag string
 40983  				err = json.Unmarshal(*v, &etag)
 40984  				if err != nil {
 40985  					return err
 40986  				}
 40987  				vsc.Etag = &etag
 40988  			}
 40989  		case "id":
 40990  			if v != nil {
 40991  				var ID string
 40992  				err = json.Unmarshal(*v, &ID)
 40993  				if err != nil {
 40994  					return err
 40995  				}
 40996  				vsc.ID = &ID
 40997  			}
 40998  		case "name":
 40999  			if v != nil {
 41000  				var name string
 41001  				err = json.Unmarshal(*v, &name)
 41002  				if err != nil {
 41003  					return err
 41004  				}
 41005  				vsc.Name = &name
 41006  			}
 41007  		case "type":
 41008  			if v != nil {
 41009  				var typeVar string
 41010  				err = json.Unmarshal(*v, &typeVar)
 41011  				if err != nil {
 41012  					return err
 41013  				}
 41014  				vsc.Type = &typeVar
 41015  			}
 41016  		case "location":
 41017  			if v != nil {
 41018  				var location string
 41019  				err = json.Unmarshal(*v, &location)
 41020  				if err != nil {
 41021  					return err
 41022  				}
 41023  				vsc.Location = &location
 41024  			}
 41025  		case "tags":
 41026  			if v != nil {
 41027  				var tags map[string]*string
 41028  				err = json.Unmarshal(*v, &tags)
 41029  				if err != nil {
 41030  					return err
 41031  				}
 41032  				vsc.Tags = tags
 41033  			}
 41034  		}
 41035  	}
 41036  
 41037  	return nil
 41038  }
 41039  
 41040  // VpnServerConfigurationProperties parameters for VpnServerConfiguration.
 41041  type VpnServerConfigurationProperties struct {
 41042  	// Name - The name of the VpnServerConfiguration that is unique within a resource group.
 41043  	Name *string `json:"name,omitempty"`
 41044  	// VpnProtocols - VPN protocols for the VpnServerConfiguration.
 41045  	VpnProtocols *[]VpnGatewayTunnelingProtocol `json:"vpnProtocols,omitempty"`
 41046  	// VpnAuthenticationTypes - VPN authentication types for the VpnServerConfiguration.
 41047  	VpnAuthenticationTypes *[]VpnAuthenticationType `json:"vpnAuthenticationTypes,omitempty"`
 41048  	// VpnClientRootCertificates - VPN client root certificate of VpnServerConfiguration.
 41049  	VpnClientRootCertificates *[]VpnServerConfigVpnClientRootCertificate `json:"vpnClientRootCertificates,omitempty"`
 41050  	// VpnClientRevokedCertificates - VPN client revoked certificate of VpnServerConfiguration.
 41051  	VpnClientRevokedCertificates *[]VpnServerConfigVpnClientRevokedCertificate `json:"vpnClientRevokedCertificates,omitempty"`
 41052  	// RadiusServerRootCertificates - Radius Server root certificate of VpnServerConfiguration.
 41053  	RadiusServerRootCertificates *[]VpnServerConfigRadiusServerRootCertificate `json:"radiusServerRootCertificates,omitempty"`
 41054  	// RadiusClientRootCertificates - Radius client root certificate of VpnServerConfiguration.
 41055  	RadiusClientRootCertificates *[]VpnServerConfigRadiusClientRootCertificate `json:"radiusClientRootCertificates,omitempty"`
 41056  	// VpnClientIpsecPolicies - VpnClientIpsecPolicies for VpnServerConfiguration.
 41057  	VpnClientIpsecPolicies *[]IpsecPolicy `json:"vpnClientIpsecPolicies,omitempty"`
 41058  	// RadiusServerAddress - The radius server address property of the VpnServerConfiguration resource for point to site client connection.
 41059  	RadiusServerAddress *string `json:"radiusServerAddress,omitempty"`
 41060  	// RadiusServerSecret - The radius secret property of the VpnServerConfiguration resource for point to site client connection.
 41061  	RadiusServerSecret *string `json:"radiusServerSecret,omitempty"`
 41062  	// RadiusServers - Multiple Radius Server configuration for VpnServerConfiguration.
 41063  	RadiusServers *[]RadiusServer `json:"radiusServers,omitempty"`
 41064  	// AadAuthenticationParameters - The set of aad vpn authentication parameters.
 41065  	AadAuthenticationParameters *AadAuthenticationParameters `json:"aadAuthenticationParameters,omitempty"`
 41066  	// ProvisioningState - READ-ONLY; The provisioning state of the VpnServerConfiguration resource. Possible values are: 'Updating', 'Deleting', and 'Failed'.
 41067  	ProvisioningState *string `json:"provisioningState,omitempty"`
 41068  	// P2SVpnGateways - READ-ONLY; List of references to P2SVpnGateways.
 41069  	P2SVpnGateways *[]P2SVpnGateway `json:"p2SVpnGateways,omitempty"`
 41070  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 41071  	Etag *string `json:"etag,omitempty"`
 41072  }
 41073  
 41074  // MarshalJSON is the custom marshaler for VpnServerConfigurationProperties.
 41075  func (vscp VpnServerConfigurationProperties) MarshalJSON() ([]byte, error) {
 41076  	objectMap := make(map[string]interface{})
 41077  	if vscp.Name != nil {
 41078  		objectMap["name"] = vscp.Name
 41079  	}
 41080  	if vscp.VpnProtocols != nil {
 41081  		objectMap["vpnProtocols"] = vscp.VpnProtocols
 41082  	}
 41083  	if vscp.VpnAuthenticationTypes != nil {
 41084  		objectMap["vpnAuthenticationTypes"] = vscp.VpnAuthenticationTypes
 41085  	}
 41086  	if vscp.VpnClientRootCertificates != nil {
 41087  		objectMap["vpnClientRootCertificates"] = vscp.VpnClientRootCertificates
 41088  	}
 41089  	if vscp.VpnClientRevokedCertificates != nil {
 41090  		objectMap["vpnClientRevokedCertificates"] = vscp.VpnClientRevokedCertificates
 41091  	}
 41092  	if vscp.RadiusServerRootCertificates != nil {
 41093  		objectMap["radiusServerRootCertificates"] = vscp.RadiusServerRootCertificates
 41094  	}
 41095  	if vscp.RadiusClientRootCertificates != nil {
 41096  		objectMap["radiusClientRootCertificates"] = vscp.RadiusClientRootCertificates
 41097  	}
 41098  	if vscp.VpnClientIpsecPolicies != nil {
 41099  		objectMap["vpnClientIpsecPolicies"] = vscp.VpnClientIpsecPolicies
 41100  	}
 41101  	if vscp.RadiusServerAddress != nil {
 41102  		objectMap["radiusServerAddress"] = vscp.RadiusServerAddress
 41103  	}
 41104  	if vscp.RadiusServerSecret != nil {
 41105  		objectMap["radiusServerSecret"] = vscp.RadiusServerSecret
 41106  	}
 41107  	if vscp.RadiusServers != nil {
 41108  		objectMap["radiusServers"] = vscp.RadiusServers
 41109  	}
 41110  	if vscp.AadAuthenticationParameters != nil {
 41111  		objectMap["aadAuthenticationParameters"] = vscp.AadAuthenticationParameters
 41112  	}
 41113  	return json.Marshal(objectMap)
 41114  }
 41115  
 41116  // VpnServerConfigurationsAssociatedWithVirtualWanListFuture an abstraction for monitoring and retrieving
 41117  // the results of a long-running operation.
 41118  type VpnServerConfigurationsAssociatedWithVirtualWanListFuture struct {
 41119  	azure.FutureAPI
 41120  	// Result returns the result of the asynchronous operation.
 41121  	// If the operation has not completed it will return an error.
 41122  	Result func(VpnServerConfigurationsAssociatedWithVirtualWanClient) (VpnServerConfigurationsResponse, error)
 41123  }
 41124  
 41125  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 41126  func (future *VpnServerConfigurationsAssociatedWithVirtualWanListFuture) UnmarshalJSON(body []byte) error {
 41127  	var azFuture azure.Future
 41128  	if err := json.Unmarshal(body, &azFuture); err != nil {
 41129  		return err
 41130  	}
 41131  	future.FutureAPI = &azFuture
 41132  	future.Result = future.result
 41133  	return nil
 41134  }
 41135  
 41136  // result is the default implementation for VpnServerConfigurationsAssociatedWithVirtualWanListFuture.Result.
 41137  func (future *VpnServerConfigurationsAssociatedWithVirtualWanListFuture) result(client VpnServerConfigurationsAssociatedWithVirtualWanClient) (vscr VpnServerConfigurationsResponse, err error) {
 41138  	var done bool
 41139  	done, err = future.DoneWithContext(context.Background(), client)
 41140  	if err != nil {
 41141  		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture", "Result", future.Response(), "Polling failure")
 41142  		return
 41143  	}
 41144  	if !done {
 41145  		vscr.Response.Response = future.Response()
 41146  		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture")
 41147  		return
 41148  	}
 41149  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 41150  	if vscr.Response.Response, err = future.GetResult(sender); err == nil && vscr.Response.Response.StatusCode != http.StatusNoContent {
 41151  		vscr, err = client.ListResponder(vscr.Response.Response)
 41152  		if err != nil {
 41153  			err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsAssociatedWithVirtualWanListFuture", "Result", vscr.Response.Response, "Failure responding to request")
 41154  		}
 41155  	}
 41156  	return
 41157  }
 41158  
 41159  // VpnServerConfigurationsCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of
 41160  // a long-running operation.
 41161  type VpnServerConfigurationsCreateOrUpdateFuture struct {
 41162  	azure.FutureAPI
 41163  	// Result returns the result of the asynchronous operation.
 41164  	// If the operation has not completed it will return an error.
 41165  	Result func(VpnServerConfigurationsClient) (VpnServerConfiguration, error)
 41166  }
 41167  
 41168  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 41169  func (future *VpnServerConfigurationsCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 41170  	var azFuture azure.Future
 41171  	if err := json.Unmarshal(body, &azFuture); err != nil {
 41172  		return err
 41173  	}
 41174  	future.FutureAPI = &azFuture
 41175  	future.Result = future.result
 41176  	return nil
 41177  }
 41178  
 41179  // result is the default implementation for VpnServerConfigurationsCreateOrUpdateFuture.Result.
 41180  func (future *VpnServerConfigurationsCreateOrUpdateFuture) result(client VpnServerConfigurationsClient) (vsc VpnServerConfiguration, err error) {
 41181  	var done bool
 41182  	done, err = future.DoneWithContext(context.Background(), client)
 41183  	if err != nil {
 41184  		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 41185  		return
 41186  	}
 41187  	if !done {
 41188  		vsc.Response.Response = future.Response()
 41189  		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsCreateOrUpdateFuture")
 41190  		return
 41191  	}
 41192  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 41193  	if vsc.Response.Response, err = future.GetResult(sender); err == nil && vsc.Response.Response.StatusCode != http.StatusNoContent {
 41194  		vsc, err = client.CreateOrUpdateResponder(vsc.Response.Response)
 41195  		if err != nil {
 41196  			err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsCreateOrUpdateFuture", "Result", vsc.Response.Response, "Failure responding to request")
 41197  		}
 41198  	}
 41199  	return
 41200  }
 41201  
 41202  // VpnServerConfigurationsDeleteFuture an abstraction for monitoring and retrieving the results of a
 41203  // long-running operation.
 41204  type VpnServerConfigurationsDeleteFuture struct {
 41205  	azure.FutureAPI
 41206  	// Result returns the result of the asynchronous operation.
 41207  	// If the operation has not completed it will return an error.
 41208  	Result func(VpnServerConfigurationsClient) (autorest.Response, error)
 41209  }
 41210  
 41211  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 41212  func (future *VpnServerConfigurationsDeleteFuture) UnmarshalJSON(body []byte) error {
 41213  	var azFuture azure.Future
 41214  	if err := json.Unmarshal(body, &azFuture); err != nil {
 41215  		return err
 41216  	}
 41217  	future.FutureAPI = &azFuture
 41218  	future.Result = future.result
 41219  	return nil
 41220  }
 41221  
 41222  // result is the default implementation for VpnServerConfigurationsDeleteFuture.Result.
 41223  func (future *VpnServerConfigurationsDeleteFuture) result(client VpnServerConfigurationsClient) (ar autorest.Response, err error) {
 41224  	var done bool
 41225  	done, err = future.DoneWithContext(context.Background(), client)
 41226  	if err != nil {
 41227  		err = autorest.NewErrorWithError(err, "network.VpnServerConfigurationsDeleteFuture", "Result", future.Response(), "Polling failure")
 41228  		return
 41229  	}
 41230  	if !done {
 41231  		ar.Response = future.Response()
 41232  		err = azure.NewAsyncOpIncompleteError("network.VpnServerConfigurationsDeleteFuture")
 41233  		return
 41234  	}
 41235  	ar.Response = future.Response()
 41236  	return
 41237  }
 41238  
 41239  // VpnServerConfigurationsResponse vpnServerConfigurations list associated with VirtualWan Response.
 41240  type VpnServerConfigurationsResponse struct {
 41241  	autorest.Response `json:"-"`
 41242  	// VpnServerConfigurationResourceIds - List of VpnServerConfigurations associated with VirtualWan.
 41243  	VpnServerConfigurationResourceIds *[]string `json:"vpnServerConfigurationResourceIds,omitempty"`
 41244  }
 41245  
 41246  // VpnServerConfigVpnClientRevokedCertificate properties of the revoked VPN client certificate of
 41247  // VpnServerConfiguration.
 41248  type VpnServerConfigVpnClientRevokedCertificate struct {
 41249  	// Name - The certificate name.
 41250  	Name *string `json:"name,omitempty"`
 41251  	// Thumbprint - The revoked VPN client certificate thumbprint.
 41252  	Thumbprint *string `json:"thumbprint,omitempty"`
 41253  }
 41254  
 41255  // VpnServerConfigVpnClientRootCertificate properties of VPN client root certificate of
 41256  // VpnServerConfiguration.
 41257  type VpnServerConfigVpnClientRootCertificate struct {
 41258  	// Name - The certificate name.
 41259  	Name *string `json:"name,omitempty"`
 41260  	// PublicCertData - The certificate public data.
 41261  	PublicCertData *string `json:"publicCertData,omitempty"`
 41262  }
 41263  
 41264  // VpnSite vpnSite Resource.
 41265  type VpnSite struct {
 41266  	autorest.Response `json:"-"`
 41267  	// VpnSiteProperties - Properties of the VPN site.
 41268  	*VpnSiteProperties `json:"properties,omitempty"`
 41269  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 41270  	Etag *string `json:"etag,omitempty"`
 41271  	// ID - Resource ID.
 41272  	ID *string `json:"id,omitempty"`
 41273  	// Name - READ-ONLY; Resource name.
 41274  	Name *string `json:"name,omitempty"`
 41275  	// Type - READ-ONLY; Resource type.
 41276  	Type *string `json:"type,omitempty"`
 41277  	// Location - Resource location.
 41278  	Location *string `json:"location,omitempty"`
 41279  	// Tags - Resource tags.
 41280  	Tags map[string]*string `json:"tags"`
 41281  }
 41282  
 41283  // MarshalJSON is the custom marshaler for VpnSite.
 41284  func (vs VpnSite) MarshalJSON() ([]byte, error) {
 41285  	objectMap := make(map[string]interface{})
 41286  	if vs.VpnSiteProperties != nil {
 41287  		objectMap["properties"] = vs.VpnSiteProperties
 41288  	}
 41289  	if vs.ID != nil {
 41290  		objectMap["id"] = vs.ID
 41291  	}
 41292  	if vs.Location != nil {
 41293  		objectMap["location"] = vs.Location
 41294  	}
 41295  	if vs.Tags != nil {
 41296  		objectMap["tags"] = vs.Tags
 41297  	}
 41298  	return json.Marshal(objectMap)
 41299  }
 41300  
 41301  // UnmarshalJSON is the custom unmarshaler for VpnSite struct.
 41302  func (vs *VpnSite) UnmarshalJSON(body []byte) error {
 41303  	var m map[string]*json.RawMessage
 41304  	err := json.Unmarshal(body, &m)
 41305  	if err != nil {
 41306  		return err
 41307  	}
 41308  	for k, v := range m {
 41309  		switch k {
 41310  		case "properties":
 41311  			if v != nil {
 41312  				var vpnSiteProperties VpnSiteProperties
 41313  				err = json.Unmarshal(*v, &vpnSiteProperties)
 41314  				if err != nil {
 41315  					return err
 41316  				}
 41317  				vs.VpnSiteProperties = &vpnSiteProperties
 41318  			}
 41319  		case "etag":
 41320  			if v != nil {
 41321  				var etag string
 41322  				err = json.Unmarshal(*v, &etag)
 41323  				if err != nil {
 41324  					return err
 41325  				}
 41326  				vs.Etag = &etag
 41327  			}
 41328  		case "id":
 41329  			if v != nil {
 41330  				var ID string
 41331  				err = json.Unmarshal(*v, &ID)
 41332  				if err != nil {
 41333  					return err
 41334  				}
 41335  				vs.ID = &ID
 41336  			}
 41337  		case "name":
 41338  			if v != nil {
 41339  				var name string
 41340  				err = json.Unmarshal(*v, &name)
 41341  				if err != nil {
 41342  					return err
 41343  				}
 41344  				vs.Name = &name
 41345  			}
 41346  		case "type":
 41347  			if v != nil {
 41348  				var typeVar string
 41349  				err = json.Unmarshal(*v, &typeVar)
 41350  				if err != nil {
 41351  					return err
 41352  				}
 41353  				vs.Type = &typeVar
 41354  			}
 41355  		case "location":
 41356  			if v != nil {
 41357  				var location string
 41358  				err = json.Unmarshal(*v, &location)
 41359  				if err != nil {
 41360  					return err
 41361  				}
 41362  				vs.Location = &location
 41363  			}
 41364  		case "tags":
 41365  			if v != nil {
 41366  				var tags map[string]*string
 41367  				err = json.Unmarshal(*v, &tags)
 41368  				if err != nil {
 41369  					return err
 41370  				}
 41371  				vs.Tags = tags
 41372  			}
 41373  		}
 41374  	}
 41375  
 41376  	return nil
 41377  }
 41378  
 41379  // VpnSiteID vpnSite Resource.
 41380  type VpnSiteID struct {
 41381  	// VpnSite - READ-ONLY; The resource-uri of the vpn-site for which config is to be fetched.
 41382  	VpnSite *string `json:"vpnSite,omitempty"`
 41383  }
 41384  
 41385  // MarshalJSON is the custom marshaler for VpnSiteID.
 41386  func (vsi VpnSiteID) MarshalJSON() ([]byte, error) {
 41387  	objectMap := make(map[string]interface{})
 41388  	return json.Marshal(objectMap)
 41389  }
 41390  
 41391  // VpnSiteLink vpnSiteLink Resource.
 41392  type VpnSiteLink struct {
 41393  	autorest.Response `json:"-"`
 41394  	// VpnSiteLinkProperties - Properties of the VPN site link.
 41395  	*VpnSiteLinkProperties `json:"properties,omitempty"`
 41396  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 41397  	Etag *string `json:"etag,omitempty"`
 41398  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 41399  	Name *string `json:"name,omitempty"`
 41400  	// Type - READ-ONLY; Resource type.
 41401  	Type *string `json:"type,omitempty"`
 41402  	// ID - Resource ID.
 41403  	ID *string `json:"id,omitempty"`
 41404  }
 41405  
 41406  // MarshalJSON is the custom marshaler for VpnSiteLink.
 41407  func (vsl VpnSiteLink) MarshalJSON() ([]byte, error) {
 41408  	objectMap := make(map[string]interface{})
 41409  	if vsl.VpnSiteLinkProperties != nil {
 41410  		objectMap["properties"] = vsl.VpnSiteLinkProperties
 41411  	}
 41412  	if vsl.Name != nil {
 41413  		objectMap["name"] = vsl.Name
 41414  	}
 41415  	if vsl.ID != nil {
 41416  		objectMap["id"] = vsl.ID
 41417  	}
 41418  	return json.Marshal(objectMap)
 41419  }
 41420  
 41421  // UnmarshalJSON is the custom unmarshaler for VpnSiteLink struct.
 41422  func (vsl *VpnSiteLink) UnmarshalJSON(body []byte) error {
 41423  	var m map[string]*json.RawMessage
 41424  	err := json.Unmarshal(body, &m)
 41425  	if err != nil {
 41426  		return err
 41427  	}
 41428  	for k, v := range m {
 41429  		switch k {
 41430  		case "properties":
 41431  			if v != nil {
 41432  				var vpnSiteLinkProperties VpnSiteLinkProperties
 41433  				err = json.Unmarshal(*v, &vpnSiteLinkProperties)
 41434  				if err != nil {
 41435  					return err
 41436  				}
 41437  				vsl.VpnSiteLinkProperties = &vpnSiteLinkProperties
 41438  			}
 41439  		case "etag":
 41440  			if v != nil {
 41441  				var etag string
 41442  				err = json.Unmarshal(*v, &etag)
 41443  				if err != nil {
 41444  					return err
 41445  				}
 41446  				vsl.Etag = &etag
 41447  			}
 41448  		case "name":
 41449  			if v != nil {
 41450  				var name string
 41451  				err = json.Unmarshal(*v, &name)
 41452  				if err != nil {
 41453  					return err
 41454  				}
 41455  				vsl.Name = &name
 41456  			}
 41457  		case "type":
 41458  			if v != nil {
 41459  				var typeVar string
 41460  				err = json.Unmarshal(*v, &typeVar)
 41461  				if err != nil {
 41462  					return err
 41463  				}
 41464  				vsl.Type = &typeVar
 41465  			}
 41466  		case "id":
 41467  			if v != nil {
 41468  				var ID string
 41469  				err = json.Unmarshal(*v, &ID)
 41470  				if err != nil {
 41471  					return err
 41472  				}
 41473  				vsl.ID = &ID
 41474  			}
 41475  		}
 41476  	}
 41477  
 41478  	return nil
 41479  }
 41480  
 41481  // VpnSiteLinkConnection vpnSiteLinkConnection Resource.
 41482  type VpnSiteLinkConnection struct {
 41483  	autorest.Response `json:"-"`
 41484  	// VpnSiteLinkConnectionProperties - Properties of the VPN site link connection.
 41485  	*VpnSiteLinkConnectionProperties `json:"properties,omitempty"`
 41486  	// Name - The name of the resource that is unique within a resource group. This name can be used to access the resource.
 41487  	Name *string `json:"name,omitempty"`
 41488  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 41489  	Etag *string `json:"etag,omitempty"`
 41490  	// Type - READ-ONLY; Resource type.
 41491  	Type *string `json:"type,omitempty"`
 41492  	// ID - Resource ID.
 41493  	ID *string `json:"id,omitempty"`
 41494  }
 41495  
 41496  // MarshalJSON is the custom marshaler for VpnSiteLinkConnection.
 41497  func (vslc VpnSiteLinkConnection) MarshalJSON() ([]byte, error) {
 41498  	objectMap := make(map[string]interface{})
 41499  	if vslc.VpnSiteLinkConnectionProperties != nil {
 41500  		objectMap["properties"] = vslc.VpnSiteLinkConnectionProperties
 41501  	}
 41502  	if vslc.Name != nil {
 41503  		objectMap["name"] = vslc.Name
 41504  	}
 41505  	if vslc.ID != nil {
 41506  		objectMap["id"] = vslc.ID
 41507  	}
 41508  	return json.Marshal(objectMap)
 41509  }
 41510  
 41511  // UnmarshalJSON is the custom unmarshaler for VpnSiteLinkConnection struct.
 41512  func (vslc *VpnSiteLinkConnection) UnmarshalJSON(body []byte) error {
 41513  	var m map[string]*json.RawMessage
 41514  	err := json.Unmarshal(body, &m)
 41515  	if err != nil {
 41516  		return err
 41517  	}
 41518  	for k, v := range m {
 41519  		switch k {
 41520  		case "properties":
 41521  			if v != nil {
 41522  				var vpnSiteLinkConnectionProperties VpnSiteLinkConnectionProperties
 41523  				err = json.Unmarshal(*v, &vpnSiteLinkConnectionProperties)
 41524  				if err != nil {
 41525  					return err
 41526  				}
 41527  				vslc.VpnSiteLinkConnectionProperties = &vpnSiteLinkConnectionProperties
 41528  			}
 41529  		case "name":
 41530  			if v != nil {
 41531  				var name string
 41532  				err = json.Unmarshal(*v, &name)
 41533  				if err != nil {
 41534  					return err
 41535  				}
 41536  				vslc.Name = &name
 41537  			}
 41538  		case "etag":
 41539  			if v != nil {
 41540  				var etag string
 41541  				err = json.Unmarshal(*v, &etag)
 41542  				if err != nil {
 41543  					return err
 41544  				}
 41545  				vslc.Etag = &etag
 41546  			}
 41547  		case "type":
 41548  			if v != nil {
 41549  				var typeVar string
 41550  				err = json.Unmarshal(*v, &typeVar)
 41551  				if err != nil {
 41552  					return err
 41553  				}
 41554  				vslc.Type = &typeVar
 41555  			}
 41556  		case "id":
 41557  			if v != nil {
 41558  				var ID string
 41559  				err = json.Unmarshal(*v, &ID)
 41560  				if err != nil {
 41561  					return err
 41562  				}
 41563  				vslc.ID = &ID
 41564  			}
 41565  		}
 41566  	}
 41567  
 41568  	return nil
 41569  }
 41570  
 41571  // VpnSiteLinkConnectionProperties parameters for VpnConnection.
 41572  type VpnSiteLinkConnectionProperties struct {
 41573  	// VpnSiteLink - Id of the connected vpn site link.
 41574  	VpnSiteLink *SubResource `json:"vpnSiteLink,omitempty"`
 41575  	// RoutingWeight - Routing weight for vpn connection.
 41576  	RoutingWeight *int32 `json:"routingWeight,omitempty"`
 41577  	// ConnectionStatus - The connection status. Possible values include: 'VpnConnectionStatusUnknown', 'VpnConnectionStatusConnecting', 'VpnConnectionStatusConnected', 'VpnConnectionStatusNotConnected'
 41578  	ConnectionStatus VpnConnectionStatus `json:"connectionStatus,omitempty"`
 41579  	// VpnConnectionProtocolType - Connection protocol used for this connection. Possible values include: 'IKEv2', 'IKEv1'
 41580  	VpnConnectionProtocolType VirtualNetworkGatewayConnectionProtocol `json:"vpnConnectionProtocolType,omitempty"`
 41581  	// IngressBytesTransferred - READ-ONLY; Ingress bytes transferred.
 41582  	IngressBytesTransferred *int64 `json:"ingressBytesTransferred,omitempty"`
 41583  	// EgressBytesTransferred - READ-ONLY; Egress bytes transferred.
 41584  	EgressBytesTransferred *int64 `json:"egressBytesTransferred,omitempty"`
 41585  	// ConnectionBandwidth - Expected bandwidth in MBPS.
 41586  	ConnectionBandwidth *int32 `json:"connectionBandwidth,omitempty"`
 41587  	// SharedKey - SharedKey for the vpn connection.
 41588  	SharedKey *string `json:"sharedKey,omitempty"`
 41589  	// EnableBgp - EnableBgp flag.
 41590  	EnableBgp *bool `json:"enableBgp,omitempty"`
 41591  	// UsePolicyBasedTrafficSelectors - Enable policy-based traffic selectors.
 41592  	UsePolicyBasedTrafficSelectors *bool `json:"usePolicyBasedTrafficSelectors,omitempty"`
 41593  	// IpsecPolicies - The IPSec Policies to be considered by this connection.
 41594  	IpsecPolicies *[]IpsecPolicy `json:"ipsecPolicies,omitempty"`
 41595  	// EnableRateLimiting - EnableBgp flag.
 41596  	EnableRateLimiting *bool `json:"enableRateLimiting,omitempty"`
 41597  	// UseLocalAzureIPAddress - Use local azure ip to initiate connection.
 41598  	UseLocalAzureIPAddress *bool `json:"useLocalAzureIpAddress,omitempty"`
 41599  	// ProvisioningState - READ-ONLY; The provisioning state of the VPN site link connection resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 41600  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 41601  }
 41602  
 41603  // MarshalJSON is the custom marshaler for VpnSiteLinkConnectionProperties.
 41604  func (vslcp VpnSiteLinkConnectionProperties) MarshalJSON() ([]byte, error) {
 41605  	objectMap := make(map[string]interface{})
 41606  	if vslcp.VpnSiteLink != nil {
 41607  		objectMap["vpnSiteLink"] = vslcp.VpnSiteLink
 41608  	}
 41609  	if vslcp.RoutingWeight != nil {
 41610  		objectMap["routingWeight"] = vslcp.RoutingWeight
 41611  	}
 41612  	if vslcp.ConnectionStatus != "" {
 41613  		objectMap["connectionStatus"] = vslcp.ConnectionStatus
 41614  	}
 41615  	if vslcp.VpnConnectionProtocolType != "" {
 41616  		objectMap["vpnConnectionProtocolType"] = vslcp.VpnConnectionProtocolType
 41617  	}
 41618  	if vslcp.ConnectionBandwidth != nil {
 41619  		objectMap["connectionBandwidth"] = vslcp.ConnectionBandwidth
 41620  	}
 41621  	if vslcp.SharedKey != nil {
 41622  		objectMap["sharedKey"] = vslcp.SharedKey
 41623  	}
 41624  	if vslcp.EnableBgp != nil {
 41625  		objectMap["enableBgp"] = vslcp.EnableBgp
 41626  	}
 41627  	if vslcp.UsePolicyBasedTrafficSelectors != nil {
 41628  		objectMap["usePolicyBasedTrafficSelectors"] = vslcp.UsePolicyBasedTrafficSelectors
 41629  	}
 41630  	if vslcp.IpsecPolicies != nil {
 41631  		objectMap["ipsecPolicies"] = vslcp.IpsecPolicies
 41632  	}
 41633  	if vslcp.EnableRateLimiting != nil {
 41634  		objectMap["enableRateLimiting"] = vslcp.EnableRateLimiting
 41635  	}
 41636  	if vslcp.UseLocalAzureIPAddress != nil {
 41637  		objectMap["useLocalAzureIpAddress"] = vslcp.UseLocalAzureIPAddress
 41638  	}
 41639  	return json.Marshal(objectMap)
 41640  }
 41641  
 41642  // VpnSiteLinkProperties parameters for VpnSite.
 41643  type VpnSiteLinkProperties struct {
 41644  	// LinkProperties - The link provider properties.
 41645  	LinkProperties *VpnLinkProviderProperties `json:"linkProperties,omitempty"`
 41646  	// IPAddress - The ip-address for the vpn-site-link.
 41647  	IPAddress *string `json:"ipAddress,omitempty"`
 41648  	// Fqdn - FQDN of vpn-site-link.
 41649  	Fqdn *string `json:"fqdn,omitempty"`
 41650  	// BgpProperties - The set of bgp properties.
 41651  	BgpProperties *VpnLinkBgpSettings `json:"bgpProperties,omitempty"`
 41652  	// ProvisioningState - READ-ONLY; The provisioning state of the VPN site link resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 41653  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 41654  }
 41655  
 41656  // MarshalJSON is the custom marshaler for VpnSiteLinkProperties.
 41657  func (vslp VpnSiteLinkProperties) MarshalJSON() ([]byte, error) {
 41658  	objectMap := make(map[string]interface{})
 41659  	if vslp.LinkProperties != nil {
 41660  		objectMap["linkProperties"] = vslp.LinkProperties
 41661  	}
 41662  	if vslp.IPAddress != nil {
 41663  		objectMap["ipAddress"] = vslp.IPAddress
 41664  	}
 41665  	if vslp.Fqdn != nil {
 41666  		objectMap["fqdn"] = vslp.Fqdn
 41667  	}
 41668  	if vslp.BgpProperties != nil {
 41669  		objectMap["bgpProperties"] = vslp.BgpProperties
 41670  	}
 41671  	return json.Marshal(objectMap)
 41672  }
 41673  
 41674  // VpnSiteProperties parameters for VpnSite.
 41675  type VpnSiteProperties struct {
 41676  	// VirtualWan - The VirtualWAN to which the vpnSite belongs.
 41677  	VirtualWan *SubResource `json:"virtualWan,omitempty"`
 41678  	// DeviceProperties - The device properties.
 41679  	DeviceProperties *DeviceProperties `json:"deviceProperties,omitempty"`
 41680  	// IPAddress - The ip-address for the vpn-site.
 41681  	IPAddress *string `json:"ipAddress,omitempty"`
 41682  	// SiteKey - The key for vpn-site that can be used for connections.
 41683  	SiteKey *string `json:"siteKey,omitempty"`
 41684  	// AddressSpace - The AddressSpace that contains an array of IP address ranges.
 41685  	AddressSpace *AddressSpace `json:"addressSpace,omitempty"`
 41686  	// BgpProperties - The set of bgp properties.
 41687  	BgpProperties *BgpSettings `json:"bgpProperties,omitempty"`
 41688  	// ProvisioningState - READ-ONLY; The provisioning state of the VPN site resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 41689  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 41690  	// IsSecuritySite - IsSecuritySite flag.
 41691  	IsSecuritySite *bool `json:"isSecuritySite,omitempty"`
 41692  	// VpnSiteLinks - List of all vpn site links.
 41693  	VpnSiteLinks *[]VpnSiteLink `json:"vpnSiteLinks,omitempty"`
 41694  }
 41695  
 41696  // MarshalJSON is the custom marshaler for VpnSiteProperties.
 41697  func (vsp VpnSiteProperties) MarshalJSON() ([]byte, error) {
 41698  	objectMap := make(map[string]interface{})
 41699  	if vsp.VirtualWan != nil {
 41700  		objectMap["virtualWan"] = vsp.VirtualWan
 41701  	}
 41702  	if vsp.DeviceProperties != nil {
 41703  		objectMap["deviceProperties"] = vsp.DeviceProperties
 41704  	}
 41705  	if vsp.IPAddress != nil {
 41706  		objectMap["ipAddress"] = vsp.IPAddress
 41707  	}
 41708  	if vsp.SiteKey != nil {
 41709  		objectMap["siteKey"] = vsp.SiteKey
 41710  	}
 41711  	if vsp.AddressSpace != nil {
 41712  		objectMap["addressSpace"] = vsp.AddressSpace
 41713  	}
 41714  	if vsp.BgpProperties != nil {
 41715  		objectMap["bgpProperties"] = vsp.BgpProperties
 41716  	}
 41717  	if vsp.IsSecuritySite != nil {
 41718  		objectMap["isSecuritySite"] = vsp.IsSecuritySite
 41719  	}
 41720  	if vsp.VpnSiteLinks != nil {
 41721  		objectMap["vpnSiteLinks"] = vsp.VpnSiteLinks
 41722  	}
 41723  	return json.Marshal(objectMap)
 41724  }
 41725  
 41726  // VpnSitesConfigurationDownloadFuture an abstraction for monitoring and retrieving the results of a
 41727  // long-running operation.
 41728  type VpnSitesConfigurationDownloadFuture struct {
 41729  	azure.FutureAPI
 41730  	// Result returns the result of the asynchronous operation.
 41731  	// If the operation has not completed it will return an error.
 41732  	Result func(VpnSitesConfigurationClient) (autorest.Response, error)
 41733  }
 41734  
 41735  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 41736  func (future *VpnSitesConfigurationDownloadFuture) UnmarshalJSON(body []byte) error {
 41737  	var azFuture azure.Future
 41738  	if err := json.Unmarshal(body, &azFuture); err != nil {
 41739  		return err
 41740  	}
 41741  	future.FutureAPI = &azFuture
 41742  	future.Result = future.result
 41743  	return nil
 41744  }
 41745  
 41746  // result is the default implementation for VpnSitesConfigurationDownloadFuture.Result.
 41747  func (future *VpnSitesConfigurationDownloadFuture) result(client VpnSitesConfigurationClient) (ar autorest.Response, err error) {
 41748  	var done bool
 41749  	done, err = future.DoneWithContext(context.Background(), client)
 41750  	if err != nil {
 41751  		err = autorest.NewErrorWithError(err, "network.VpnSitesConfigurationDownloadFuture", "Result", future.Response(), "Polling failure")
 41752  		return
 41753  	}
 41754  	if !done {
 41755  		ar.Response = future.Response()
 41756  		err = azure.NewAsyncOpIncompleteError("network.VpnSitesConfigurationDownloadFuture")
 41757  		return
 41758  	}
 41759  	ar.Response = future.Response()
 41760  	return
 41761  }
 41762  
 41763  // VpnSitesCreateOrUpdateFuture an abstraction for monitoring and retrieving the results of a long-running
 41764  // operation.
 41765  type VpnSitesCreateOrUpdateFuture struct {
 41766  	azure.FutureAPI
 41767  	// Result returns the result of the asynchronous operation.
 41768  	// If the operation has not completed it will return an error.
 41769  	Result func(VpnSitesClient) (VpnSite, error)
 41770  }
 41771  
 41772  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 41773  func (future *VpnSitesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
 41774  	var azFuture azure.Future
 41775  	if err := json.Unmarshal(body, &azFuture); err != nil {
 41776  		return err
 41777  	}
 41778  	future.FutureAPI = &azFuture
 41779  	future.Result = future.result
 41780  	return nil
 41781  }
 41782  
 41783  // result is the default implementation for VpnSitesCreateOrUpdateFuture.Result.
 41784  func (future *VpnSitesCreateOrUpdateFuture) result(client VpnSitesClient) (vs VpnSite, err error) {
 41785  	var done bool
 41786  	done, err = future.DoneWithContext(context.Background(), client)
 41787  	if err != nil {
 41788  		err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
 41789  		return
 41790  	}
 41791  	if !done {
 41792  		vs.Response.Response = future.Response()
 41793  		err = azure.NewAsyncOpIncompleteError("network.VpnSitesCreateOrUpdateFuture")
 41794  		return
 41795  	}
 41796  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 41797  	if vs.Response.Response, err = future.GetResult(sender); err == nil && vs.Response.Response.StatusCode != http.StatusNoContent {
 41798  		vs, err = client.CreateOrUpdateResponder(vs.Response.Response)
 41799  		if err != nil {
 41800  			err = autorest.NewErrorWithError(err, "network.VpnSitesCreateOrUpdateFuture", "Result", vs.Response.Response, "Failure responding to request")
 41801  		}
 41802  	}
 41803  	return
 41804  }
 41805  
 41806  // VpnSitesDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 41807  // operation.
 41808  type VpnSitesDeleteFuture struct {
 41809  	azure.FutureAPI
 41810  	// Result returns the result of the asynchronous operation.
 41811  	// If the operation has not completed it will return an error.
 41812  	Result func(VpnSitesClient) (autorest.Response, error)
 41813  }
 41814  
 41815  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 41816  func (future *VpnSitesDeleteFuture) UnmarshalJSON(body []byte) error {
 41817  	var azFuture azure.Future
 41818  	if err := json.Unmarshal(body, &azFuture); err != nil {
 41819  		return err
 41820  	}
 41821  	future.FutureAPI = &azFuture
 41822  	future.Result = future.result
 41823  	return nil
 41824  }
 41825  
 41826  // result is the default implementation for VpnSitesDeleteFuture.Result.
 41827  func (future *VpnSitesDeleteFuture) result(client VpnSitesClient) (ar autorest.Response, err error) {
 41828  	var done bool
 41829  	done, err = future.DoneWithContext(context.Background(), client)
 41830  	if err != nil {
 41831  		err = autorest.NewErrorWithError(err, "network.VpnSitesDeleteFuture", "Result", future.Response(), "Polling failure")
 41832  		return
 41833  	}
 41834  	if !done {
 41835  		ar.Response = future.Response()
 41836  		err = azure.NewAsyncOpIncompleteError("network.VpnSitesDeleteFuture")
 41837  		return
 41838  	}
 41839  	ar.Response = future.Response()
 41840  	return
 41841  }
 41842  
 41843  // Watcher network watcher in a resource group.
 41844  type Watcher struct {
 41845  	autorest.Response `json:"-"`
 41846  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 41847  	Etag *string `json:"etag,omitempty"`
 41848  	// WatcherPropertiesFormat - Properties of the network watcher.
 41849  	*WatcherPropertiesFormat `json:"properties,omitempty"`
 41850  	// ID - Resource ID.
 41851  	ID *string `json:"id,omitempty"`
 41852  	// Name - READ-ONLY; Resource name.
 41853  	Name *string `json:"name,omitempty"`
 41854  	// Type - READ-ONLY; Resource type.
 41855  	Type *string `json:"type,omitempty"`
 41856  	// Location - Resource location.
 41857  	Location *string `json:"location,omitempty"`
 41858  	// Tags - Resource tags.
 41859  	Tags map[string]*string `json:"tags"`
 41860  }
 41861  
 41862  // MarshalJSON is the custom marshaler for Watcher.
 41863  func (w Watcher) MarshalJSON() ([]byte, error) {
 41864  	objectMap := make(map[string]interface{})
 41865  	if w.WatcherPropertiesFormat != nil {
 41866  		objectMap["properties"] = w.WatcherPropertiesFormat
 41867  	}
 41868  	if w.ID != nil {
 41869  		objectMap["id"] = w.ID
 41870  	}
 41871  	if w.Location != nil {
 41872  		objectMap["location"] = w.Location
 41873  	}
 41874  	if w.Tags != nil {
 41875  		objectMap["tags"] = w.Tags
 41876  	}
 41877  	return json.Marshal(objectMap)
 41878  }
 41879  
 41880  // UnmarshalJSON is the custom unmarshaler for Watcher struct.
 41881  func (w *Watcher) UnmarshalJSON(body []byte) error {
 41882  	var m map[string]*json.RawMessage
 41883  	err := json.Unmarshal(body, &m)
 41884  	if err != nil {
 41885  		return err
 41886  	}
 41887  	for k, v := range m {
 41888  		switch k {
 41889  		case "etag":
 41890  			if v != nil {
 41891  				var etag string
 41892  				err = json.Unmarshal(*v, &etag)
 41893  				if err != nil {
 41894  					return err
 41895  				}
 41896  				w.Etag = &etag
 41897  			}
 41898  		case "properties":
 41899  			if v != nil {
 41900  				var watcherPropertiesFormat WatcherPropertiesFormat
 41901  				err = json.Unmarshal(*v, &watcherPropertiesFormat)
 41902  				if err != nil {
 41903  					return err
 41904  				}
 41905  				w.WatcherPropertiesFormat = &watcherPropertiesFormat
 41906  			}
 41907  		case "id":
 41908  			if v != nil {
 41909  				var ID string
 41910  				err = json.Unmarshal(*v, &ID)
 41911  				if err != nil {
 41912  					return err
 41913  				}
 41914  				w.ID = &ID
 41915  			}
 41916  		case "name":
 41917  			if v != nil {
 41918  				var name string
 41919  				err = json.Unmarshal(*v, &name)
 41920  				if err != nil {
 41921  					return err
 41922  				}
 41923  				w.Name = &name
 41924  			}
 41925  		case "type":
 41926  			if v != nil {
 41927  				var typeVar string
 41928  				err = json.Unmarshal(*v, &typeVar)
 41929  				if err != nil {
 41930  					return err
 41931  				}
 41932  				w.Type = &typeVar
 41933  			}
 41934  		case "location":
 41935  			if v != nil {
 41936  				var location string
 41937  				err = json.Unmarshal(*v, &location)
 41938  				if err != nil {
 41939  					return err
 41940  				}
 41941  				w.Location = &location
 41942  			}
 41943  		case "tags":
 41944  			if v != nil {
 41945  				var tags map[string]*string
 41946  				err = json.Unmarshal(*v, &tags)
 41947  				if err != nil {
 41948  					return err
 41949  				}
 41950  				w.Tags = tags
 41951  			}
 41952  		}
 41953  	}
 41954  
 41955  	return nil
 41956  }
 41957  
 41958  // WatcherListResult response for ListNetworkWatchers API service call.
 41959  type WatcherListResult struct {
 41960  	autorest.Response `json:"-"`
 41961  	// Value - List of network watcher resources.
 41962  	Value *[]Watcher `json:"value,omitempty"`
 41963  }
 41964  
 41965  // WatcherPropertiesFormat the network watcher properties.
 41966  type WatcherPropertiesFormat struct {
 41967  	// ProvisioningState - READ-ONLY; The provisioning state of the network watcher resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 41968  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 41969  }
 41970  
 41971  // MarshalJSON is the custom marshaler for WatcherPropertiesFormat.
 41972  func (wpf WatcherPropertiesFormat) MarshalJSON() ([]byte, error) {
 41973  	objectMap := make(map[string]interface{})
 41974  	return json.Marshal(objectMap)
 41975  }
 41976  
 41977  // WatchersCheckConnectivityFuture an abstraction for monitoring and retrieving the results of a
 41978  // long-running operation.
 41979  type WatchersCheckConnectivityFuture struct {
 41980  	azure.FutureAPI
 41981  	// Result returns the result of the asynchronous operation.
 41982  	// If the operation has not completed it will return an error.
 41983  	Result func(WatchersClient) (ConnectivityInformation, error)
 41984  }
 41985  
 41986  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 41987  func (future *WatchersCheckConnectivityFuture) UnmarshalJSON(body []byte) error {
 41988  	var azFuture azure.Future
 41989  	if err := json.Unmarshal(body, &azFuture); err != nil {
 41990  		return err
 41991  	}
 41992  	future.FutureAPI = &azFuture
 41993  	future.Result = future.result
 41994  	return nil
 41995  }
 41996  
 41997  // result is the default implementation for WatchersCheckConnectivityFuture.Result.
 41998  func (future *WatchersCheckConnectivityFuture) result(client WatchersClient) (ci ConnectivityInformation, err error) {
 41999  	var done bool
 42000  	done, err = future.DoneWithContext(context.Background(), client)
 42001  	if err != nil {
 42002  		err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", future.Response(), "Polling failure")
 42003  		return
 42004  	}
 42005  	if !done {
 42006  		ci.Response.Response = future.Response()
 42007  		err = azure.NewAsyncOpIncompleteError("network.WatchersCheckConnectivityFuture")
 42008  		return
 42009  	}
 42010  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42011  	if ci.Response.Response, err = future.GetResult(sender); err == nil && ci.Response.Response.StatusCode != http.StatusNoContent {
 42012  		ci, err = client.CheckConnectivityResponder(ci.Response.Response)
 42013  		if err != nil {
 42014  			err = autorest.NewErrorWithError(err, "network.WatchersCheckConnectivityFuture", "Result", ci.Response.Response, "Failure responding to request")
 42015  		}
 42016  	}
 42017  	return
 42018  }
 42019  
 42020  // WatchersDeleteFuture an abstraction for monitoring and retrieving the results of a long-running
 42021  // operation.
 42022  type WatchersDeleteFuture struct {
 42023  	azure.FutureAPI
 42024  	// Result returns the result of the asynchronous operation.
 42025  	// If the operation has not completed it will return an error.
 42026  	Result func(WatchersClient) (autorest.Response, error)
 42027  }
 42028  
 42029  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42030  func (future *WatchersDeleteFuture) UnmarshalJSON(body []byte) error {
 42031  	var azFuture azure.Future
 42032  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42033  		return err
 42034  	}
 42035  	future.FutureAPI = &azFuture
 42036  	future.Result = future.result
 42037  	return nil
 42038  }
 42039  
 42040  // result is the default implementation for WatchersDeleteFuture.Result.
 42041  func (future *WatchersDeleteFuture) result(client WatchersClient) (ar autorest.Response, err error) {
 42042  	var done bool
 42043  	done, err = future.DoneWithContext(context.Background(), client)
 42044  	if err != nil {
 42045  		err = autorest.NewErrorWithError(err, "network.WatchersDeleteFuture", "Result", future.Response(), "Polling failure")
 42046  		return
 42047  	}
 42048  	if !done {
 42049  		ar.Response = future.Response()
 42050  		err = azure.NewAsyncOpIncompleteError("network.WatchersDeleteFuture")
 42051  		return
 42052  	}
 42053  	ar.Response = future.Response()
 42054  	return
 42055  }
 42056  
 42057  // WatchersGetAzureReachabilityReportFuture an abstraction for monitoring and retrieving the results of a
 42058  // long-running operation.
 42059  type WatchersGetAzureReachabilityReportFuture struct {
 42060  	azure.FutureAPI
 42061  	// Result returns the result of the asynchronous operation.
 42062  	// If the operation has not completed it will return an error.
 42063  	Result func(WatchersClient) (AzureReachabilityReport, error)
 42064  }
 42065  
 42066  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42067  func (future *WatchersGetAzureReachabilityReportFuture) UnmarshalJSON(body []byte) error {
 42068  	var azFuture azure.Future
 42069  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42070  		return err
 42071  	}
 42072  	future.FutureAPI = &azFuture
 42073  	future.Result = future.result
 42074  	return nil
 42075  }
 42076  
 42077  // result is the default implementation for WatchersGetAzureReachabilityReportFuture.Result.
 42078  func (future *WatchersGetAzureReachabilityReportFuture) result(client WatchersClient) (arr AzureReachabilityReport, err error) {
 42079  	var done bool
 42080  	done, err = future.DoneWithContext(context.Background(), client)
 42081  	if err != nil {
 42082  		err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", future.Response(), "Polling failure")
 42083  		return
 42084  	}
 42085  	if !done {
 42086  		arr.Response.Response = future.Response()
 42087  		err = azure.NewAsyncOpIncompleteError("network.WatchersGetAzureReachabilityReportFuture")
 42088  		return
 42089  	}
 42090  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42091  	if arr.Response.Response, err = future.GetResult(sender); err == nil && arr.Response.Response.StatusCode != http.StatusNoContent {
 42092  		arr, err = client.GetAzureReachabilityReportResponder(arr.Response.Response)
 42093  		if err != nil {
 42094  			err = autorest.NewErrorWithError(err, "network.WatchersGetAzureReachabilityReportFuture", "Result", arr.Response.Response, "Failure responding to request")
 42095  		}
 42096  	}
 42097  	return
 42098  }
 42099  
 42100  // WatchersGetFlowLogStatusFuture an abstraction for monitoring and retrieving the results of a
 42101  // long-running operation.
 42102  type WatchersGetFlowLogStatusFuture struct {
 42103  	azure.FutureAPI
 42104  	// Result returns the result of the asynchronous operation.
 42105  	// If the operation has not completed it will return an error.
 42106  	Result func(WatchersClient) (FlowLogInformation, error)
 42107  }
 42108  
 42109  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42110  func (future *WatchersGetFlowLogStatusFuture) UnmarshalJSON(body []byte) error {
 42111  	var azFuture azure.Future
 42112  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42113  		return err
 42114  	}
 42115  	future.FutureAPI = &azFuture
 42116  	future.Result = future.result
 42117  	return nil
 42118  }
 42119  
 42120  // result is the default implementation for WatchersGetFlowLogStatusFuture.Result.
 42121  func (future *WatchersGetFlowLogStatusFuture) result(client WatchersClient) (fli FlowLogInformation, err error) {
 42122  	var done bool
 42123  	done, err = future.DoneWithContext(context.Background(), client)
 42124  	if err != nil {
 42125  		err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", future.Response(), "Polling failure")
 42126  		return
 42127  	}
 42128  	if !done {
 42129  		fli.Response.Response = future.Response()
 42130  		err = azure.NewAsyncOpIncompleteError("network.WatchersGetFlowLogStatusFuture")
 42131  		return
 42132  	}
 42133  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42134  	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
 42135  		fli, err = client.GetFlowLogStatusResponder(fli.Response.Response)
 42136  		if err != nil {
 42137  			err = autorest.NewErrorWithError(err, "network.WatchersGetFlowLogStatusFuture", "Result", fli.Response.Response, "Failure responding to request")
 42138  		}
 42139  	}
 42140  	return
 42141  }
 42142  
 42143  // WatchersGetNetworkConfigurationDiagnosticFuture an abstraction for monitoring and retrieving the results
 42144  // of a long-running operation.
 42145  type WatchersGetNetworkConfigurationDiagnosticFuture struct {
 42146  	azure.FutureAPI
 42147  	// Result returns the result of the asynchronous operation.
 42148  	// If the operation has not completed it will return an error.
 42149  	Result func(WatchersClient) (ConfigurationDiagnosticResponse, error)
 42150  }
 42151  
 42152  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42153  func (future *WatchersGetNetworkConfigurationDiagnosticFuture) UnmarshalJSON(body []byte) error {
 42154  	var azFuture azure.Future
 42155  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42156  		return err
 42157  	}
 42158  	future.FutureAPI = &azFuture
 42159  	future.Result = future.result
 42160  	return nil
 42161  }
 42162  
 42163  // result is the default implementation for WatchersGetNetworkConfigurationDiagnosticFuture.Result.
 42164  func (future *WatchersGetNetworkConfigurationDiagnosticFuture) result(client WatchersClient) (cdr ConfigurationDiagnosticResponse, err error) {
 42165  	var done bool
 42166  	done, err = future.DoneWithContext(context.Background(), client)
 42167  	if err != nil {
 42168  		err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", future.Response(), "Polling failure")
 42169  		return
 42170  	}
 42171  	if !done {
 42172  		cdr.Response.Response = future.Response()
 42173  		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNetworkConfigurationDiagnosticFuture")
 42174  		return
 42175  	}
 42176  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42177  	if cdr.Response.Response, err = future.GetResult(sender); err == nil && cdr.Response.Response.StatusCode != http.StatusNoContent {
 42178  		cdr, err = client.GetNetworkConfigurationDiagnosticResponder(cdr.Response.Response)
 42179  		if err != nil {
 42180  			err = autorest.NewErrorWithError(err, "network.WatchersGetNetworkConfigurationDiagnosticFuture", "Result", cdr.Response.Response, "Failure responding to request")
 42181  		}
 42182  	}
 42183  	return
 42184  }
 42185  
 42186  // WatchersGetNextHopFuture an abstraction for monitoring and retrieving the results of a long-running
 42187  // operation.
 42188  type WatchersGetNextHopFuture struct {
 42189  	azure.FutureAPI
 42190  	// Result returns the result of the asynchronous operation.
 42191  	// If the operation has not completed it will return an error.
 42192  	Result func(WatchersClient) (NextHopResult, error)
 42193  }
 42194  
 42195  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42196  func (future *WatchersGetNextHopFuture) UnmarshalJSON(body []byte) error {
 42197  	var azFuture azure.Future
 42198  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42199  		return err
 42200  	}
 42201  	future.FutureAPI = &azFuture
 42202  	future.Result = future.result
 42203  	return nil
 42204  }
 42205  
 42206  // result is the default implementation for WatchersGetNextHopFuture.Result.
 42207  func (future *WatchersGetNextHopFuture) result(client WatchersClient) (nhr NextHopResult, err error) {
 42208  	var done bool
 42209  	done, err = future.DoneWithContext(context.Background(), client)
 42210  	if err != nil {
 42211  		err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", future.Response(), "Polling failure")
 42212  		return
 42213  	}
 42214  	if !done {
 42215  		nhr.Response.Response = future.Response()
 42216  		err = azure.NewAsyncOpIncompleteError("network.WatchersGetNextHopFuture")
 42217  		return
 42218  	}
 42219  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42220  	if nhr.Response.Response, err = future.GetResult(sender); err == nil && nhr.Response.Response.StatusCode != http.StatusNoContent {
 42221  		nhr, err = client.GetNextHopResponder(nhr.Response.Response)
 42222  		if err != nil {
 42223  			err = autorest.NewErrorWithError(err, "network.WatchersGetNextHopFuture", "Result", nhr.Response.Response, "Failure responding to request")
 42224  		}
 42225  	}
 42226  	return
 42227  }
 42228  
 42229  // WatchersGetTroubleshootingFuture an abstraction for monitoring and retrieving the results of a
 42230  // long-running operation.
 42231  type WatchersGetTroubleshootingFuture struct {
 42232  	azure.FutureAPI
 42233  	// Result returns the result of the asynchronous operation.
 42234  	// If the operation has not completed it will return an error.
 42235  	Result func(WatchersClient) (TroubleshootingResult, error)
 42236  }
 42237  
 42238  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42239  func (future *WatchersGetTroubleshootingFuture) UnmarshalJSON(body []byte) error {
 42240  	var azFuture azure.Future
 42241  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42242  		return err
 42243  	}
 42244  	future.FutureAPI = &azFuture
 42245  	future.Result = future.result
 42246  	return nil
 42247  }
 42248  
 42249  // result is the default implementation for WatchersGetTroubleshootingFuture.Result.
 42250  func (future *WatchersGetTroubleshootingFuture) result(client WatchersClient) (tr TroubleshootingResult, err error) {
 42251  	var done bool
 42252  	done, err = future.DoneWithContext(context.Background(), client)
 42253  	if err != nil {
 42254  		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", future.Response(), "Polling failure")
 42255  		return
 42256  	}
 42257  	if !done {
 42258  		tr.Response.Response = future.Response()
 42259  		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingFuture")
 42260  		return
 42261  	}
 42262  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42263  	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
 42264  		tr, err = client.GetTroubleshootingResponder(tr.Response.Response)
 42265  		if err != nil {
 42266  			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingFuture", "Result", tr.Response.Response, "Failure responding to request")
 42267  		}
 42268  	}
 42269  	return
 42270  }
 42271  
 42272  // WatchersGetTroubleshootingResultFuture an abstraction for monitoring and retrieving the results of a
 42273  // long-running operation.
 42274  type WatchersGetTroubleshootingResultFuture struct {
 42275  	azure.FutureAPI
 42276  	// Result returns the result of the asynchronous operation.
 42277  	// If the operation has not completed it will return an error.
 42278  	Result func(WatchersClient) (TroubleshootingResult, error)
 42279  }
 42280  
 42281  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42282  func (future *WatchersGetTroubleshootingResultFuture) UnmarshalJSON(body []byte) error {
 42283  	var azFuture azure.Future
 42284  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42285  		return err
 42286  	}
 42287  	future.FutureAPI = &azFuture
 42288  	future.Result = future.result
 42289  	return nil
 42290  }
 42291  
 42292  // result is the default implementation for WatchersGetTroubleshootingResultFuture.Result.
 42293  func (future *WatchersGetTroubleshootingResultFuture) result(client WatchersClient) (tr TroubleshootingResult, err error) {
 42294  	var done bool
 42295  	done, err = future.DoneWithContext(context.Background(), client)
 42296  	if err != nil {
 42297  		err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", future.Response(), "Polling failure")
 42298  		return
 42299  	}
 42300  	if !done {
 42301  		tr.Response.Response = future.Response()
 42302  		err = azure.NewAsyncOpIncompleteError("network.WatchersGetTroubleshootingResultFuture")
 42303  		return
 42304  	}
 42305  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42306  	if tr.Response.Response, err = future.GetResult(sender); err == nil && tr.Response.Response.StatusCode != http.StatusNoContent {
 42307  		tr, err = client.GetTroubleshootingResultResponder(tr.Response.Response)
 42308  		if err != nil {
 42309  			err = autorest.NewErrorWithError(err, "network.WatchersGetTroubleshootingResultFuture", "Result", tr.Response.Response, "Failure responding to request")
 42310  		}
 42311  	}
 42312  	return
 42313  }
 42314  
 42315  // WatchersGetVMSecurityRulesFuture an abstraction for monitoring and retrieving the results of a
 42316  // long-running operation.
 42317  type WatchersGetVMSecurityRulesFuture struct {
 42318  	azure.FutureAPI
 42319  	// Result returns the result of the asynchronous operation.
 42320  	// If the operation has not completed it will return an error.
 42321  	Result func(WatchersClient) (SecurityGroupViewResult, error)
 42322  }
 42323  
 42324  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42325  func (future *WatchersGetVMSecurityRulesFuture) UnmarshalJSON(body []byte) error {
 42326  	var azFuture azure.Future
 42327  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42328  		return err
 42329  	}
 42330  	future.FutureAPI = &azFuture
 42331  	future.Result = future.result
 42332  	return nil
 42333  }
 42334  
 42335  // result is the default implementation for WatchersGetVMSecurityRulesFuture.Result.
 42336  func (future *WatchersGetVMSecurityRulesFuture) result(client WatchersClient) (sgvr SecurityGroupViewResult, err error) {
 42337  	var done bool
 42338  	done, err = future.DoneWithContext(context.Background(), client)
 42339  	if err != nil {
 42340  		err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", future.Response(), "Polling failure")
 42341  		return
 42342  	}
 42343  	if !done {
 42344  		sgvr.Response.Response = future.Response()
 42345  		err = azure.NewAsyncOpIncompleteError("network.WatchersGetVMSecurityRulesFuture")
 42346  		return
 42347  	}
 42348  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42349  	if sgvr.Response.Response, err = future.GetResult(sender); err == nil && sgvr.Response.Response.StatusCode != http.StatusNoContent {
 42350  		sgvr, err = client.GetVMSecurityRulesResponder(sgvr.Response.Response)
 42351  		if err != nil {
 42352  			err = autorest.NewErrorWithError(err, "network.WatchersGetVMSecurityRulesFuture", "Result", sgvr.Response.Response, "Failure responding to request")
 42353  		}
 42354  	}
 42355  	return
 42356  }
 42357  
 42358  // WatchersListAvailableProvidersFuture an abstraction for monitoring and retrieving the results of a
 42359  // long-running operation.
 42360  type WatchersListAvailableProvidersFuture struct {
 42361  	azure.FutureAPI
 42362  	// Result returns the result of the asynchronous operation.
 42363  	// If the operation has not completed it will return an error.
 42364  	Result func(WatchersClient) (AvailableProvidersList, error)
 42365  }
 42366  
 42367  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42368  func (future *WatchersListAvailableProvidersFuture) UnmarshalJSON(body []byte) error {
 42369  	var azFuture azure.Future
 42370  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42371  		return err
 42372  	}
 42373  	future.FutureAPI = &azFuture
 42374  	future.Result = future.result
 42375  	return nil
 42376  }
 42377  
 42378  // result is the default implementation for WatchersListAvailableProvidersFuture.Result.
 42379  func (future *WatchersListAvailableProvidersFuture) result(client WatchersClient) (apl AvailableProvidersList, err error) {
 42380  	var done bool
 42381  	done, err = future.DoneWithContext(context.Background(), client)
 42382  	if err != nil {
 42383  		err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", future.Response(), "Polling failure")
 42384  		return
 42385  	}
 42386  	if !done {
 42387  		apl.Response.Response = future.Response()
 42388  		err = azure.NewAsyncOpIncompleteError("network.WatchersListAvailableProvidersFuture")
 42389  		return
 42390  	}
 42391  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42392  	if apl.Response.Response, err = future.GetResult(sender); err == nil && apl.Response.Response.StatusCode != http.StatusNoContent {
 42393  		apl, err = client.ListAvailableProvidersResponder(apl.Response.Response)
 42394  		if err != nil {
 42395  			err = autorest.NewErrorWithError(err, "network.WatchersListAvailableProvidersFuture", "Result", apl.Response.Response, "Failure responding to request")
 42396  		}
 42397  	}
 42398  	return
 42399  }
 42400  
 42401  // WatchersSetFlowLogConfigurationFuture an abstraction for monitoring and retrieving the results of a
 42402  // long-running operation.
 42403  type WatchersSetFlowLogConfigurationFuture struct {
 42404  	azure.FutureAPI
 42405  	// Result returns the result of the asynchronous operation.
 42406  	// If the operation has not completed it will return an error.
 42407  	Result func(WatchersClient) (FlowLogInformation, error)
 42408  }
 42409  
 42410  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42411  func (future *WatchersSetFlowLogConfigurationFuture) UnmarshalJSON(body []byte) error {
 42412  	var azFuture azure.Future
 42413  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42414  		return err
 42415  	}
 42416  	future.FutureAPI = &azFuture
 42417  	future.Result = future.result
 42418  	return nil
 42419  }
 42420  
 42421  // result is the default implementation for WatchersSetFlowLogConfigurationFuture.Result.
 42422  func (future *WatchersSetFlowLogConfigurationFuture) result(client WatchersClient) (fli FlowLogInformation, err error) {
 42423  	var done bool
 42424  	done, err = future.DoneWithContext(context.Background(), client)
 42425  	if err != nil {
 42426  		err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", future.Response(), "Polling failure")
 42427  		return
 42428  	}
 42429  	if !done {
 42430  		fli.Response.Response = future.Response()
 42431  		err = azure.NewAsyncOpIncompleteError("network.WatchersSetFlowLogConfigurationFuture")
 42432  		return
 42433  	}
 42434  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42435  	if fli.Response.Response, err = future.GetResult(sender); err == nil && fli.Response.Response.StatusCode != http.StatusNoContent {
 42436  		fli, err = client.SetFlowLogConfigurationResponder(fli.Response.Response)
 42437  		if err != nil {
 42438  			err = autorest.NewErrorWithError(err, "network.WatchersSetFlowLogConfigurationFuture", "Result", fli.Response.Response, "Failure responding to request")
 42439  		}
 42440  	}
 42441  	return
 42442  }
 42443  
 42444  // WatchersVerifyIPFlowFuture an abstraction for monitoring and retrieving the results of a long-running
 42445  // operation.
 42446  type WatchersVerifyIPFlowFuture struct {
 42447  	azure.FutureAPI
 42448  	// Result returns the result of the asynchronous operation.
 42449  	// If the operation has not completed it will return an error.
 42450  	Result func(WatchersClient) (VerificationIPFlowResult, error)
 42451  }
 42452  
 42453  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42454  func (future *WatchersVerifyIPFlowFuture) UnmarshalJSON(body []byte) error {
 42455  	var azFuture azure.Future
 42456  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42457  		return err
 42458  	}
 42459  	future.FutureAPI = &azFuture
 42460  	future.Result = future.result
 42461  	return nil
 42462  }
 42463  
 42464  // result is the default implementation for WatchersVerifyIPFlowFuture.Result.
 42465  func (future *WatchersVerifyIPFlowFuture) result(client WatchersClient) (vifr VerificationIPFlowResult, err error) {
 42466  	var done bool
 42467  	done, err = future.DoneWithContext(context.Background(), client)
 42468  	if err != nil {
 42469  		err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", future.Response(), "Polling failure")
 42470  		return
 42471  	}
 42472  	if !done {
 42473  		vifr.Response.Response = future.Response()
 42474  		err = azure.NewAsyncOpIncompleteError("network.WatchersVerifyIPFlowFuture")
 42475  		return
 42476  	}
 42477  	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
 42478  	if vifr.Response.Response, err = future.GetResult(sender); err == nil && vifr.Response.Response.StatusCode != http.StatusNoContent {
 42479  		vifr, err = client.VerifyIPFlowResponder(vifr.Response.Response)
 42480  		if err != nil {
 42481  			err = autorest.NewErrorWithError(err, "network.WatchersVerifyIPFlowFuture", "Result", vifr.Response.Response, "Failure responding to request")
 42482  		}
 42483  	}
 42484  	return
 42485  }
 42486  
 42487  // WebApplicationFirewallCustomRule defines contents of a web application rule.
 42488  type WebApplicationFirewallCustomRule struct {
 42489  	// Name - The name of the resource that is unique within a policy. This name can be used to access the resource.
 42490  	Name *string `json:"name,omitempty"`
 42491  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 42492  	Etag *string `json:"etag,omitempty"`
 42493  	// Priority - Priority of the rule. Rules with a lower value will be evaluated before rules with a higher value.
 42494  	Priority *int32 `json:"priority,omitempty"`
 42495  	// RuleType - The rule type. Possible values include: 'WebApplicationFirewallRuleTypeMatchRule', 'WebApplicationFirewallRuleTypeInvalid'
 42496  	RuleType WebApplicationFirewallRuleType `json:"ruleType,omitempty"`
 42497  	// MatchConditions - List of match conditions.
 42498  	MatchConditions *[]MatchCondition `json:"matchConditions,omitempty"`
 42499  	// Action - Type of Actions. Possible values include: 'WebApplicationFirewallActionAllow', 'WebApplicationFirewallActionBlock', 'WebApplicationFirewallActionLog'
 42500  	Action WebApplicationFirewallAction `json:"action,omitempty"`
 42501  }
 42502  
 42503  // MarshalJSON is the custom marshaler for WebApplicationFirewallCustomRule.
 42504  func (wafcr WebApplicationFirewallCustomRule) MarshalJSON() ([]byte, error) {
 42505  	objectMap := make(map[string]interface{})
 42506  	if wafcr.Name != nil {
 42507  		objectMap["name"] = wafcr.Name
 42508  	}
 42509  	if wafcr.Priority != nil {
 42510  		objectMap["priority"] = wafcr.Priority
 42511  	}
 42512  	if wafcr.RuleType != "" {
 42513  		objectMap["ruleType"] = wafcr.RuleType
 42514  	}
 42515  	if wafcr.MatchConditions != nil {
 42516  		objectMap["matchConditions"] = wafcr.MatchConditions
 42517  	}
 42518  	if wafcr.Action != "" {
 42519  		objectMap["action"] = wafcr.Action
 42520  	}
 42521  	return json.Marshal(objectMap)
 42522  }
 42523  
 42524  // WebApplicationFirewallPoliciesDeleteFuture an abstraction for monitoring and retrieving the results of a
 42525  // long-running operation.
 42526  type WebApplicationFirewallPoliciesDeleteFuture struct {
 42527  	azure.FutureAPI
 42528  	// Result returns the result of the asynchronous operation.
 42529  	// If the operation has not completed it will return an error.
 42530  	Result func(WebApplicationFirewallPoliciesClient) (autorest.Response, error)
 42531  }
 42532  
 42533  // UnmarshalJSON is the custom unmarshaller for CreateFuture.
 42534  func (future *WebApplicationFirewallPoliciesDeleteFuture) UnmarshalJSON(body []byte) error {
 42535  	var azFuture azure.Future
 42536  	if err := json.Unmarshal(body, &azFuture); err != nil {
 42537  		return err
 42538  	}
 42539  	future.FutureAPI = &azFuture
 42540  	future.Result = future.result
 42541  	return nil
 42542  }
 42543  
 42544  // result is the default implementation for WebApplicationFirewallPoliciesDeleteFuture.Result.
 42545  func (future *WebApplicationFirewallPoliciesDeleteFuture) result(client WebApplicationFirewallPoliciesClient) (ar autorest.Response, err error) {
 42546  	var done bool
 42547  	done, err = future.DoneWithContext(context.Background(), client)
 42548  	if err != nil {
 42549  		err = autorest.NewErrorWithError(err, "network.WebApplicationFirewallPoliciesDeleteFuture", "Result", future.Response(), "Polling failure")
 42550  		return
 42551  	}
 42552  	if !done {
 42553  		ar.Response = future.Response()
 42554  		err = azure.NewAsyncOpIncompleteError("network.WebApplicationFirewallPoliciesDeleteFuture")
 42555  		return
 42556  	}
 42557  	ar.Response = future.Response()
 42558  	return
 42559  }
 42560  
 42561  // WebApplicationFirewallPolicy defines web application firewall policy.
 42562  type WebApplicationFirewallPolicy struct {
 42563  	autorest.Response `json:"-"`
 42564  	// WebApplicationFirewallPolicyPropertiesFormat - Properties of the web application firewall policy.
 42565  	*WebApplicationFirewallPolicyPropertiesFormat `json:"properties,omitempty"`
 42566  	// Etag - READ-ONLY; A unique read-only string that changes whenever the resource is updated.
 42567  	Etag *string `json:"etag,omitempty"`
 42568  	// ID - Resource ID.
 42569  	ID *string `json:"id,omitempty"`
 42570  	// Name - READ-ONLY; Resource name.
 42571  	Name *string `json:"name,omitempty"`
 42572  	// Type - READ-ONLY; Resource type.
 42573  	Type *string `json:"type,omitempty"`
 42574  	// Location - Resource location.
 42575  	Location *string `json:"location,omitempty"`
 42576  	// Tags - Resource tags.
 42577  	Tags map[string]*string `json:"tags"`
 42578  }
 42579  
 42580  // MarshalJSON is the custom marshaler for WebApplicationFirewallPolicy.
 42581  func (wafp WebApplicationFirewallPolicy) MarshalJSON() ([]byte, error) {
 42582  	objectMap := make(map[string]interface{})
 42583  	if wafp.WebApplicationFirewallPolicyPropertiesFormat != nil {
 42584  		objectMap["properties"] = wafp.WebApplicationFirewallPolicyPropertiesFormat
 42585  	}
 42586  	if wafp.ID != nil {
 42587  		objectMap["id"] = wafp.ID
 42588  	}
 42589  	if wafp.Location != nil {
 42590  		objectMap["location"] = wafp.Location
 42591  	}
 42592  	if wafp.Tags != nil {
 42593  		objectMap["tags"] = wafp.Tags
 42594  	}
 42595  	return json.Marshal(objectMap)
 42596  }
 42597  
 42598  // UnmarshalJSON is the custom unmarshaler for WebApplicationFirewallPolicy struct.
 42599  func (wafp *WebApplicationFirewallPolicy) UnmarshalJSON(body []byte) error {
 42600  	var m map[string]*json.RawMessage
 42601  	err := json.Unmarshal(body, &m)
 42602  	if err != nil {
 42603  		return err
 42604  	}
 42605  	for k, v := range m {
 42606  		switch k {
 42607  		case "properties":
 42608  			if v != nil {
 42609  				var webApplicationFirewallPolicyPropertiesFormat WebApplicationFirewallPolicyPropertiesFormat
 42610  				err = json.Unmarshal(*v, &webApplicationFirewallPolicyPropertiesFormat)
 42611  				if err != nil {
 42612  					return err
 42613  				}
 42614  				wafp.WebApplicationFirewallPolicyPropertiesFormat = &webApplicationFirewallPolicyPropertiesFormat
 42615  			}
 42616  		case "etag":
 42617  			if v != nil {
 42618  				var etag string
 42619  				err = json.Unmarshal(*v, &etag)
 42620  				if err != nil {
 42621  					return err
 42622  				}
 42623  				wafp.Etag = &etag
 42624  			}
 42625  		case "id":
 42626  			if v != nil {
 42627  				var ID string
 42628  				err = json.Unmarshal(*v, &ID)
 42629  				if err != nil {
 42630  					return err
 42631  				}
 42632  				wafp.ID = &ID
 42633  			}
 42634  		case "name":
 42635  			if v != nil {
 42636  				var name string
 42637  				err = json.Unmarshal(*v, &name)
 42638  				if err != nil {
 42639  					return err
 42640  				}
 42641  				wafp.Name = &name
 42642  			}
 42643  		case "type":
 42644  			if v != nil {
 42645  				var typeVar string
 42646  				err = json.Unmarshal(*v, &typeVar)
 42647  				if err != nil {
 42648  					return err
 42649  				}
 42650  				wafp.Type = &typeVar
 42651  			}
 42652  		case "location":
 42653  			if v != nil {
 42654  				var location string
 42655  				err = json.Unmarshal(*v, &location)
 42656  				if err != nil {
 42657  					return err
 42658  				}
 42659  				wafp.Location = &location
 42660  			}
 42661  		case "tags":
 42662  			if v != nil {
 42663  				var tags map[string]*string
 42664  				err = json.Unmarshal(*v, &tags)
 42665  				if err != nil {
 42666  					return err
 42667  				}
 42668  				wafp.Tags = tags
 42669  			}
 42670  		}
 42671  	}
 42672  
 42673  	return nil
 42674  }
 42675  
 42676  // WebApplicationFirewallPolicyListResult result of the request to list WebApplicationFirewallPolicies. It
 42677  // contains a list of WebApplicationFirewallPolicy objects and a URL link to get the next set of results.
 42678  type WebApplicationFirewallPolicyListResult struct {
 42679  	autorest.Response `json:"-"`
 42680  	// Value - READ-ONLY; List of WebApplicationFirewallPolicies within a resource group.
 42681  	Value *[]WebApplicationFirewallPolicy `json:"value,omitempty"`
 42682  	// NextLink - READ-ONLY; URL to get the next set of WebApplicationFirewallPolicy objects if there are any.
 42683  	NextLink *string `json:"nextLink,omitempty"`
 42684  }
 42685  
 42686  // MarshalJSON is the custom marshaler for WebApplicationFirewallPolicyListResult.
 42687  func (wafplr WebApplicationFirewallPolicyListResult) MarshalJSON() ([]byte, error) {
 42688  	objectMap := make(map[string]interface{})
 42689  	return json.Marshal(objectMap)
 42690  }
 42691  
 42692  // WebApplicationFirewallPolicyListResultIterator provides access to a complete listing of
 42693  // WebApplicationFirewallPolicy values.
 42694  type WebApplicationFirewallPolicyListResultIterator struct {
 42695  	i    int
 42696  	page WebApplicationFirewallPolicyListResultPage
 42697  }
 42698  
 42699  // NextWithContext advances to the next value.  If there was an error making
 42700  // the request the iterator does not advance and the error is returned.
 42701  func (iter *WebApplicationFirewallPolicyListResultIterator) NextWithContext(ctx context.Context) (err error) {
 42702  	if tracing.IsEnabled() {
 42703  		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultIterator.NextWithContext")
 42704  		defer func() {
 42705  			sc := -1
 42706  			if iter.Response().Response.Response != nil {
 42707  				sc = iter.Response().Response.Response.StatusCode
 42708  			}
 42709  			tracing.EndSpan(ctx, sc, err)
 42710  		}()
 42711  	}
 42712  	iter.i++
 42713  	if iter.i < len(iter.page.Values()) {
 42714  		return nil
 42715  	}
 42716  	err = iter.page.NextWithContext(ctx)
 42717  	if err != nil {
 42718  		iter.i--
 42719  		return err
 42720  	}
 42721  	iter.i = 0
 42722  	return nil
 42723  }
 42724  
 42725  // Next advances to the next value.  If there was an error making
 42726  // the request the iterator does not advance and the error is returned.
 42727  // Deprecated: Use NextWithContext() instead.
 42728  func (iter *WebApplicationFirewallPolicyListResultIterator) Next() error {
 42729  	return iter.NextWithContext(context.Background())
 42730  }
 42731  
 42732  // NotDone returns true if the enumeration should be started or is not yet complete.
 42733  func (iter WebApplicationFirewallPolicyListResultIterator) NotDone() bool {
 42734  	return iter.page.NotDone() && iter.i < len(iter.page.Values())
 42735  }
 42736  
 42737  // Response returns the raw server response from the last page request.
 42738  func (iter WebApplicationFirewallPolicyListResultIterator) Response() WebApplicationFirewallPolicyListResult {
 42739  	return iter.page.Response()
 42740  }
 42741  
 42742  // Value returns the current value or a zero-initialized value if the
 42743  // iterator has advanced beyond the end of the collection.
 42744  func (iter WebApplicationFirewallPolicyListResultIterator) Value() WebApplicationFirewallPolicy {
 42745  	if !iter.page.NotDone() {
 42746  		return WebApplicationFirewallPolicy{}
 42747  	}
 42748  	return iter.page.Values()[iter.i]
 42749  }
 42750  
 42751  // Creates a new instance of the WebApplicationFirewallPolicyListResultIterator type.
 42752  func NewWebApplicationFirewallPolicyListResultIterator(page WebApplicationFirewallPolicyListResultPage) WebApplicationFirewallPolicyListResultIterator {
 42753  	return WebApplicationFirewallPolicyListResultIterator{page: page}
 42754  }
 42755  
 42756  // IsEmpty returns true if the ListResult contains no values.
 42757  func (wafplr WebApplicationFirewallPolicyListResult) IsEmpty() bool {
 42758  	return wafplr.Value == nil || len(*wafplr.Value) == 0
 42759  }
 42760  
 42761  // hasNextLink returns true if the NextLink is not empty.
 42762  func (wafplr WebApplicationFirewallPolicyListResult) hasNextLink() bool {
 42763  	return wafplr.NextLink != nil && len(*wafplr.NextLink) != 0
 42764  }
 42765  
 42766  // webApplicationFirewallPolicyListResultPreparer prepares a request to retrieve the next set of results.
 42767  // It returns nil if no more results exist.
 42768  func (wafplr WebApplicationFirewallPolicyListResult) webApplicationFirewallPolicyListResultPreparer(ctx context.Context) (*http.Request, error) {
 42769  	if !wafplr.hasNextLink() {
 42770  		return nil, nil
 42771  	}
 42772  	return autorest.Prepare((&http.Request{}).WithContext(ctx),
 42773  		autorest.AsJSON(),
 42774  		autorest.AsGet(),
 42775  		autorest.WithBaseURL(to.String(wafplr.NextLink)))
 42776  }
 42777  
 42778  // WebApplicationFirewallPolicyListResultPage contains a page of WebApplicationFirewallPolicy values.
 42779  type WebApplicationFirewallPolicyListResultPage struct {
 42780  	fn     func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)
 42781  	wafplr WebApplicationFirewallPolicyListResult
 42782  }
 42783  
 42784  // NextWithContext advances to the next page of values.  If there was an error making
 42785  // the request the page does not advance and the error is returned.
 42786  func (page *WebApplicationFirewallPolicyListResultPage) NextWithContext(ctx context.Context) (err error) {
 42787  	if tracing.IsEnabled() {
 42788  		ctx = tracing.StartSpan(ctx, fqdn+"/WebApplicationFirewallPolicyListResultPage.NextWithContext")
 42789  		defer func() {
 42790  			sc := -1
 42791  			if page.Response().Response.Response != nil {
 42792  				sc = page.Response().Response.Response.StatusCode
 42793  			}
 42794  			tracing.EndSpan(ctx, sc, err)
 42795  		}()
 42796  	}
 42797  	for {
 42798  		next, err := page.fn(ctx, page.wafplr)
 42799  		if err != nil {
 42800  			return err
 42801  		}
 42802  		page.wafplr = next
 42803  		if !next.hasNextLink() || !next.IsEmpty() {
 42804  			break
 42805  		}
 42806  	}
 42807  	return nil
 42808  }
 42809  
 42810  // Next advances to the next page of values.  If there was an error making
 42811  // the request the page does not advance and the error is returned.
 42812  // Deprecated: Use NextWithContext() instead.
 42813  func (page *WebApplicationFirewallPolicyListResultPage) Next() error {
 42814  	return page.NextWithContext(context.Background())
 42815  }
 42816  
 42817  // NotDone returns true if the page enumeration should be started or is not yet complete.
 42818  func (page WebApplicationFirewallPolicyListResultPage) NotDone() bool {
 42819  	return !page.wafplr.IsEmpty()
 42820  }
 42821  
 42822  // Response returns the raw server response from the last page request.
 42823  func (page WebApplicationFirewallPolicyListResultPage) Response() WebApplicationFirewallPolicyListResult {
 42824  	return page.wafplr
 42825  }
 42826  
 42827  // Values returns the slice of values for the current page or nil if there are no values.
 42828  func (page WebApplicationFirewallPolicyListResultPage) Values() []WebApplicationFirewallPolicy {
 42829  	if page.wafplr.IsEmpty() {
 42830  		return nil
 42831  	}
 42832  	return *page.wafplr.Value
 42833  }
 42834  
 42835  // Creates a new instance of the WebApplicationFirewallPolicyListResultPage type.
 42836  func NewWebApplicationFirewallPolicyListResultPage(cur WebApplicationFirewallPolicyListResult, getNextPage func(context.Context, WebApplicationFirewallPolicyListResult) (WebApplicationFirewallPolicyListResult, error)) WebApplicationFirewallPolicyListResultPage {
 42837  	return WebApplicationFirewallPolicyListResultPage{
 42838  		fn:     getNextPage,
 42839  		wafplr: cur,
 42840  	}
 42841  }
 42842  
 42843  // WebApplicationFirewallPolicyPropertiesFormat defines web application firewall policy properties.
 42844  type WebApplicationFirewallPolicyPropertiesFormat struct {
 42845  	// PolicySettings - The PolicySettings for policy.
 42846  	PolicySettings *PolicySettings `json:"policySettings,omitempty"`
 42847  	// CustomRules - The custom rules inside the policy.
 42848  	CustomRules *[]WebApplicationFirewallCustomRule `json:"customRules,omitempty"`
 42849  	// ApplicationGateways - READ-ONLY; A collection of references to application gateways.
 42850  	ApplicationGateways *[]ApplicationGateway `json:"applicationGateways,omitempty"`
 42851  	// ProvisioningState - READ-ONLY; The provisioning state of the web application firewall policy resource. Possible values include: 'Succeeded', 'Updating', 'Deleting', 'Failed'
 42852  	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
 42853  	// ResourceState - READ-ONLY; Resource status of the policy. Possible values include: 'WebApplicationFirewallPolicyResourceStateCreating', 'WebApplicationFirewallPolicyResourceStateEnabling', 'WebApplicationFirewallPolicyResourceStateEnabled', 'WebApplicationFirewallPolicyResourceStateDisabling', 'WebApplicationFirewallPolicyResourceStateDisabled', 'WebApplicationFirewallPolicyResourceStateDeleting'
 42854  	ResourceState WebApplicationFirewallPolicyResourceState `json:"resourceState,omitempty"`
 42855  	// ManagedRules - Describes the managedRules structure.
 42856  	ManagedRules *ManagedRulesDefinition `json:"managedRules,omitempty"`
 42857  	// HTTPListeners - READ-ONLY; A collection of references to application gateway http listeners.
 42858  	HTTPListeners *[]SubResource `json:"httpListeners,omitempty"`
 42859  	// PathBasedRules - READ-ONLY; A collection of references to application gateway path rules.
 42860  	PathBasedRules *[]SubResource `json:"pathBasedRules,omitempty"`
 42861  }
 42862  
 42863  // MarshalJSON is the custom marshaler for WebApplicationFirewallPolicyPropertiesFormat.
 42864  func (wafppf WebApplicationFirewallPolicyPropertiesFormat) MarshalJSON() ([]byte, error) {
 42865  	objectMap := make(map[string]interface{})
 42866  	if wafppf.PolicySettings != nil {
 42867  		objectMap["policySettings"] = wafppf.PolicySettings
 42868  	}
 42869  	if wafppf.CustomRules != nil {
 42870  		objectMap["customRules"] = wafppf.CustomRules
 42871  	}
 42872  	if wafppf.ManagedRules != nil {
 42873  		objectMap["managedRules"] = wafppf.ManagedRules
 42874  	}
 42875  	return json.Marshal(objectMap)
 42876  }
 42877  

View as plain text