package servicefabric

// Copyright (c) Microsoft and contributors.  All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Code generated by Microsoft (R) AutoRest Code Generator.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.

import (
	"encoding/json"
	"github.com/Azure/go-autorest/autorest"
)

// AggregatedHealthState enumerates the values for aggregated health state.
type AggregatedHealthState string

const (
	// Error ...
	Error AggregatedHealthState = "Error"
	// Invalid ...
	Invalid AggregatedHealthState = "Invalid"
	// Ok ...
	Ok AggregatedHealthState = "Ok"
	// Unknown ...
	Unknown AggregatedHealthState = "Unknown"
	// Warning ...
	Warning AggregatedHealthState = "Warning"
)

// PossibleAggregatedHealthStateValues returns an array of possible values for the AggregatedHealthState const type.
func PossibleAggregatedHealthStateValues() []AggregatedHealthState {
	return []AggregatedHealthState{Error, Invalid, Ok, Unknown, Warning}
}

// AggregatedHealthState1 enumerates the values for aggregated health state 1.
type AggregatedHealthState1 string

const (
	// AggregatedHealthState1Error ...
	AggregatedHealthState1Error AggregatedHealthState1 = "Error"
	// AggregatedHealthState1Invalid ...
	AggregatedHealthState1Invalid AggregatedHealthState1 = "Invalid"
	// AggregatedHealthState1Ok ...
	AggregatedHealthState1Ok AggregatedHealthState1 = "Ok"
	// AggregatedHealthState1Unknown ...
	AggregatedHealthState1Unknown AggregatedHealthState1 = "Unknown"
	// AggregatedHealthState1Warning ...
	AggregatedHealthState1Warning AggregatedHealthState1 = "Warning"
)

// PossibleAggregatedHealthState1Values returns an array of possible values for the AggregatedHealthState1 const type.
func PossibleAggregatedHealthState1Values() []AggregatedHealthState1 {
	return []AggregatedHealthState1{AggregatedHealthState1Error, AggregatedHealthState1Invalid, AggregatedHealthState1Ok, AggregatedHealthState1Unknown, AggregatedHealthState1Warning}
}

// AggregatedHealthState10 enumerates the values for aggregated health state 10.
type AggregatedHealthState10 string

const (
	// AggregatedHealthState10Error ...
	AggregatedHealthState10Error AggregatedHealthState10 = "Error"
	// AggregatedHealthState10Invalid ...
	AggregatedHealthState10Invalid AggregatedHealthState10 = "Invalid"
	// AggregatedHealthState10Ok ...
	AggregatedHealthState10Ok AggregatedHealthState10 = "Ok"
	// AggregatedHealthState10Unknown ...
	AggregatedHealthState10Unknown AggregatedHealthState10 = "Unknown"
	// AggregatedHealthState10Warning ...
	AggregatedHealthState10Warning AggregatedHealthState10 = "Warning"
)

// PossibleAggregatedHealthState10Values returns an array of possible values for the AggregatedHealthState10 const type.
func PossibleAggregatedHealthState10Values() []AggregatedHealthState10 {
	return []AggregatedHealthState10{AggregatedHealthState10Error, AggregatedHealthState10Invalid, AggregatedHealthState10Ok, AggregatedHealthState10Unknown, AggregatedHealthState10Warning}
}

// AggregatedHealthState11 enumerates the values for aggregated health state 11.
type AggregatedHealthState11 string

const (
	// AggregatedHealthState11Error ...
	AggregatedHealthState11Error AggregatedHealthState11 = "Error"
	// AggregatedHealthState11Invalid ...
	AggregatedHealthState11Invalid AggregatedHealthState11 = "Invalid"
	// AggregatedHealthState11Ok ...
	AggregatedHealthState11Ok AggregatedHealthState11 = "Ok"
	// AggregatedHealthState11Unknown ...
	AggregatedHealthState11Unknown AggregatedHealthState11 = "Unknown"
	// AggregatedHealthState11Warning ...
	AggregatedHealthState11Warning AggregatedHealthState11 = "Warning"
)

// PossibleAggregatedHealthState11Values returns an array of possible values for the AggregatedHealthState11 const type.
func PossibleAggregatedHealthState11Values() []AggregatedHealthState11 {
	return []AggregatedHealthState11{AggregatedHealthState11Error, AggregatedHealthState11Invalid, AggregatedHealthState11Ok, AggregatedHealthState11Unknown, AggregatedHealthState11Warning}
}

// AggregatedHealthState12 enumerates the values for aggregated health state 12.
type AggregatedHealthState12 string

const (
	// AggregatedHealthState12Error ...
	AggregatedHealthState12Error AggregatedHealthState12 = "Error"
	// AggregatedHealthState12Invalid ...
	AggregatedHealthState12Invalid AggregatedHealthState12 = "Invalid"
	// AggregatedHealthState12Ok ...
	AggregatedHealthState12Ok AggregatedHealthState12 = "Ok"
	// AggregatedHealthState12Unknown ...
	AggregatedHealthState12Unknown AggregatedHealthState12 = "Unknown"
	// AggregatedHealthState12Warning ...
	AggregatedHealthState12Warning AggregatedHealthState12 = "Warning"
)

// PossibleAggregatedHealthState12Values returns an array of possible values for the AggregatedHealthState12 const type.
func PossibleAggregatedHealthState12Values() []AggregatedHealthState12 {
	return []AggregatedHealthState12{AggregatedHealthState12Error, AggregatedHealthState12Invalid, AggregatedHealthState12Ok, AggregatedHealthState12Unknown, AggregatedHealthState12Warning}
}

// AggregatedHealthState13 enumerates the values for aggregated health state 13.
type AggregatedHealthState13 string

const (
	// AggregatedHealthState13Error ...
	AggregatedHealthState13Error AggregatedHealthState13 = "Error"
	// AggregatedHealthState13Invalid ...
	AggregatedHealthState13Invalid AggregatedHealthState13 = "Invalid"
	// AggregatedHealthState13Ok ...
	AggregatedHealthState13Ok AggregatedHealthState13 = "Ok"
	// AggregatedHealthState13Unknown ...
	AggregatedHealthState13Unknown AggregatedHealthState13 = "Unknown"
	// AggregatedHealthState13Warning ...
	AggregatedHealthState13Warning AggregatedHealthState13 = "Warning"
)

// PossibleAggregatedHealthState13Values returns an array of possible values for the AggregatedHealthState13 const type.
func PossibleAggregatedHealthState13Values() []AggregatedHealthState13 {
	return []AggregatedHealthState13{AggregatedHealthState13Error, AggregatedHealthState13Invalid, AggregatedHealthState13Ok, AggregatedHealthState13Unknown, AggregatedHealthState13Warning}
}

// AggregatedHealthState14 enumerates the values for aggregated health state 14.
type AggregatedHealthState14 string

const (
	// AggregatedHealthState14Error ...
	AggregatedHealthState14Error AggregatedHealthState14 = "Error"
	// AggregatedHealthState14Invalid ...
	AggregatedHealthState14Invalid AggregatedHealthState14 = "Invalid"
	// AggregatedHealthState14Ok ...
	AggregatedHealthState14Ok AggregatedHealthState14 = "Ok"
	// AggregatedHealthState14Unknown ...
	AggregatedHealthState14Unknown AggregatedHealthState14 = "Unknown"
	// AggregatedHealthState14Warning ...
	AggregatedHealthState14Warning AggregatedHealthState14 = "Warning"
)

// PossibleAggregatedHealthState14Values returns an array of possible values for the AggregatedHealthState14 const type.
func PossibleAggregatedHealthState14Values() []AggregatedHealthState14 {
	return []AggregatedHealthState14{AggregatedHealthState14Error, AggregatedHealthState14Invalid, AggregatedHealthState14Ok, AggregatedHealthState14Unknown, AggregatedHealthState14Warning}
}

// AggregatedHealthState15 enumerates the values for aggregated health state 15.
type AggregatedHealthState15 string

const (
	// AggregatedHealthState15Error ...
	AggregatedHealthState15Error AggregatedHealthState15 = "Error"
	// AggregatedHealthState15Invalid ...
	AggregatedHealthState15Invalid AggregatedHealthState15 = "Invalid"
	// AggregatedHealthState15Ok ...
	AggregatedHealthState15Ok AggregatedHealthState15 = "Ok"
	// AggregatedHealthState15Unknown ...
	AggregatedHealthState15Unknown AggregatedHealthState15 = "Unknown"
	// AggregatedHealthState15Warning ...
	AggregatedHealthState15Warning AggregatedHealthState15 = "Warning"
)

// PossibleAggregatedHealthState15Values returns an array of possible values for the AggregatedHealthState15 const type.
func PossibleAggregatedHealthState15Values() []AggregatedHealthState15 {
	return []AggregatedHealthState15{AggregatedHealthState15Error, AggregatedHealthState15Invalid, AggregatedHealthState15Ok, AggregatedHealthState15Unknown, AggregatedHealthState15Warning}
}

// AggregatedHealthState2 enumerates the values for aggregated health state 2.
type AggregatedHealthState2 string

const (
	// AggregatedHealthState2Error ...
	AggregatedHealthState2Error AggregatedHealthState2 = "Error"
	// AggregatedHealthState2Invalid ...
	AggregatedHealthState2Invalid AggregatedHealthState2 = "Invalid"
	// AggregatedHealthState2Ok ...
	AggregatedHealthState2Ok AggregatedHealthState2 = "Ok"
	// AggregatedHealthState2Unknown ...
	AggregatedHealthState2Unknown AggregatedHealthState2 = "Unknown"
	// AggregatedHealthState2Warning ...
	AggregatedHealthState2Warning AggregatedHealthState2 = "Warning"
)

// PossibleAggregatedHealthState2Values returns an array of possible values for the AggregatedHealthState2 const type.
func PossibleAggregatedHealthState2Values() []AggregatedHealthState2 {
	return []AggregatedHealthState2{AggregatedHealthState2Error, AggregatedHealthState2Invalid, AggregatedHealthState2Ok, AggregatedHealthState2Unknown, AggregatedHealthState2Warning}
}

// AggregatedHealthState3 enumerates the values for aggregated health state 3.
type AggregatedHealthState3 string

const (
	// AggregatedHealthState3Error ...
	AggregatedHealthState3Error AggregatedHealthState3 = "Error"
	// AggregatedHealthState3Invalid ...
	AggregatedHealthState3Invalid AggregatedHealthState3 = "Invalid"
	// AggregatedHealthState3Ok ...
	AggregatedHealthState3Ok AggregatedHealthState3 = "Ok"
	// AggregatedHealthState3Unknown ...
	AggregatedHealthState3Unknown AggregatedHealthState3 = "Unknown"
	// AggregatedHealthState3Warning ...
	AggregatedHealthState3Warning AggregatedHealthState3 = "Warning"
)

// PossibleAggregatedHealthState3Values returns an array of possible values for the AggregatedHealthState3 const type.
func PossibleAggregatedHealthState3Values() []AggregatedHealthState3 {
	return []AggregatedHealthState3{AggregatedHealthState3Error, AggregatedHealthState3Invalid, AggregatedHealthState3Ok, AggregatedHealthState3Unknown, AggregatedHealthState3Warning}
}

// AggregatedHealthState4 enumerates the values for aggregated health state 4.
type AggregatedHealthState4 string

const (
	// AggregatedHealthState4Error ...
	AggregatedHealthState4Error AggregatedHealthState4 = "Error"
	// AggregatedHealthState4Invalid ...
	AggregatedHealthState4Invalid AggregatedHealthState4 = "Invalid"
	// AggregatedHealthState4Ok ...
	AggregatedHealthState4Ok AggregatedHealthState4 = "Ok"
	// AggregatedHealthState4Unknown ...
	AggregatedHealthState4Unknown AggregatedHealthState4 = "Unknown"
	// AggregatedHealthState4Warning ...
	AggregatedHealthState4Warning AggregatedHealthState4 = "Warning"
)

// PossibleAggregatedHealthState4Values returns an array of possible values for the AggregatedHealthState4 const type.
func PossibleAggregatedHealthState4Values() []AggregatedHealthState4 {
	return []AggregatedHealthState4{AggregatedHealthState4Error, AggregatedHealthState4Invalid, AggregatedHealthState4Ok, AggregatedHealthState4Unknown, AggregatedHealthState4Warning}
}

// AggregatedHealthState5 enumerates the values for aggregated health state 5.
type AggregatedHealthState5 string

const (
	// AggregatedHealthState5Error ...
	AggregatedHealthState5Error AggregatedHealthState5 = "Error"
	// AggregatedHealthState5Invalid ...
	AggregatedHealthState5Invalid AggregatedHealthState5 = "Invalid"
	// AggregatedHealthState5Ok ...
	AggregatedHealthState5Ok AggregatedHealthState5 = "Ok"
	// AggregatedHealthState5Unknown ...
	AggregatedHealthState5Unknown AggregatedHealthState5 = "Unknown"
	// AggregatedHealthState5Warning ...
	AggregatedHealthState5Warning AggregatedHealthState5 = "Warning"
)

// PossibleAggregatedHealthState5Values returns an array of possible values for the AggregatedHealthState5 const type.
func PossibleAggregatedHealthState5Values() []AggregatedHealthState5 {
	return []AggregatedHealthState5{AggregatedHealthState5Error, AggregatedHealthState5Invalid, AggregatedHealthState5Ok, AggregatedHealthState5Unknown, AggregatedHealthState5Warning}
}

// AggregatedHealthState6 enumerates the values for aggregated health state 6.
type AggregatedHealthState6 string

const (
	// AggregatedHealthState6Error ...
	AggregatedHealthState6Error AggregatedHealthState6 = "Error"
	// AggregatedHealthState6Invalid ...
	AggregatedHealthState6Invalid AggregatedHealthState6 = "Invalid"
	// AggregatedHealthState6Ok ...
	AggregatedHealthState6Ok AggregatedHealthState6 = "Ok"
	// AggregatedHealthState6Unknown ...
	AggregatedHealthState6Unknown AggregatedHealthState6 = "Unknown"
	// AggregatedHealthState6Warning ...
	AggregatedHealthState6Warning AggregatedHealthState6 = "Warning"
)

// PossibleAggregatedHealthState6Values returns an array of possible values for the AggregatedHealthState6 const type.
func PossibleAggregatedHealthState6Values() []AggregatedHealthState6 {
	return []AggregatedHealthState6{AggregatedHealthState6Error, AggregatedHealthState6Invalid, AggregatedHealthState6Ok, AggregatedHealthState6Unknown, AggregatedHealthState6Warning}
}

// AggregatedHealthState7 enumerates the values for aggregated health state 7.
type AggregatedHealthState7 string

const (
	// AggregatedHealthState7Error ...
	AggregatedHealthState7Error AggregatedHealthState7 = "Error"
	// AggregatedHealthState7Invalid ...
	AggregatedHealthState7Invalid AggregatedHealthState7 = "Invalid"
	// AggregatedHealthState7Ok ...
	AggregatedHealthState7Ok AggregatedHealthState7 = "Ok"
	// AggregatedHealthState7Unknown ...
	AggregatedHealthState7Unknown AggregatedHealthState7 = "Unknown"
	// AggregatedHealthState7Warning ...
	AggregatedHealthState7Warning AggregatedHealthState7 = "Warning"
)

// PossibleAggregatedHealthState7Values returns an array of possible values for the AggregatedHealthState7 const type.
func PossibleAggregatedHealthState7Values() []AggregatedHealthState7 {
	return []AggregatedHealthState7{AggregatedHealthState7Error, AggregatedHealthState7Invalid, AggregatedHealthState7Ok, AggregatedHealthState7Unknown, AggregatedHealthState7Warning}
}

// AggregatedHealthState8 enumerates the values for aggregated health state 8.
type AggregatedHealthState8 string

const (
	// AggregatedHealthState8Error ...
	AggregatedHealthState8Error AggregatedHealthState8 = "Error"
	// AggregatedHealthState8Invalid ...
	AggregatedHealthState8Invalid AggregatedHealthState8 = "Invalid"
	// AggregatedHealthState8Ok ...
	AggregatedHealthState8Ok AggregatedHealthState8 = "Ok"
	// AggregatedHealthState8Unknown ...
	AggregatedHealthState8Unknown AggregatedHealthState8 = "Unknown"
	// AggregatedHealthState8Warning ...
	AggregatedHealthState8Warning AggregatedHealthState8 = "Warning"
)

// PossibleAggregatedHealthState8Values returns an array of possible values for the AggregatedHealthState8 const type.
func PossibleAggregatedHealthState8Values() []AggregatedHealthState8 {
	return []AggregatedHealthState8{AggregatedHealthState8Error, AggregatedHealthState8Invalid, AggregatedHealthState8Ok, AggregatedHealthState8Unknown, AggregatedHealthState8Warning}
}

// AggregatedHealthState9 enumerates the values for aggregated health state 9.
type AggregatedHealthState9 string

const (
	// AggregatedHealthState9Error ...
	AggregatedHealthState9Error AggregatedHealthState9 = "Error"
	// AggregatedHealthState9Invalid ...
	AggregatedHealthState9Invalid AggregatedHealthState9 = "Invalid"
	// AggregatedHealthState9Ok ...
	AggregatedHealthState9Ok AggregatedHealthState9 = "Ok"
	// AggregatedHealthState9Unknown ...
	AggregatedHealthState9Unknown AggregatedHealthState9 = "Unknown"
	// AggregatedHealthState9Warning ...
	AggregatedHealthState9Warning AggregatedHealthState9 = "Warning"
)

// PossibleAggregatedHealthState9Values returns an array of possible values for the AggregatedHealthState9 const type.
func PossibleAggregatedHealthState9Values() []AggregatedHealthState9 {
	return []AggregatedHealthState9{AggregatedHealthState9Error, AggregatedHealthState9Invalid, AggregatedHealthState9Ok, AggregatedHealthState9Unknown, AggregatedHealthState9Warning}
}

// DeactivationIntent enumerates the values for deactivation intent.
type DeactivationIntent string

const (
	// Pause ...
	Pause DeactivationIntent = "Pause"
	// RemoveData ...
	RemoveData DeactivationIntent = "RemoveData"
	// RemoveNode ...
	RemoveNode DeactivationIntent = "RemoveNode"
	// Restart ...
	Restart DeactivationIntent = "Restart"
)

// PossibleDeactivationIntentValues returns an array of possible values for the DeactivationIntent const type.
func PossibleDeactivationIntentValues() []DeactivationIntent {
	return []DeactivationIntent{Pause, RemoveData, RemoveNode, Restart}
}

// DefaultMoveCost enumerates the values for default move cost.
type DefaultMoveCost string

const (
	// High ...
	High DefaultMoveCost = "High"
	// Low ...
	Low DefaultMoveCost = "Low"
	// Medium ...
	Medium DefaultMoveCost = "Medium"
	// Zero ...
	Zero DefaultMoveCost = "Zero"
)

// PossibleDefaultMoveCostValues returns an array of possible values for the DefaultMoveCost const type.
func PossibleDefaultMoveCostValues() []DefaultMoveCost {
	return []DefaultMoveCost{High, Low, Medium, Zero}
}

// DefaultMoveCost1 enumerates the values for default move cost 1.
type DefaultMoveCost1 string

const (
	// DefaultMoveCost1High ...
	DefaultMoveCost1High DefaultMoveCost1 = "High"
	// DefaultMoveCost1Low ...
	DefaultMoveCost1Low DefaultMoveCost1 = "Low"
	// DefaultMoveCost1Medium ...
	DefaultMoveCost1Medium DefaultMoveCost1 = "Medium"
	// DefaultMoveCost1Zero ...
	DefaultMoveCost1Zero DefaultMoveCost1 = "Zero"
)

// PossibleDefaultMoveCost1Values returns an array of possible values for the DefaultMoveCost1 const type.
func PossibleDefaultMoveCost1Values() []DefaultMoveCost1 {
	return []DefaultMoveCost1{DefaultMoveCost1High, DefaultMoveCost1Low, DefaultMoveCost1Medium, DefaultMoveCost1Zero}
}

// DefaultMoveCost2 enumerates the values for default move cost 2.
type DefaultMoveCost2 string

const (
	// DefaultMoveCost2High ...
	DefaultMoveCost2High DefaultMoveCost2 = "High"
	// DefaultMoveCost2Low ...
	DefaultMoveCost2Low DefaultMoveCost2 = "Low"
	// DefaultMoveCost2Medium ...
	DefaultMoveCost2Medium DefaultMoveCost2 = "Medium"
	// DefaultMoveCost2Zero ...
	DefaultMoveCost2Zero DefaultMoveCost2 = "Zero"
)

// PossibleDefaultMoveCost2Values returns an array of possible values for the DefaultMoveCost2 const type.
func PossibleDefaultMoveCost2Values() []DefaultMoveCost2 {
	return []DefaultMoveCost2{DefaultMoveCost2High, DefaultMoveCost2Low, DefaultMoveCost2Medium, DefaultMoveCost2Zero}
}

// DefaultMoveCost3 enumerates the values for default move cost 3.
type DefaultMoveCost3 string

const (
	// DefaultMoveCost3High ...
	DefaultMoveCost3High DefaultMoveCost3 = "High"
	// DefaultMoveCost3Low ...
	DefaultMoveCost3Low DefaultMoveCost3 = "Low"
	// DefaultMoveCost3Medium ...
	DefaultMoveCost3Medium DefaultMoveCost3 = "Medium"
	// DefaultMoveCost3Zero ...
	DefaultMoveCost3Zero DefaultMoveCost3 = "Zero"
)

// PossibleDefaultMoveCost3Values returns an array of possible values for the DefaultMoveCost3 const type.
func PossibleDefaultMoveCost3Values() []DefaultMoveCost3 {
	return []DefaultMoveCost3{DefaultMoveCost3High, DefaultMoveCost3Low, DefaultMoveCost3Medium, DefaultMoveCost3Zero}
}

// FailureReason enumerates the values for failure reason.
type FailureReason string

const (
	// FailureReasonHealthCheck ...
	FailureReasonHealthCheck FailureReason = "HealthCheck"
	// FailureReasonInterrupted ...
	FailureReasonInterrupted FailureReason = "Interrupted"
	// FailureReasonInvalid ...
	FailureReasonInvalid FailureReason = "Invalid"
	// FailureReasonOverallUpgradeTimeout ...
	FailureReasonOverallUpgradeTimeout FailureReason = "OverallUpgradeTimeout"
	// FailureReasonUpgradeDomainTimeout ...
	FailureReasonUpgradeDomainTimeout FailureReason = "UpgradeDomainTimeout"
)

// PossibleFailureReasonValues returns an array of possible values for the FailureReason const type.
func PossibleFailureReasonValues() []FailureReason {
	return []FailureReason{FailureReasonHealthCheck, FailureReasonInterrupted, FailureReasonInvalid, FailureReasonOverallUpgradeTimeout, FailureReasonUpgradeDomainTimeout}
}

// FailureReason1 enumerates the values for failure reason 1.
type FailureReason1 string

const (
	// FailureReason1HealthCheck ...
	FailureReason1HealthCheck FailureReason1 = "HealthCheck"
	// FailureReason1Interrupted ...
	FailureReason1Interrupted FailureReason1 = "Interrupted"
	// FailureReason1Invalid ...
	FailureReason1Invalid FailureReason1 = "Invalid"
	// FailureReason1OverallUpgradeTimeout ...
	FailureReason1OverallUpgradeTimeout FailureReason1 = "OverallUpgradeTimeout"
	// FailureReason1UpgradeDomainTimeout ...
	FailureReason1UpgradeDomainTimeout FailureReason1 = "UpgradeDomainTimeout"
)

// PossibleFailureReason1Values returns an array of possible values for the FailureReason1 const type.
func PossibleFailureReason1Values() []FailureReason1 {
	return []FailureReason1{FailureReason1HealthCheck, FailureReason1Interrupted, FailureReason1Invalid, FailureReason1OverallUpgradeTimeout, FailureReason1UpgradeDomainTimeout}
}

// HealthState enumerates the values for health state.
type HealthState string

const (
	// HealthStateError ...
	HealthStateError HealthState = "Error"
	// HealthStateInvalid ...
	HealthStateInvalid HealthState = "Invalid"
	// HealthStateOk ...
	HealthStateOk HealthState = "Ok"
	// HealthStateUnknown ...
	HealthStateUnknown HealthState = "Unknown"
	// HealthStateWarning ...
	HealthStateWarning HealthState = "Warning"
)

// PossibleHealthStateValues returns an array of possible values for the HealthState const type.
func PossibleHealthStateValues() []HealthState {
	return []HealthState{HealthStateError, HealthStateInvalid, HealthStateOk, HealthStateUnknown, HealthStateWarning}
}

// HealthState1 enumerates the values for health state 1.
type HealthState1 string

const (
	// HealthState1Error ...
	HealthState1Error HealthState1 = "Error"
	// HealthState1Invalid ...
	HealthState1Invalid HealthState1 = "Invalid"
	// HealthState1Ok ...
	HealthState1Ok HealthState1 = "Ok"
	// HealthState1Unknown ...
	HealthState1Unknown HealthState1 = "Unknown"
	// HealthState1Warning ...
	HealthState1Warning HealthState1 = "Warning"
)

// PossibleHealthState1Values returns an array of possible values for the HealthState1 const type.
func PossibleHealthState1Values() []HealthState1 {
	return []HealthState1{HealthState1Error, HealthState1Invalid, HealthState1Ok, HealthState1Unknown, HealthState1Warning}
}

// HealthState2 enumerates the values for health state 2.
type HealthState2 string

const (
	// HealthState2Error ...
	HealthState2Error HealthState2 = "Error"
	// HealthState2Invalid ...
	HealthState2Invalid HealthState2 = "Invalid"
	// HealthState2Ok ...
	HealthState2Ok HealthState2 = "Ok"
	// HealthState2Unknown ...
	HealthState2Unknown HealthState2 = "Unknown"
	// HealthState2Warning ...
	HealthState2Warning HealthState2 = "Warning"
)

// PossibleHealthState2Values returns an array of possible values for the HealthState2 const type.
func PossibleHealthState2Values() []HealthState2 {
	return []HealthState2{HealthState2Error, HealthState2Invalid, HealthState2Ok, HealthState2Unknown, HealthState2Warning}
}

// HealthState3 enumerates the values for health state 3.
type HealthState3 string

const (
	// HealthState3Error ...
	HealthState3Error HealthState3 = "Error"
	// HealthState3Invalid ...
	HealthState3Invalid HealthState3 = "Invalid"
	// HealthState3Ok ...
	HealthState3Ok HealthState3 = "Ok"
	// HealthState3Unknown ...
	HealthState3Unknown HealthState3 = "Unknown"
	// HealthState3Warning ...
	HealthState3Warning HealthState3 = "Warning"
)

// PossibleHealthState3Values returns an array of possible values for the HealthState3 const type.
func PossibleHealthState3Values() []HealthState3 {
	return []HealthState3{HealthState3Error, HealthState3Invalid, HealthState3Ok, HealthState3Unknown, HealthState3Warning}
}

// HealthState4 enumerates the values for health state 4.
type HealthState4 string

const (
	// HealthState4Error ...
	HealthState4Error HealthState4 = "Error"
	// HealthState4Invalid ...
	HealthState4Invalid HealthState4 = "Invalid"
	// HealthState4Ok ...
	HealthState4Ok HealthState4 = "Ok"
	// HealthState4Unknown ...
	HealthState4Unknown HealthState4 = "Unknown"
	// HealthState4Warning ...
	HealthState4Warning HealthState4 = "Warning"
)

// PossibleHealthState4Values returns an array of possible values for the HealthState4 const type.
func PossibleHealthState4Values() []HealthState4 {
	return []HealthState4{HealthState4Error, HealthState4Invalid, HealthState4Ok, HealthState4Unknown, HealthState4Warning}
}

// HealthState5 enumerates the values for health state 5.
type HealthState5 string

const (
	// HealthState5Error ...
	HealthState5Error HealthState5 = "Error"
	// HealthState5Invalid ...
	HealthState5Invalid HealthState5 = "Invalid"
	// HealthState5Ok ...
	HealthState5Ok HealthState5 = "Ok"
	// HealthState5Unknown ...
	HealthState5Unknown HealthState5 = "Unknown"
	// HealthState5Warning ...
	HealthState5Warning HealthState5 = "Warning"
)

// PossibleHealthState5Values returns an array of possible values for the HealthState5 const type.
func PossibleHealthState5Values() []HealthState5 {
	return []HealthState5{HealthState5Error, HealthState5Invalid, HealthState5Ok, HealthState5Unknown, HealthState5Warning}
}

// HealthState6 enumerates the values for health state 6.
type HealthState6 string

const (
	// HealthState6Error ...
	HealthState6Error HealthState6 = "Error"
	// HealthState6Invalid ...
	HealthState6Invalid HealthState6 = "Invalid"
	// HealthState6Ok ...
	HealthState6Ok HealthState6 = "Ok"
	// HealthState6Unknown ...
	HealthState6Unknown HealthState6 = "Unknown"
	// HealthState6Warning ...
	HealthState6Warning HealthState6 = "Warning"
)

// PossibleHealthState6Values returns an array of possible values for the HealthState6 const type.
func PossibleHealthState6Values() []HealthState6 {
	return []HealthState6{HealthState6Error, HealthState6Invalid, HealthState6Ok, HealthState6Unknown, HealthState6Warning}
}

// Kind enumerates the values for kind.
type Kind string

const (
	// KindApplication ...
	KindApplication Kind = "Application"
	// KindApplications ...
	KindApplications Kind = "Applications"
	// KindApplicationType ...
	KindApplicationType Kind = "ApplicationType"
	// KindDeltaNodesCheck ...
	KindDeltaNodesCheck Kind = "DeltaNodesCheck"
	// KindDeployedApplication ...
	KindDeployedApplication Kind = "DeployedApplication"
	// KindDeployedApplications ...
	KindDeployedApplications Kind = "DeployedApplications"
	// KindDeployedServicePackage ...
	KindDeployedServicePackage Kind = "DeployedServicePackage"
	// KindDeployedServicePackages ...
	KindDeployedServicePackages Kind = "DeployedServicePackages"
	// KindEvent ...
	KindEvent Kind = "Event"
	// KindHealthEvaluation ...
	KindHealthEvaluation Kind = "HealthEvaluation"
	// KindNode ...
	KindNode Kind = "Node"
	// KindNodes ...
	KindNodes Kind = "Nodes"
	// KindPartition ...
	KindPartition Kind = "Partition"
	// KindPartitions ...
	KindPartitions Kind = "Partitions"
	// KindReplica ...
	KindReplica Kind = "Replica"
	// KindReplicas ...
	KindReplicas Kind = "Replicas"
	// KindService ...
	KindService Kind = "Service"
	// KindServices ...
	KindServices Kind = "Services"
	// KindSystemApplication ...
	KindSystemApplication Kind = "SystemApplication"
	// KindUpgradeDomainDeltaNodesCheck ...
	KindUpgradeDomainDeltaNodesCheck Kind = "UpgradeDomainDeltaNodesCheck"
	// KindUpgradeDomainDeployedApplications ...
	KindUpgradeDomainDeployedApplications Kind = "UpgradeDomainDeployedApplications"
	// KindUpgradeDomainNodes ...
	KindUpgradeDomainNodes Kind = "UpgradeDomainNodes"
)

// PossibleKindValues returns an array of possible values for the Kind const type.
func PossibleKindValues() []Kind {
	return []Kind{KindApplication, KindApplications, KindApplicationType, KindDeltaNodesCheck, KindDeployedApplication, KindDeployedApplications, KindDeployedServicePackage, KindDeployedServicePackages, KindEvent, KindHealthEvaluation, KindNode, KindNodes, KindPartition, KindPartitions, KindReplica, KindReplicas, KindService, KindServices, KindSystemApplication, KindUpgradeDomainDeltaNodesCheck, KindUpgradeDomainDeployedApplications, KindUpgradeDomainNodes}
}

// NodeDeactivationIntent enumerates the values for node deactivation intent.
type NodeDeactivationIntent string

const (
	// NodeDeactivationIntentInvalid ...
	NodeDeactivationIntentInvalid NodeDeactivationIntent = "Invalid"
	// NodeDeactivationIntentPause ...
	NodeDeactivationIntentPause NodeDeactivationIntent = "Pause"
	// NodeDeactivationIntentRemoveData ...
	NodeDeactivationIntentRemoveData NodeDeactivationIntent = "RemoveData"
	// NodeDeactivationIntentRestart ...
	NodeDeactivationIntentRestart NodeDeactivationIntent = "Restart"
)

// PossibleNodeDeactivationIntentValues returns an array of possible values for the NodeDeactivationIntent const type.
func PossibleNodeDeactivationIntentValues() []NodeDeactivationIntent {
	return []NodeDeactivationIntent{NodeDeactivationIntentInvalid, NodeDeactivationIntentPause, NodeDeactivationIntentRemoveData, NodeDeactivationIntentRestart}
}

// NodeDeactivationStatus enumerates the values for node deactivation status.
type NodeDeactivationStatus string

const (
	// NodeDeactivationStatusCompleted ...
	NodeDeactivationStatusCompleted NodeDeactivationStatus = "Completed"
	// NodeDeactivationStatusInvalid ...
	NodeDeactivationStatusInvalid NodeDeactivationStatus = "Invalid"
	// NodeDeactivationStatusSafetyCheckComplete ...
	NodeDeactivationStatusSafetyCheckComplete NodeDeactivationStatus = "SafetyCheckComplete"
	// NodeDeactivationStatusSafetyCheckInProgress ...
	NodeDeactivationStatusSafetyCheckInProgress NodeDeactivationStatus = "SafetyCheckInProgress"
)

// PossibleNodeDeactivationStatusValues returns an array of possible values for the NodeDeactivationStatus const type.
func PossibleNodeDeactivationStatusValues() []NodeDeactivationStatus {
	return []NodeDeactivationStatus{NodeDeactivationStatusCompleted, NodeDeactivationStatusInvalid, NodeDeactivationStatusSafetyCheckComplete, NodeDeactivationStatusSafetyCheckInProgress}
}

// NodeStatus enumerates the values for node status.
type NodeStatus string

const (
	// NodeStatusDisabled ...
	NodeStatusDisabled NodeStatus = "Disabled"
	// NodeStatusDisabling ...
	NodeStatusDisabling NodeStatus = "Disabling"
	// NodeStatusDown ...
	NodeStatusDown NodeStatus = "Down"
	// NodeStatusEnabling ...
	NodeStatusEnabling NodeStatus = "Enabling"
	// NodeStatusInvalid ...
	NodeStatusInvalid NodeStatus = "Invalid"
	// NodeStatusRemoved ...
	NodeStatusRemoved NodeStatus = "Removed"
	// NodeStatusUnknown ...
	NodeStatusUnknown NodeStatus = "Unknown"
	// NodeStatusUp ...
	NodeStatusUp NodeStatus = "Up"
)

// PossibleNodeStatusValues returns an array of possible values for the NodeStatus const type.
func PossibleNodeStatusValues() []NodeStatus {
	return []NodeStatus{NodeStatusDisabled, NodeStatusDisabling, NodeStatusDown, NodeStatusEnabling, NodeStatusInvalid, NodeStatusRemoved, NodeStatusUnknown, NodeStatusUp}
}

// PartitionScheme enumerates the values for partition scheme.
type PartitionScheme string

const (
	// PartitionSchemeInvalid ...
	PartitionSchemeInvalid PartitionScheme = "Invalid"
	// PartitionSchemeNamed ...
	PartitionSchemeNamed PartitionScheme = "Named"
	// PartitionSchemeSingleton ...
	PartitionSchemeSingleton PartitionScheme = "Singleton"
	// PartitionSchemeUniformInt64 ...
	PartitionSchemeUniformInt64 PartitionScheme = "UniformInt64"
)

// PossiblePartitionSchemeValues returns an array of possible values for the PartitionScheme const type.
func PossiblePartitionSchemeValues() []PartitionScheme {
	return []PartitionScheme{PartitionSchemeInvalid, PartitionSchemeNamed, PartitionSchemeSingleton, PartitionSchemeUniformInt64}
}

// PartitionStatus enumerates the values for partition status.
type PartitionStatus string

const (
	// PartitionStatusDeleting ...
	PartitionStatusDeleting PartitionStatus = "Deleting"
	// PartitionStatusInQuorumLoss ...
	PartitionStatusInQuorumLoss PartitionStatus = "InQuorumLoss"
	// PartitionStatusInvalid ...
	PartitionStatusInvalid PartitionStatus = "Invalid"
	// PartitionStatusNotReady ...
	PartitionStatusNotReady PartitionStatus = "NotReady"
	// PartitionStatusReady ...
	PartitionStatusReady PartitionStatus = "Ready"
	// PartitionStatusReconfiguring ...
	PartitionStatusReconfiguring PartitionStatus = "Reconfiguring"
)

// PossiblePartitionStatusValues returns an array of possible values for the PartitionStatus const type.
func PossiblePartitionStatusValues() []PartitionStatus {
	return []PartitionStatus{PartitionStatusDeleting, PartitionStatusInQuorumLoss, PartitionStatusInvalid, PartitionStatusNotReady, PartitionStatusReady, PartitionStatusReconfiguring}
}

// ReplicaRole enumerates the values for replica role.
type ReplicaRole string

const (
	// ReplicaRoleActiveSecondary ...
	ReplicaRoleActiveSecondary ReplicaRole = "ActiveSecondary"
	// ReplicaRoleIdleSecondary ...
	ReplicaRoleIdleSecondary ReplicaRole = "IdleSecondary"
	// ReplicaRoleInvalid ...
	ReplicaRoleInvalid ReplicaRole = "Invalid"
	// ReplicaRoleNone ...
	ReplicaRoleNone ReplicaRole = "None"
	// ReplicaRolePrimary ...
	ReplicaRolePrimary ReplicaRole = "Primary"
)

// PossibleReplicaRoleValues returns an array of possible values for the ReplicaRole const type.
func PossibleReplicaRoleValues() []ReplicaRole {
	return []ReplicaRole{ReplicaRoleActiveSecondary, ReplicaRoleIdleSecondary, ReplicaRoleInvalid, ReplicaRoleNone, ReplicaRolePrimary}
}

// ReplicaRole1 enumerates the values for replica role 1.
type ReplicaRole1 string

const (
	// ReplicaRole1ActiveSecondary ...
	ReplicaRole1ActiveSecondary ReplicaRole1 = "ActiveSecondary"
	// ReplicaRole1IdleSecondary ...
	ReplicaRole1IdleSecondary ReplicaRole1 = "IdleSecondary"
	// ReplicaRole1Invalid ...
	ReplicaRole1Invalid ReplicaRole1 = "Invalid"
	// ReplicaRole1None ...
	ReplicaRole1None ReplicaRole1 = "None"
	// ReplicaRole1Primary ...
	ReplicaRole1Primary ReplicaRole1 = "Primary"
)

// PossibleReplicaRole1Values returns an array of possible values for the ReplicaRole1 const type.
func PossibleReplicaRole1Values() []ReplicaRole1 {
	return []ReplicaRole1{ReplicaRole1ActiveSecondary, ReplicaRole1IdleSecondary, ReplicaRole1Invalid, ReplicaRole1None, ReplicaRole1Primary}
}

// ReplicaStatus enumerates the values for replica status.
type ReplicaStatus string

const (
	// ReplicaStatusDown ...
	ReplicaStatusDown ReplicaStatus = "Down"
	// ReplicaStatusDropped ...
	ReplicaStatusDropped ReplicaStatus = "Dropped"
	// ReplicaStatusInBuild ...
	ReplicaStatusInBuild ReplicaStatus = "InBuild"
	// ReplicaStatusInvalid ...
	ReplicaStatusInvalid ReplicaStatus = "Invalid"
	// ReplicaStatusReady ...
	ReplicaStatusReady ReplicaStatus = "Ready"
	// ReplicaStatusStandby ...
	ReplicaStatusStandby ReplicaStatus = "Standby"
)

// PossibleReplicaStatusValues returns an array of possible values for the ReplicaStatus const type.
func PossibleReplicaStatusValues() []ReplicaStatus {
	return []ReplicaStatus{ReplicaStatusDown, ReplicaStatusDropped, ReplicaStatusInBuild, ReplicaStatusInvalid, ReplicaStatusReady, ReplicaStatusStandby}
}

// ReplicaStatus1 enumerates the values for replica status 1.
type ReplicaStatus1 string

const (
	// ReplicaStatus1Down ...
	ReplicaStatus1Down ReplicaStatus1 = "Down"
	// ReplicaStatus1Dropped ...
	ReplicaStatus1Dropped ReplicaStatus1 = "Dropped"
	// ReplicaStatus1InBuild ...
	ReplicaStatus1InBuild ReplicaStatus1 = "InBuild"
	// ReplicaStatus1Invalid ...
	ReplicaStatus1Invalid ReplicaStatus1 = "Invalid"
	// ReplicaStatus1Ready ...
	ReplicaStatus1Ready ReplicaStatus1 = "Ready"
	// ReplicaStatus1Standby ...
	ReplicaStatus1Standby ReplicaStatus1 = "Standby"
)

// PossibleReplicaStatus1Values returns an array of possible values for the ReplicaStatus1 const type.
func PossibleReplicaStatus1Values() []ReplicaStatus1 {
	return []ReplicaStatus1{ReplicaStatus1Down, ReplicaStatus1Dropped, ReplicaStatus1InBuild, ReplicaStatus1Invalid, ReplicaStatus1Ready, ReplicaStatus1Standby}
}

// RollingUpgradeMode enumerates the values for rolling upgrade mode.
type RollingUpgradeMode string

const (
	// RollingUpgradeModeInvalid ...
	RollingUpgradeModeInvalid RollingUpgradeMode = "Invalid"
	// RollingUpgradeModeMonitored ...
	RollingUpgradeModeMonitored RollingUpgradeMode = "Monitored"
	// RollingUpgradeModeUnmonitoredAuto ...
	RollingUpgradeModeUnmonitoredAuto RollingUpgradeMode = "UnmonitoredAuto"
	// RollingUpgradeModeUnmonitoredManual ...
	RollingUpgradeModeUnmonitoredManual RollingUpgradeMode = "UnmonitoredManual"
)

// PossibleRollingUpgradeModeValues returns an array of possible values for the RollingUpgradeMode const type.
func PossibleRollingUpgradeModeValues() []RollingUpgradeMode {
	return []RollingUpgradeMode{RollingUpgradeModeInvalid, RollingUpgradeModeMonitored, RollingUpgradeModeUnmonitoredAuto, RollingUpgradeModeUnmonitoredManual}
}

// RollingUpgradeMode1 enumerates the values for rolling upgrade mode 1.
type RollingUpgradeMode1 string

const (
	// RollingUpgradeMode1Invalid ...
	RollingUpgradeMode1Invalid RollingUpgradeMode1 = "Invalid"
	// RollingUpgradeMode1Monitored ...
	RollingUpgradeMode1Monitored RollingUpgradeMode1 = "Monitored"
	// RollingUpgradeMode1UnmonitoredAuto ...
	RollingUpgradeMode1UnmonitoredAuto RollingUpgradeMode1 = "UnmonitoredAuto"
	// RollingUpgradeMode1UnmonitoredManual ...
	RollingUpgradeMode1UnmonitoredManual RollingUpgradeMode1 = "UnmonitoredManual"
)

// PossibleRollingUpgradeMode1Values returns an array of possible values for the RollingUpgradeMode1 const type.
func PossibleRollingUpgradeMode1Values() []RollingUpgradeMode1 {
	return []RollingUpgradeMode1{RollingUpgradeMode1Invalid, RollingUpgradeMode1Monitored, RollingUpgradeMode1UnmonitoredAuto, RollingUpgradeMode1UnmonitoredManual}
}

// RollingUpgradeMode2 enumerates the values for rolling upgrade mode 2.
type RollingUpgradeMode2 string

const (
	// RollingUpgradeMode2Invalid ...
	RollingUpgradeMode2Invalid RollingUpgradeMode2 = "Invalid"
	// RollingUpgradeMode2Monitored ...
	RollingUpgradeMode2Monitored RollingUpgradeMode2 = "Monitored"
	// RollingUpgradeMode2UnmonitoredAuto ...
	RollingUpgradeMode2UnmonitoredAuto RollingUpgradeMode2 = "UnmonitoredAuto"
	// RollingUpgradeMode2UnmonitoredManual ...
	RollingUpgradeMode2UnmonitoredManual RollingUpgradeMode2 = "UnmonitoredManual"
)

// PossibleRollingUpgradeMode2Values returns an array of possible values for the RollingUpgradeMode2 const type.
func PossibleRollingUpgradeMode2Values() []RollingUpgradeMode2 {
	return []RollingUpgradeMode2{RollingUpgradeMode2Invalid, RollingUpgradeMode2Monitored, RollingUpgradeMode2UnmonitoredAuto, RollingUpgradeMode2UnmonitoredManual}
}

// RollingUpgradeMode3 enumerates the values for rolling upgrade mode 3.
type RollingUpgradeMode3 string

const (
	// RollingUpgradeMode3Invalid ...
	RollingUpgradeMode3Invalid RollingUpgradeMode3 = "Invalid"
	// RollingUpgradeMode3Monitored ...
	RollingUpgradeMode3Monitored RollingUpgradeMode3 = "Monitored"
	// RollingUpgradeMode3UnmonitoredAuto ...
	RollingUpgradeMode3UnmonitoredAuto RollingUpgradeMode3 = "UnmonitoredAuto"
	// RollingUpgradeMode3UnmonitoredManual ...
	RollingUpgradeMode3UnmonitoredManual RollingUpgradeMode3 = "UnmonitoredManual"
)

// PossibleRollingUpgradeMode3Values returns an array of possible values for the RollingUpgradeMode3 const type.
func PossibleRollingUpgradeMode3Values() []RollingUpgradeMode3 {
	return []RollingUpgradeMode3{RollingUpgradeMode3Invalid, RollingUpgradeMode3Monitored, RollingUpgradeMode3UnmonitoredAuto, RollingUpgradeMode3UnmonitoredManual}
}

// RollingUpgradeMode4 enumerates the values for rolling upgrade mode 4.
type RollingUpgradeMode4 string

const (
	// RollingUpgradeMode4Invalid ...
	RollingUpgradeMode4Invalid RollingUpgradeMode4 = "Invalid"
	// RollingUpgradeMode4Monitored ...
	RollingUpgradeMode4Monitored RollingUpgradeMode4 = "Monitored"
	// RollingUpgradeMode4UnmonitoredAuto ...
	RollingUpgradeMode4UnmonitoredAuto RollingUpgradeMode4 = "UnmonitoredAuto"
	// RollingUpgradeMode4UnmonitoredManual ...
	RollingUpgradeMode4UnmonitoredManual RollingUpgradeMode4 = "UnmonitoredManual"
)

// PossibleRollingUpgradeMode4Values returns an array of possible values for the RollingUpgradeMode4 const type.
func PossibleRollingUpgradeMode4Values() []RollingUpgradeMode4 {
	return []RollingUpgradeMode4{RollingUpgradeMode4Invalid, RollingUpgradeMode4Monitored, RollingUpgradeMode4UnmonitoredAuto, RollingUpgradeMode4UnmonitoredManual}
}

// RollingUpgradeMode5 enumerates the values for rolling upgrade mode 5.
type RollingUpgradeMode5 string

const (
	// RollingUpgradeMode5Invalid ...
	RollingUpgradeMode5Invalid RollingUpgradeMode5 = "Invalid"
	// RollingUpgradeMode5Monitored ...
	RollingUpgradeMode5Monitored RollingUpgradeMode5 = "Monitored"
	// RollingUpgradeMode5UnmonitoredAuto ...
	RollingUpgradeMode5UnmonitoredAuto RollingUpgradeMode5 = "UnmonitoredAuto"
	// RollingUpgradeMode5UnmonitoredManual ...
	RollingUpgradeMode5UnmonitoredManual RollingUpgradeMode5 = "UnmonitoredManual"
)

// PossibleRollingUpgradeMode5Values returns an array of possible values for the RollingUpgradeMode5 const type.
func PossibleRollingUpgradeMode5Values() []RollingUpgradeMode5 {
	return []RollingUpgradeMode5{RollingUpgradeMode5Invalid, RollingUpgradeMode5Monitored, RollingUpgradeMode5UnmonitoredAuto, RollingUpgradeMode5UnmonitoredManual}
}

// ServiceCorrelationScheme enumerates the values for service correlation scheme.
type ServiceCorrelationScheme string

const (
	// ServiceCorrelationSchemeAffinity ...
	ServiceCorrelationSchemeAffinity ServiceCorrelationScheme = "Affinity"
	// ServiceCorrelationSchemeAlignedAffinity ...
	ServiceCorrelationSchemeAlignedAffinity ServiceCorrelationScheme = "AlignedAffinity"
	// ServiceCorrelationSchemeInvalid ...
	ServiceCorrelationSchemeInvalid ServiceCorrelationScheme = "Invalid"
	// ServiceCorrelationSchemeNonAlignedAffinity ...
	ServiceCorrelationSchemeNonAlignedAffinity ServiceCorrelationScheme = "NonAlignedAffinity"
)

// PossibleServiceCorrelationSchemeValues returns an array of possible values for the ServiceCorrelationScheme const type.
func PossibleServiceCorrelationSchemeValues() []ServiceCorrelationScheme {
	return []ServiceCorrelationScheme{ServiceCorrelationSchemeAffinity, ServiceCorrelationSchemeAlignedAffinity, ServiceCorrelationSchemeInvalid, ServiceCorrelationSchemeNonAlignedAffinity}
}

// ServiceKind enumerates the values for service kind.
type ServiceKind string

const (
	// ServiceKindInvalid ...
	ServiceKindInvalid ServiceKind = "Invalid"
	// ServiceKindStateful ...
	ServiceKindStateful ServiceKind = "Stateful"
	// ServiceKindStateless ...
	ServiceKindStateless ServiceKind = "Stateless"
)

// PossibleServiceKindValues returns an array of possible values for the ServiceKind const type.
func PossibleServiceKindValues() []ServiceKind {
	return []ServiceKind{ServiceKindInvalid, ServiceKindStateful, ServiceKindStateless}
}

// ServiceKind1 enumerates the values for service kind 1.
type ServiceKind1 string

const (
	// ServiceKind1Invalid ...
	ServiceKind1Invalid ServiceKind1 = "Invalid"
	// ServiceKind1Stateful ...
	ServiceKind1Stateful ServiceKind1 = "Stateful"
	// ServiceKind1Stateless ...
	ServiceKind1Stateless ServiceKind1 = "Stateless"
)

// PossibleServiceKind1Values returns an array of possible values for the ServiceKind1 const type.
func PossibleServiceKind1Values() []ServiceKind1 {
	return []ServiceKind1{ServiceKind1Invalid, ServiceKind1Stateful, ServiceKind1Stateless}
}

// ServiceKind2 enumerates the values for service kind 2.
type ServiceKind2 string

const (
	// ServiceKind2Invalid ...
	ServiceKind2Invalid ServiceKind2 = "Invalid"
	// ServiceKind2Stateful ...
	ServiceKind2Stateful ServiceKind2 = "Stateful"
	// ServiceKind2Stateless ...
	ServiceKind2Stateless ServiceKind2 = "Stateless"
)

// PossibleServiceKind2Values returns an array of possible values for the ServiceKind2 const type.
func PossibleServiceKind2Values() []ServiceKind2 {
	return []ServiceKind2{ServiceKind2Invalid, ServiceKind2Stateful, ServiceKind2Stateless}
}

// ServiceKind3 enumerates the values for service kind 3.
type ServiceKind3 string

const (
	// ServiceKind3Invalid ...
	ServiceKind3Invalid ServiceKind3 = "Invalid"
	// ServiceKind3Stateful ...
	ServiceKind3Stateful ServiceKind3 = "Stateful"
	// ServiceKind3Stateless ...
	ServiceKind3Stateless ServiceKind3 = "Stateless"
)

// PossibleServiceKind3Values returns an array of possible values for the ServiceKind3 const type.
func PossibleServiceKind3Values() []ServiceKind3 {
	return []ServiceKind3{ServiceKind3Invalid, ServiceKind3Stateful, ServiceKind3Stateless}
}

// ServiceKind4 enumerates the values for service kind 4.
type ServiceKind4 string

const (
	// ServiceKind4Invalid ...
	ServiceKind4Invalid ServiceKind4 = "Invalid"
	// ServiceKind4Stateful ...
	ServiceKind4Stateful ServiceKind4 = "Stateful"
	// ServiceKind4Stateless ...
	ServiceKind4Stateless ServiceKind4 = "Stateless"
)

// PossibleServiceKind4Values returns an array of possible values for the ServiceKind4 const type.
func PossibleServiceKind4Values() []ServiceKind4 {
	return []ServiceKind4{ServiceKind4Invalid, ServiceKind4Stateful, ServiceKind4Stateless}
}

// ServiceKind5 enumerates the values for service kind 5.
type ServiceKind5 string

const (
	// ServiceKind5Invalid ...
	ServiceKind5Invalid ServiceKind5 = "Invalid"
	// ServiceKind5Stateful ...
	ServiceKind5Stateful ServiceKind5 = "Stateful"
	// ServiceKind5Stateless ...
	ServiceKind5Stateless ServiceKind5 = "Stateless"
)

// PossibleServiceKind5Values returns an array of possible values for the ServiceKind5 const type.
func PossibleServiceKind5Values() []ServiceKind5 {
	return []ServiceKind5{ServiceKind5Invalid, ServiceKind5Stateful, ServiceKind5Stateless}
}

// ServiceKind6 enumerates the values for service kind 6.
type ServiceKind6 string

const (
	// ServiceKind6Invalid ...
	ServiceKind6Invalid ServiceKind6 = "Invalid"
	// ServiceKind6Stateful ...
	ServiceKind6Stateful ServiceKind6 = "Stateful"
	// ServiceKind6Stateless ...
	ServiceKind6Stateless ServiceKind6 = "Stateless"
)

// PossibleServiceKind6Values returns an array of possible values for the ServiceKind6 const type.
func PossibleServiceKind6Values() []ServiceKind6 {
	return []ServiceKind6{ServiceKind6Invalid, ServiceKind6Stateful, ServiceKind6Stateless}
}

// ServiceKindBasicCreateServiceDescription enumerates the values for service kind basic create service
// description.
type ServiceKindBasicCreateServiceDescription string

const (
	// ServiceKindCreateServiceDescription ...
	ServiceKindCreateServiceDescription ServiceKindBasicCreateServiceDescription = "CreateServiceDescription"
	// ServiceKindStateful1 ...
	ServiceKindStateful1 ServiceKindBasicCreateServiceDescription = "Stateful"
	// ServiceKindStateless1 ...
	ServiceKindStateless1 ServiceKindBasicCreateServiceDescription = "Stateless"
)

// PossibleServiceKindBasicCreateServiceDescriptionValues returns an array of possible values for the ServiceKindBasicCreateServiceDescription const type.
func PossibleServiceKindBasicCreateServiceDescriptionValues() []ServiceKindBasicCreateServiceDescription {
	return []ServiceKindBasicCreateServiceDescription{ServiceKindCreateServiceDescription, ServiceKindStateful1, ServiceKindStateless1}
}

// ServiceKindBasicCreateServiceGroupDescription enumerates the values for service kind basic create service
// group description.
type ServiceKindBasicCreateServiceGroupDescription string

const (
	// ServiceKindBasicCreateServiceGroupDescriptionServiceKindCreateServiceGroupDescription ...
	ServiceKindBasicCreateServiceGroupDescriptionServiceKindCreateServiceGroupDescription ServiceKindBasicCreateServiceGroupDescription = "CreateServiceGroupDescription"
	// ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateful ...
	ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateful ServiceKindBasicCreateServiceGroupDescription = "Stateful"
	// ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateless ...
	ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateless ServiceKindBasicCreateServiceGroupDescription = "Stateless"
)

// PossibleServiceKindBasicCreateServiceGroupDescriptionValues returns an array of possible values for the ServiceKindBasicCreateServiceGroupDescription const type.
func PossibleServiceKindBasicCreateServiceGroupDescriptionValues() []ServiceKindBasicCreateServiceGroupDescription {
	return []ServiceKindBasicCreateServiceGroupDescription{ServiceKindBasicCreateServiceGroupDescriptionServiceKindCreateServiceGroupDescription, ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateful, ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateless}
}

// ServiceKindBasicServiceDescription enumerates the values for service kind basic service description.
type ServiceKindBasicServiceDescription string

const (
	// ServiceKindBasicServiceDescriptionServiceKindServiceDescription ...
	ServiceKindBasicServiceDescriptionServiceKindServiceDescription ServiceKindBasicServiceDescription = "ServiceDescription"
	// ServiceKindBasicServiceDescriptionServiceKindStateful ...
	ServiceKindBasicServiceDescriptionServiceKindStateful ServiceKindBasicServiceDescription = "Stateful"
	// ServiceKindBasicServiceDescriptionServiceKindStateless ...
	ServiceKindBasicServiceDescriptionServiceKindStateless ServiceKindBasicServiceDescription = "Stateless"
)

// PossibleServiceKindBasicServiceDescriptionValues returns an array of possible values for the ServiceKindBasicServiceDescription const type.
func PossibleServiceKindBasicServiceDescriptionValues() []ServiceKindBasicServiceDescription {
	return []ServiceKindBasicServiceDescription{ServiceKindBasicServiceDescriptionServiceKindServiceDescription, ServiceKindBasicServiceDescriptionServiceKindStateful, ServiceKindBasicServiceDescriptionServiceKindStateless}
}

// ServiceKindBasicServiceGroupDescription enumerates the values for service kind basic service group
// description.
type ServiceKindBasicServiceGroupDescription string

const (
	// ServiceKindBasicServiceGroupDescriptionServiceKindServiceGroupDescription ...
	ServiceKindBasicServiceGroupDescriptionServiceKindServiceGroupDescription ServiceKindBasicServiceGroupDescription = "ServiceGroupDescription"
	// ServiceKindBasicServiceGroupDescriptionServiceKindStateful ...
	ServiceKindBasicServiceGroupDescriptionServiceKindStateful ServiceKindBasicServiceGroupDescription = "Stateful"
	// ServiceKindBasicServiceGroupDescriptionServiceKindStateless ...
	ServiceKindBasicServiceGroupDescriptionServiceKindStateless ServiceKindBasicServiceGroupDescription = "Stateless"
)

// PossibleServiceKindBasicServiceGroupDescriptionValues returns an array of possible values for the ServiceKindBasicServiceGroupDescription const type.
func PossibleServiceKindBasicServiceGroupDescriptionValues() []ServiceKindBasicServiceGroupDescription {
	return []ServiceKindBasicServiceGroupDescription{ServiceKindBasicServiceGroupDescriptionServiceKindServiceGroupDescription, ServiceKindBasicServiceGroupDescriptionServiceKindStateful, ServiceKindBasicServiceGroupDescriptionServiceKindStateless}
}

// ServiceKindBasicUpdateServiceDescription enumerates the values for service kind basic update service
// description.
type ServiceKindBasicUpdateServiceDescription string

const (
	// ServiceKindBasicUpdateServiceDescriptionServiceKindStateful ...
	ServiceKindBasicUpdateServiceDescriptionServiceKindStateful ServiceKindBasicUpdateServiceDescription = "Stateful"
	// ServiceKindBasicUpdateServiceDescriptionServiceKindStateless ...
	ServiceKindBasicUpdateServiceDescriptionServiceKindStateless ServiceKindBasicUpdateServiceDescription = "Stateless"
	// ServiceKindBasicUpdateServiceDescriptionServiceKindUpdateServiceDescription ...
	ServiceKindBasicUpdateServiceDescriptionServiceKindUpdateServiceDescription ServiceKindBasicUpdateServiceDescription = "UpdateServiceDescription"
)

// PossibleServiceKindBasicUpdateServiceDescriptionValues returns an array of possible values for the ServiceKindBasicUpdateServiceDescription const type.
func PossibleServiceKindBasicUpdateServiceDescriptionValues() []ServiceKindBasicUpdateServiceDescription {
	return []ServiceKindBasicUpdateServiceDescription{ServiceKindBasicUpdateServiceDescriptionServiceKindStateful, ServiceKindBasicUpdateServiceDescriptionServiceKindStateless, ServiceKindBasicUpdateServiceDescriptionServiceKindUpdateServiceDescription}
}

// ServiceKindBasicUpdateServiceGroupDescription enumerates the values for service kind basic update service
// group description.
type ServiceKindBasicUpdateServiceGroupDescription string

const (
	// ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateful ...
	ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateful ServiceKindBasicUpdateServiceGroupDescription = "Stateful"
	// ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateless ...
	ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateless ServiceKindBasicUpdateServiceGroupDescription = "Stateless"
	// ServiceKindBasicUpdateServiceGroupDescriptionServiceKindUpdateServiceGroupDescription ...
	ServiceKindBasicUpdateServiceGroupDescriptionServiceKindUpdateServiceGroupDescription ServiceKindBasicUpdateServiceGroupDescription = "UpdateServiceGroupDescription"
)

// PossibleServiceKindBasicUpdateServiceGroupDescriptionValues returns an array of possible values for the ServiceKindBasicUpdateServiceGroupDescription const type.
func PossibleServiceKindBasicUpdateServiceGroupDescriptionValues() []ServiceKindBasicUpdateServiceGroupDescription {
	return []ServiceKindBasicUpdateServiceGroupDescription{ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateful, ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateless, ServiceKindBasicUpdateServiceGroupDescriptionServiceKindUpdateServiceGroupDescription}
}

// ServiceLoadMetricWeight enumerates the values for service load metric weight.
type ServiceLoadMetricWeight string

const (
	// ServiceLoadMetricWeightHigh ...
	ServiceLoadMetricWeightHigh ServiceLoadMetricWeight = "High"
	// ServiceLoadMetricWeightLow ...
	ServiceLoadMetricWeightLow ServiceLoadMetricWeight = "Low"
	// ServiceLoadMetricWeightMedium ...
	ServiceLoadMetricWeightMedium ServiceLoadMetricWeight = "Medium"
	// ServiceLoadMetricWeightZero ...
	ServiceLoadMetricWeightZero ServiceLoadMetricWeight = "Zero"
)

// PossibleServiceLoadMetricWeightValues returns an array of possible values for the ServiceLoadMetricWeight const type.
func PossibleServiceLoadMetricWeightValues() []ServiceLoadMetricWeight {
	return []ServiceLoadMetricWeight{ServiceLoadMetricWeightHigh, ServiceLoadMetricWeightLow, ServiceLoadMetricWeightMedium, ServiceLoadMetricWeightZero}
}

// ServicePartitionKind enumerates the values for service partition kind.
type ServicePartitionKind string

const (
	// ServicePartitionKindInt64Range ...
	ServicePartitionKindInt64Range ServicePartitionKind = "Int64Range"
	// ServicePartitionKindInvalid ...
	ServicePartitionKindInvalid ServicePartitionKind = "Invalid"
	// ServicePartitionKindNamed ...
	ServicePartitionKindNamed ServicePartitionKind = "Named"
	// ServicePartitionKindSingleton ...
	ServicePartitionKindSingleton ServicePartitionKind = "Singleton"
)

// PossibleServicePartitionKindValues returns an array of possible values for the ServicePartitionKind const type.
func PossibleServicePartitionKindValues() []ServicePartitionKind {
	return []ServicePartitionKind{ServicePartitionKindInt64Range, ServicePartitionKindInvalid, ServicePartitionKindNamed, ServicePartitionKindSingleton}
}

// ServiceStatus enumerates the values for service status.
type ServiceStatus string

const (
	// ServiceStatusActive ...
	ServiceStatusActive ServiceStatus = "Active"
	// ServiceStatusCreating ...
	ServiceStatusCreating ServiceStatus = "Creating"
	// ServiceStatusDeleting ...
	ServiceStatusDeleting ServiceStatus = "Deleting"
	// ServiceStatusFaile ...
	ServiceStatusFaile ServiceStatus = "Faile"
	// ServiceStatusInvalid ...
	ServiceStatusInvalid ServiceStatus = "Invalid"
	// ServiceStatusUpgrading ...
	ServiceStatusUpgrading ServiceStatus = "Upgrading"
)

// PossibleServiceStatusValues returns an array of possible values for the ServiceStatus const type.
func PossibleServiceStatusValues() []ServiceStatus {
	return []ServiceStatus{ServiceStatusActive, ServiceStatusCreating, ServiceStatusDeleting, ServiceStatusFaile, ServiceStatusInvalid, ServiceStatusUpgrading}
}

// UpgradeKind enumerates the values for upgrade kind.
type UpgradeKind string

const (
	// UpgradeKindInvalid ...
	UpgradeKindInvalid UpgradeKind = "Invalid"
	// UpgradeKindRolling ...
	UpgradeKindRolling UpgradeKind = "Rolling"
)

// PossibleUpgradeKindValues returns an array of possible values for the UpgradeKind const type.
func PossibleUpgradeKindValues() []UpgradeKind {
	return []UpgradeKind{UpgradeKindInvalid, UpgradeKindRolling}
}

// UpgradeState enumerates the values for upgrade state.
type UpgradeState string

const (
	// UpgradeStateInvalid ...
	UpgradeStateInvalid UpgradeState = "Invalid"
	// UpgradeStateRollingBackCompleted ...
	UpgradeStateRollingBackCompleted UpgradeState = "RollingBackCompleted"
	// UpgradeStateRollingBackInProgress ...
	UpgradeStateRollingBackInProgress UpgradeState = "RollingBackInProgress"
	// UpgradeStateRollingForwardCompleted ...
	UpgradeStateRollingForwardCompleted UpgradeState = "RollingForwardCompleted"
	// UpgradeStateRollingForwardInProgress ...
	UpgradeStateRollingForwardInProgress UpgradeState = "RollingForwardInProgress"
	// UpgradeStateRollingForwardPending ...
	UpgradeStateRollingForwardPending UpgradeState = "RollingForwardPending"
)

// PossibleUpgradeStateValues returns an array of possible values for the UpgradeState const type.
func PossibleUpgradeStateValues() []UpgradeState {
	return []UpgradeState{UpgradeStateInvalid, UpgradeStateRollingBackCompleted, UpgradeStateRollingBackInProgress, UpgradeStateRollingForwardCompleted, UpgradeStateRollingForwardInProgress, UpgradeStateRollingForwardPending}
}

// UpgradeState1 enumerates the values for upgrade state 1.
type UpgradeState1 string

const (
	// UpgradeState1Invalid ...
	UpgradeState1Invalid UpgradeState1 = "Invalid"
	// UpgradeState1RollingBackCompleted ...
	UpgradeState1RollingBackCompleted UpgradeState1 = "RollingBackCompleted"
	// UpgradeState1RollingBackInProgress ...
	UpgradeState1RollingBackInProgress UpgradeState1 = "RollingBackInProgress"
	// UpgradeState1RollingForwardCompleted ...
	UpgradeState1RollingForwardCompleted UpgradeState1 = "RollingForwardCompleted"
	// UpgradeState1RollingForwardInProgress ...
	UpgradeState1RollingForwardInProgress UpgradeState1 = "RollingForwardInProgress"
	// UpgradeState1RollingForwardPending ...
	UpgradeState1RollingForwardPending UpgradeState1 = "RollingForwardPending"
)

// PossibleUpgradeState1Values returns an array of possible values for the UpgradeState1 const type.
func PossibleUpgradeState1Values() []UpgradeState1 {
	return []UpgradeState1{UpgradeState1Invalid, UpgradeState1RollingBackCompleted, UpgradeState1RollingBackInProgress, UpgradeState1RollingForwardCompleted, UpgradeState1RollingForwardInProgress, UpgradeState1RollingForwardPending}
}

// Application the application
type Application struct {
	autorest.Response `json:"-"`
	ID                *string                      `json:"Id,omitempty"`
	Name              *string                      `json:"Name,omitempty"`
	TypeName          *string                      `json:"TypeName,omitempty"`
	TypeVersion       *string                      `json:"TypeVersion,omitempty"`
	Status            *string                      `json:"Status,omitempty"`
	Parameters        *[]ApplicationParametersItem `json:"Parameters,omitempty"`
	// HealthState - Possible values include: 'HealthState3Invalid', 'HealthState3Ok', 'HealthState3Warning', 'HealthState3Error', 'HealthState3Unknown'
	HealthState HealthState3 `json:"HealthState,omitempty"`
}

// ApplicationDescription the description of the application
type ApplicationDescription struct {
	Name          *string                                    `json:"Name,omitempty"`
	TypeName      *string                                    `json:"TypeName,omitempty"`
	TypeVersion   *string                                    `json:"TypeVersion,omitempty"`
	ParameterList *[]ApplicationDescriptionParameterListItem `json:"ParameterList,omitempty"`
}

// ApplicationDescriptionParameterListItem the list of the parameter
type ApplicationDescriptionParameterListItem struct {
	Key   *string `json:"Key,omitempty"`
	Value *string `json:"Value,omitempty"`
}

// ApplicationHealth the health of the application
type ApplicationHealth struct {
	autorest.Response `json:"-"`
	HealthEvents      *[]HealthEvent `json:"HealthEvents,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState7Invalid', 'AggregatedHealthState7Ok', 'AggregatedHealthState7Warning', 'AggregatedHealthState7Error', 'AggregatedHealthState7Unknown'
	AggregatedHealthState           AggregatedHealthState7                                  `json:"AggregatedHealthState,omitempty"`
	UnhealthyEvaluations            *string                                                 `json:"UnhealthyEvaluations,omitempty"`
	Name                            *string                                                 `json:"Name,omitempty"`
	ServiceHealthStates             *[]ApplicationHealthServiceHealthStatesItem             `json:"ServiceHealthStates,omitempty"`
	DeployedApplicationHealthStates *[]ApplicationHealthDeployedApplicationHealthStatesItem `json:"DeployedApplicationHealthStates,omitempty"`
}

// ApplicationHealthDeployedApplicationHealthStatesItem the states of the deployed application health
type ApplicationHealthDeployedApplicationHealthStatesItem struct {
	ApplicationName *string `json:"ApplicationName,omitempty"`
	NodeName        *string `json:"NodeName,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState6Invalid', 'AggregatedHealthState6Ok', 'AggregatedHealthState6Warning', 'AggregatedHealthState6Error', 'AggregatedHealthState6Unknown'
	AggregatedHealthState AggregatedHealthState6 `json:"AggregatedHealthState,omitempty"`
}

// ApplicationHealthEvaluation the evaluation of the application health
type ApplicationHealthEvaluation struct {
	ServiceName          *string                `json:"ServiceName,omitempty"`
	UnhealthyEvaluations *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	Description          *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) MarshalJSON() ([]byte, error) {
	ahe.Kind = KindApplication
	objectMap := make(map[string]interface{})
	if ahe.ServiceName != nil {
		objectMap["ServiceName"] = ahe.ServiceName
	}
	if ahe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = ahe.UnhealthyEvaluations
	}
	if ahe.Description != nil {
		objectMap["Description"] = ahe.Description
	}
	if ahe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = ahe.AggregatedHealthState
	}
	if ahe.Kind != "" {
		objectMap["Kind"] = ahe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return &ahe, true
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationHealthEvaluation.
func (ahe ApplicationHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &ahe, true
}

// ApplicationHealthPolicy the policy of the application health
type ApplicationHealthPolicy struct {
	ConsiderWarningAsError                  *bool  `json:"ConsiderWarningAsError,omitempty"`
	MaxPercentUnhealthyDeployedApplications *int32 `json:"MaxPercentUnhealthyDeployedApplications,omitempty"`
	// DefaultServiceTypeHealthPolicy - The policy of the default service type health
	DefaultServiceTypeHealthPolicy *ApplicationHealthPolicyDefaultServiceTypeHealthPolicy `json:"DefaultServiceTypeHealthPolicy,omitempty"`
}

// ApplicationHealthPolicyDefaultServiceTypeHealthPolicy the policy of the default service type health
type ApplicationHealthPolicyDefaultServiceTypeHealthPolicy struct {
	MaxPercentUnhealthyServices             *int32 `json:"MaxPercentUnhealthyServices,omitempty"`
	MaxPercentUnhealthyPartitionsPerService *int32 `json:"MaxPercentUnhealthyPartitionsPerService,omitempty"`
	MaxPercentUnhealthyReplicasPerPartition *int32 `json:"MaxPercentUnhealthyReplicasPerPartition,omitempty"`
}

// ApplicationHealthPolicyMap the application health policy of the cluster
type ApplicationHealthPolicyMap struct {
	// ConsiderWarningAsError - The boolean of the consider warning as error
	ConsiderWarningAsError *bool `json:"ConsiderWarningAsError,omitempty"`
	// MaxPercentUnhealthyDeployedApplications - The max percent of the unhealthy deployed applications
	MaxPercentUnhealthyDeployedApplications *int32 `json:"MaxPercentUnhealthyDeployedApplications,omitempty"`
	// DefaultServiceTypeHealthPolicy - The policy of the default service type health
	DefaultServiceTypeHealthPolicy *int32 `json:"DefaultServiceTypeHealthPolicy,omitempty"`
	// MaxPercentUnhealthyServices - The policy of the default service type health
	MaxPercentUnhealthyServices *int32 `json:"MaxPercentUnhealthyServices,omitempty"`
	// MaxPercentUnhealthyPartitionsPerService - The max percent unhealthy partitions per service
	MaxPercentUnhealthyPartitionsPerService *int32 `json:"MaxPercentUnhealthyPartitionsPerService,omitempty"`
	// MaxPercentUnhealthyReplicasPerPartition - The max percent unhealthy replicas per partition
	MaxPercentUnhealthyReplicasPerPartition *int32 `json:"MaxPercentUnhealthyReplicasPerPartition,omitempty"`
}

// ApplicationHealthReport the report of the application health
type ApplicationHealthReport struct {
	SourceID *string `json:"SourceId,omitempty"`
	Property *string `json:"Property,omitempty"`
	// HealthState - Possible values include: 'HealthState1Invalid', 'HealthState1Ok', 'HealthState1Warning', 'HealthState1Error', 'HealthState1Unknown'
	HealthState              HealthState1 `json:"HealthState,omitempty"`
	Description              *string      `json:"Description,omitempty"`
	TimeToLiveInMilliSeconds *string      `json:"TimeToLiveInMilliSeconds,omitempty"`
	SequenceNumber           *string      `json:"SequenceNumber,omitempty"`
	RemoveWhenExpired        *bool        `json:"RemoveWhenExpired,omitempty"`
}

// ApplicationHealthServiceHealthStatesItem the states of the service health
type ApplicationHealthServiceHealthStatesItem struct {
	ServiceName *string `json:"ServiceName,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState5Invalid', 'AggregatedHealthState5Ok', 'AggregatedHealthState5Warning', 'AggregatedHealthState5Error', 'AggregatedHealthState5Unknown'
	AggregatedHealthState AggregatedHealthState5 `json:"AggregatedHealthState,omitempty"`
}

// ApplicationList the list of the application
type ApplicationList struct {
	autorest.Response `json:"-"`
	ContinuationToken *string        `json:"ContinuationToken,omitempty"`
	Items             *[]Application `json:"Items,omitempty"`
}

// ApplicationManifest the manifest of the application
type ApplicationManifest struct {
	autorest.Response `json:"-"`
	Manifest          *string `json:"Manifest,omitempty"`
}

// ApplicationParametersItem the parameters
type ApplicationParametersItem struct {
	Key   *string `json:"Key,omitempty"`
	Value *string `json:"Value,omitempty"`
}

// ApplicationsHealthEvaluation the evaluation of the applications health
type ApplicationsHealthEvaluation struct {
	UnhealthyEvaluations            *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	TotalCount                      *int32                 `json:"TotalCount,omitempty"`
	MaxPercentUnhealthyApplications *int32                 `json:"MaxPercentUnhealthyApplications,omitempty"`
	Description                     *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) MarshalJSON() ([]byte, error) {
	ahe.Kind = KindApplications
	objectMap := make(map[string]interface{})
	if ahe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = ahe.UnhealthyEvaluations
	}
	if ahe.TotalCount != nil {
		objectMap["TotalCount"] = ahe.TotalCount
	}
	if ahe.MaxPercentUnhealthyApplications != nil {
		objectMap["MaxPercentUnhealthyApplications"] = ahe.MaxPercentUnhealthyApplications
	}
	if ahe.Description != nil {
		objectMap["Description"] = ahe.Description
	}
	if ahe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = ahe.AggregatedHealthState
	}
	if ahe.Kind != "" {
		objectMap["Kind"] = ahe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return &ahe, true
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationsHealthEvaluation.
func (ahe ApplicationsHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &ahe, true
}

// ApplicationType the type of the application
type ApplicationType struct {
	Name                 *string                                    `json:"Name,omitempty"`
	Version              *string                                    `json:"Version,omitempty"`
	DefaultParameterList *[]ApplicationTypeDefaultParameterListItem `json:"DefaultParameterList,omitempty"`
}

// ApplicationTypeDefaultParameterListItem the list of the default parameter
type ApplicationTypeDefaultParameterListItem struct {
	Key   *string `json:"Key,omitempty"`
	Value *string `json:"Value,omitempty"`
}

// ApplicationTypeHealthEvaluation the evaluation of the application type health
type ApplicationTypeHealthEvaluation struct {
	ApplicationTypeName             *string                `json:"ApplicationTypeName,omitempty"`
	UnhealthyEvaluations            *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	TotalCount                      *int32                 `json:"TotalCount,omitempty"`
	MaxPercentUnhealthyApplications *int32                 `json:"MaxPercentUnhealthyApplications,omitempty"`
	Description                     *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) MarshalJSON() ([]byte, error) {
	athe.Kind = KindApplicationType
	objectMap := make(map[string]interface{})
	if athe.ApplicationTypeName != nil {
		objectMap["ApplicationTypeName"] = athe.ApplicationTypeName
	}
	if athe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = athe.UnhealthyEvaluations
	}
	if athe.TotalCount != nil {
		objectMap["TotalCount"] = athe.TotalCount
	}
	if athe.MaxPercentUnhealthyApplications != nil {
		objectMap["MaxPercentUnhealthyApplications"] = athe.MaxPercentUnhealthyApplications
	}
	if athe.Description != nil {
		objectMap["Description"] = athe.Description
	}
	if athe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = athe.AggregatedHealthState
	}
	if athe.Kind != "" {
		objectMap["Kind"] = athe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return &athe, true
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for ApplicationTypeHealthEvaluation.
func (athe ApplicationTypeHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &athe, true
}

// ApplicationUpgrade the upgrade of the application
type ApplicationUpgrade struct {
	autorest.Response            `json:"-"`
	Name                         *string `json:"Name,omitempty"`
	TypeName                     *string `json:"TypeName,omitempty"`
	TargetApplicationTypeVersion *string `json:"TargetApplicationTypeVersion,omitempty"`
	UpgradeDomains               *string `json:"UpgradeDomains,omitempty"`
	// UpgradeState - Possible values include: 'UpgradeStateInvalid', 'UpgradeStateRollingBackInProgress', 'UpgradeStateRollingBackCompleted', 'UpgradeStateRollingForwardPending', 'UpgradeStateRollingForwardInProgress', 'UpgradeStateRollingForwardCompleted'
	UpgradeState      UpgradeState `json:"UpgradeState,omitempty"`
	NextUpgradeDomain *string      `json:"NextUpgradeDomain,omitempty"`
	// RollingUpgradeMode - Possible values include: 'RollingUpgradeMode1Invalid', 'RollingUpgradeMode1UnmonitoredAuto', 'RollingUpgradeMode1UnmonitoredManual', 'RollingUpgradeMode1Monitored'
	RollingUpgradeMode                  RollingUpgradeMode1 `json:"RollingUpgradeMode,omitempty"`
	UpgradeDurationInMilliseconds       *string             `json:"UpgradeDurationInMilliseconds,omitempty"`
	UpgradeDomainDurationInMilliseconds *string             `json:"UpgradeDomainDurationInMilliseconds,omitempty"`
	UnhealthyEvaluations                *string             `json:"UnhealthyEvaluations,omitempty"`
	// CurrentUpgradeDomainProgress - The progress of the current upgrade domain
	CurrentUpgradeDomainProgress *ApplicationUpgradeCurrentUpgradeDomainProgress `json:"CurrentUpgradeDomainProgress,omitempty"`
	StartTimestampUtc            *string                                         `json:"StartTimestampUtc,omitempty"`
	FailureTimestampUtc          *string                                         `json:"FailureTimestampUtc,omitempty"`
	// FailureReason - Possible values include: 'FailureReasonInvalid', 'FailureReasonInterrupted', 'FailureReasonHealthCheck', 'FailureReasonUpgradeDomainTimeout', 'FailureReasonOverallUpgradeTimeout'
	FailureReason FailureReason `json:"FailureReason,omitempty"`
	// DeployedApplicationHealthStates - The states of the deployed application health
	DeployedApplicationHealthStates *ApplicationUpgradeDeployedApplicationHealthStates `json:"DeployedApplicationHealthStates,omitempty"`
}

// ApplicationUpgradeCurrentUpgradeDomainProgress the progress of the current upgrade domain
type ApplicationUpgradeCurrentUpgradeDomainProgress struct {
	DomainName              *string `json:"DomainName,omitempty"`
	NodeUpgradeProgressList *string `json:"NodeUpgradeProgressList,omitempty"`
}

// ApplicationUpgradeDeployedApplicationHealthStates the states of the deployed application health
type ApplicationUpgradeDeployedApplicationHealthStates struct {
	DomainName              *string `json:"DomainName,omitempty"`
	NodeUpgradeProgressList *string `json:"NodeUpgradeProgressList,omitempty"`
}

// ClusterHealth the health of the cluster
type ClusterHealth struct {
	autorest.Response `json:"-"`
	HealthEvents      *[]HealthEvent `json:"HealthEvents,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState15Invalid', 'AggregatedHealthState15Ok', 'AggregatedHealthState15Warning', 'AggregatedHealthState15Error', 'AggregatedHealthState15Unknown'
	AggregatedHealthState  AggregatedHealthState15                    `json:"AggregatedHealthState,omitempty"`
	UnhealthyEvaluations   *[]UnhealthyEvaluation                     `json:"UnhealthyEvaluations,omitempty"`
	NodeHealthStates       *[]ClusterHealthNodeHealthStatesItem       `json:"NodeHealthStates,omitempty"`
	ApplicationHealthState *[]ClusterHealthApplicationHealthStateItem `json:"ApplicationHealthState,omitempty"`
}

// ClusterHealthApplicationHealthStateItem the state of the application health
type ClusterHealthApplicationHealthStateItem struct {
	Name *string `json:"Name,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState14Invalid', 'AggregatedHealthState14Ok', 'AggregatedHealthState14Warning', 'AggregatedHealthState14Error', 'AggregatedHealthState14Unknown'
	AggregatedHealthState AggregatedHealthState14 `json:"AggregatedHealthState,omitempty"`
}

// ClusterHealthNodeHealthStatesItem the states of tehe node health
type ClusterHealthNodeHealthStatesItem struct {
	Name *string `json:"Name,omitempty"`
	// ID - The id
	ID *ClusterHealthNodeHealthStatesItemID `json:"Id,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState13Invalid', 'AggregatedHealthState13Ok', 'AggregatedHealthState13Warning', 'AggregatedHealthState13Error', 'AggregatedHealthState13Unknown'
	AggregatedHealthState AggregatedHealthState13 `json:"AggregatedHealthState,omitempty"`
}

// ClusterHealthNodeHealthStatesItemID the id
type ClusterHealthNodeHealthStatesItemID struct {
	ID *string `json:"Id,omitempty"`
}

// ClusterHealthPolicy the policy of the cluster health
type ClusterHealthPolicy struct {
	// RollingUpgradeMode - The mode of the rolling upgrade. Possible values include: 'RollingUpgradeMode4Invalid', 'RollingUpgradeMode4UnmonitoredAuto', 'RollingUpgradeMode4UnmonitoredManual', 'RollingUpgradeMode4Monitored'
	RollingUpgradeMode RollingUpgradeMode4 `json:"RollingUpgradeMode,omitempty"`
	// ForceRestart - The flag of the force restart
	ForceRestart *bool `json:"ForceRestart,omitempty"`
	// FailureAction - The action of the failure
	FailureAction *string `json:"FailureAction,omitempty"`
	// UpgradeReplicaSetCheckTimeoutInSeconds - The seconds of the upgrade replica set check timeout
	UpgradeReplicaSetCheckTimeoutInSeconds *int32 `json:"UpgradeReplicaSetCheckTimeoutInSeconds,omitempty"`
	// HealthCheckWaitDurationInMilliseconds - The milliseconds of the health check wait duration
	HealthCheckWaitDurationInMilliseconds *string `json:"HealthCheckWaitDurationInMilliseconds,omitempty"`
	// HealthCheckStableDurationInMilliseconds - The milliseconds of the health check stable duration
	HealthCheckStableDurationInMilliseconds *string `json:"HealthCheckStableDurationInMilliseconds,omitempty"`
	// HealthCheckRetryTimeoutInMilliseconds - The milliseconds of the health check retry timeout
	HealthCheckRetryTimeoutInMilliseconds *string `json:"HealthCheckRetryTimeoutInMilliseconds,omitempty"`
	// UpgradeTimeoutInMilliseconds - The milliseconds of the upgrade timeout
	UpgradeTimeoutInMilliseconds *string `json:"UpgradeTimeoutInMilliseconds,omitempty"`
	// UpgradeDomainTimeoutInMilliseconds - The milliseconds of the upgrade domain timeout
	UpgradeDomainTimeoutInMilliseconds *string `json:"UpgradeDomainTimeoutInMilliseconds,omitempty"`
}

// ClusterHealthReport the report of the cluster health
type ClusterHealthReport struct {
	SourceID *string `json:"SourceId,omitempty"`
	Property *string `json:"Property,omitempty"`
	// HealthState - Possible values include: 'HealthState1Invalid', 'HealthState1Ok', 'HealthState1Warning', 'HealthState1Error', 'HealthState1Unknown'
	HealthState              HealthState1 `json:"HealthState,omitempty"`
	Description              *string      `json:"Description,omitempty"`
	TimeToLiveInMilliSeconds *string      `json:"TimeToLiveInMilliSeconds,omitempty"`
	SequenceNumber           *string      `json:"SequenceNumber,omitempty"`
	RemoveWhenExpired        *bool        `json:"RemoveWhenExpired,omitempty"`
}

// ClusterLoadInformation the information of the cluster load
type ClusterLoadInformation struct {
	autorest.Response         `json:"-"`
	LastBalancingStartTimeUtc *string                  `json:"LastBalancingStartTimeUtc,omitempty"`
	LastBalancingEndTimeUtc   *string                  `json:"LastBalancingEndTimeUtc,omitempty"`
	LoadMetricInformation     *[]LoadMetricInformation `json:"LoadMetricInformation,omitempty"`
}

// ClusterUpgradeHealthPolicy the upgrade health policy of the cluster
type ClusterUpgradeHealthPolicy struct {
	// MaxPercentDeltaUnhealthyNodes - The max percent of the delta unhealthy nodes, values are [0-100]
	MaxPercentDeltaUnhealthyNodes *int32 `json:"MaxPercentDeltaUnhealthyNodes,omitempty"`
	// MaxPercentUpgradeDomainDeltaUnhealthyNodes - The max percent of the upgrade domain delta unhealthy nodes, values are [0-100]
	MaxPercentUpgradeDomainDeltaUnhealthyNodes *int32 `json:"MaxPercentUpgradeDomainDeltaUnhealthyNodes,omitempty"`
}

// ClusterUpgradeProgress the progress of the cluster upgrade
type ClusterUpgradeProgress struct {
	autorest.Response `json:"-"`
	CodeVersion       *string   `json:"CodeVersion,omitempty"`
	ConfigVersion     *string   `json:"ConfigVersion,omitempty"`
	UpgradeDomains    *[]string `json:"UpgradeDomains,omitempty"`
	// UpgradeState - Possible values include: 'UpgradeState1Invalid', 'UpgradeState1RollingBackInProgress', 'UpgradeState1RollingBackCompleted', 'UpgradeState1RollingForwardPending', 'UpgradeState1RollingForwardInProgress', 'UpgradeState1RollingForwardCompleted'
	UpgradeState      UpgradeState1 `json:"UpgradeState,omitempty"`
	NextUpgradeDomain *string       `json:"NextUpgradeDomain,omitempty"`
	// RollingUpgradeMode - Possible values include: 'RollingUpgradeMode5Invalid', 'RollingUpgradeMode5UnmonitoredAuto', 'RollingUpgradeMode5UnmonitoredManual', 'RollingUpgradeMode5Monitored'
	RollingUpgradeMode                  RollingUpgradeMode5    `json:"RollingUpgradeMode,omitempty"`
	UpgradeDurationInMilliseconds       *string                `json:"UpgradeDurationInMilliseconds,omitempty"`
	UpgradeDomainDurationInMilliseconds *string                `json:"UpgradeDomainDurationInMilliseconds,omitempty"`
	UnhealthyEvaluations                *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	// CurrentUpgradeDomainProgress - The progress of the current upgrade domain
	CurrentUpgradeDomainProgress *ClusterUpgradeProgressCurrentUpgradeDomainProgress `json:"CurrentUpgradeDomainProgress,omitempty"`
	StartTimestampUtc            *string                                             `json:"StartTimestampUtc,omitempty"`
	FailureTimestampUtc          *string                                             `json:"FailureTimestampUtc,omitempty"`
	// FailureReason - Possible values include: 'FailureReason1Invalid', 'FailureReason1Interrupted', 'FailureReason1HealthCheck', 'FailureReason1UpgradeDomainTimeout', 'FailureReason1OverallUpgradeTimeout'
	FailureReason FailureReason1 `json:"FailureReason,omitempty"`
	// UpgradeDomainProgressAtFailure - The failure of the upgrade domain progress at
	UpgradeDomainProgressAtFailure *ClusterUpgradeProgressUpgradeDomainProgressAtFailure `json:"UpgradeDomainProgressAtFailure,omitempty"`
}

// ClusterUpgradeProgressCurrentUpgradeDomainProgress the progress of the current upgrade domain
type ClusterUpgradeProgressCurrentUpgradeDomainProgress struct {
	DomainName              *string `json:"DomainName,omitempty"`
	NodeUpgradeProgressList *string `json:"NodeUpgradeProgressList,omitempty"`
}

// ClusterUpgradeProgressUpgradeDomainProgressAtFailure the failure of the upgrade domain progress at
type ClusterUpgradeProgressUpgradeDomainProgressAtFailure struct {
	DomainName              *string `json:"DomainName,omitempty"`
	NodeUpgradeProgressList *string `json:"NodeUpgradeProgressList,omitempty"`
}

// CodePackageEntryPointStatistics the statistics of the code package entry point
type CodePackageEntryPointStatistics struct {
	LastExitCode                     *int32  `json:"LastExitCode,omitempty"`
	LastActivationTime               *string `json:"LastActivationTime,omitempty"`
	LastExitTime                     *string `json:"LastExitTime,omitempty"`
	LastSuccessfulActivationTime     *string `json:"LastSuccessfulActivationTime,omitempty"`
	LastSuccessfulExitTime           *string `json:"LastSuccessfulExitTime,omitempty"`
	ActivationFailureCount           *int32  `json:"ActivationFailureCount,omitempty"`
	ContinuousActivationFailureCount *int32  `json:"ContinuousActivationFailureCount,omitempty"`
	ExitFailureCount                 *int32  `json:"ExitFailureCount,omitempty"`
	ContinuousExitFailureCount       *int32  `json:"ContinuousExitFailureCount,omitempty"`
	ActivationCount                  *int32  `json:"ActivationCount,omitempty"`
	ExitCount                        *int32  `json:"ExitCount,omitempty"`
}

// BasicCreateServiceDescription the description of the create service
type BasicCreateServiceDescription interface {
	AsStatelessCreateServiceDescription() (*StatelessCreateServiceDescription, bool)
	AsStatefulCreateServiceDescription() (*StatefulCreateServiceDescription, bool)
	AsCreateServiceDescription() (*CreateServiceDescription, bool)
}

// CreateServiceDescription the description of the create service
type CreateServiceDescription struct {
	ApplicationName          *string                        `json:"ApplicationName,omitempty"`
	ServiceName              *string                        `json:"ServiceName,omitempty"`
	ServiceTypeName          *string                        `json:"ServiceTypeName,omitempty"`
	PartitionDescription     *PartitionDescription          `json:"PartitionDescription,omitempty"`
	PlacementConstraints     *string                        `json:"PlacementConstraints,omitempty"`
	CorrelationScheme        *ServiceCorrelationDescription `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics       *ServiceCorrelationDescription `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies *ServiceCorrelationDescription `json:"ServicePlacementPolicies,omitempty"`
	Flags                    *int32                         `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindCreateServiceDescription', 'ServiceKindStateless1', 'ServiceKindStateful1'
	ServiceKind ServiceKindBasicCreateServiceDescription `json:"ServiceKind,omitempty"`
}

func unmarshalBasicCreateServiceDescription(body []byte) (BasicCreateServiceDescription, error) {
	var m map[string]interface{}
	err := json.Unmarshal(body, &m)
	if err != nil {
		return nil, err
	}

	switch m["ServiceKind"] {
	case string(ServiceKindStateless1):
		var scsd StatelessCreateServiceDescription
		err := json.Unmarshal(body, &scsd)
		return scsd, err
	case string(ServiceKindStateful1):
		var scsd StatefulCreateServiceDescription
		err := json.Unmarshal(body, &scsd)
		return scsd, err
	default:
		var csd CreateServiceDescription
		err := json.Unmarshal(body, &csd)
		return csd, err
	}
}
func unmarshalBasicCreateServiceDescriptionArray(body []byte) ([]BasicCreateServiceDescription, error) {
	var rawMessages []*json.RawMessage
	err := json.Unmarshal(body, &rawMessages)
	if err != nil {
		return nil, err
	}

	csdArray := make([]BasicCreateServiceDescription, len(rawMessages))

	for index, rawMessage := range rawMessages {
		csd, err := unmarshalBasicCreateServiceDescription(*rawMessage)
		if err != nil {
			return nil, err
		}
		csdArray[index] = csd
	}
	return csdArray, nil
}

// MarshalJSON is the custom marshaler for CreateServiceDescription.
func (csd CreateServiceDescription) MarshalJSON() ([]byte, error) {
	csd.ServiceKind = ServiceKindCreateServiceDescription
	objectMap := make(map[string]interface{})
	if csd.ApplicationName != nil {
		objectMap["ApplicationName"] = csd.ApplicationName
	}
	if csd.ServiceName != nil {
		objectMap["ServiceName"] = csd.ServiceName
	}
	if csd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = csd.ServiceTypeName
	}
	if csd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = csd.PartitionDescription
	}
	if csd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = csd.PlacementConstraints
	}
	if csd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = csd.CorrelationScheme
	}
	if csd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = csd.ServiceLoadMetrics
	}
	if csd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = csd.ServicePlacementPolicies
	}
	if csd.Flags != nil {
		objectMap["Flags"] = csd.Flags
	}
	if csd.ServiceKind != "" {
		objectMap["ServiceKind"] = csd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessCreateServiceDescription is the BasicCreateServiceDescription implementation for CreateServiceDescription.
func (csd CreateServiceDescription) AsStatelessCreateServiceDescription() (*StatelessCreateServiceDescription, bool) {
	return nil, false
}

// AsStatefulCreateServiceDescription is the BasicCreateServiceDescription implementation for CreateServiceDescription.
func (csd CreateServiceDescription) AsStatefulCreateServiceDescription() (*StatefulCreateServiceDescription, bool) {
	return nil, false
}

// AsCreateServiceDescription is the BasicCreateServiceDescription implementation for CreateServiceDescription.
func (csd CreateServiceDescription) AsCreateServiceDescription() (*CreateServiceDescription, bool) {
	return &csd, true
}

// AsBasicCreateServiceDescription is the BasicCreateServiceDescription implementation for CreateServiceDescription.
func (csd CreateServiceDescription) AsBasicCreateServiceDescription() (BasicCreateServiceDescription, bool) {
	return &csd, true
}

// BasicCreateServiceGroupDescription the description of the create service group
type BasicCreateServiceGroupDescription interface {
	AsStatelessCreateServiceGroupDescription() (*StatelessCreateServiceGroupDescription, bool)
	AsStatefulCreateServiceGroupDescription() (*StatefulCreateServiceGroupDescription, bool)
	AsCreateServiceGroupDescription() (*CreateServiceGroupDescription, bool)
}

// CreateServiceGroupDescription the description of the create service group
type CreateServiceGroupDescription struct {
	ApplicationName               *string                          `json:"ApplicationName,omitempty"`
	ServiceName                   *string                          `json:"ServiceName,omitempty"`
	ServiceTypeName               *string                          `json:"ServiceTypeName,omitempty"`
	PartitionDescription          *PartitionDescription            `json:"PartitionDescription,omitempty"`
	PlacementConstraints          *string                          `json:"PlacementConstraints,omitempty"`
	CorrelationScheme             *ServiceCorrelationDescription   `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics            *ServiceCorrelationDescription   `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies      *ServiceCorrelationDescription   `json:"ServicePlacementPolicies,omitempty"`
	Flags                         *int32                           `json:"Flags,omitempty"`
	ServiceGroupMemberDescription *[]ServiceGroupMemberDescription `json:"ServiceGroupMemberDescription,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicCreateServiceGroupDescriptionServiceKindCreateServiceGroupDescription', 'ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateless', 'ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicCreateServiceGroupDescription `json:"ServiceKind,omitempty"`
}

func unmarshalBasicCreateServiceGroupDescription(body []byte) (BasicCreateServiceGroupDescription, error) {
	var m map[string]interface{}
	err := json.Unmarshal(body, &m)
	if err != nil {
		return nil, err
	}

	switch m["ServiceKind"] {
	case string(ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateless):
		var scsgd StatelessCreateServiceGroupDescription
		err := json.Unmarshal(body, &scsgd)
		return scsgd, err
	case string(ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateful):
		var scsgd StatefulCreateServiceGroupDescription
		err := json.Unmarshal(body, &scsgd)
		return scsgd, err
	default:
		var csgd CreateServiceGroupDescription
		err := json.Unmarshal(body, &csgd)
		return csgd, err
	}
}
func unmarshalBasicCreateServiceGroupDescriptionArray(body []byte) ([]BasicCreateServiceGroupDescription, error) {
	var rawMessages []*json.RawMessage
	err := json.Unmarshal(body, &rawMessages)
	if err != nil {
		return nil, err
	}

	csgdArray := make([]BasicCreateServiceGroupDescription, len(rawMessages))

	for index, rawMessage := range rawMessages {
		csgd, err := unmarshalBasicCreateServiceGroupDescription(*rawMessage)
		if err != nil {
			return nil, err
		}
		csgdArray[index] = csgd
	}
	return csgdArray, nil
}

// MarshalJSON is the custom marshaler for CreateServiceGroupDescription.
func (csgd CreateServiceGroupDescription) MarshalJSON() ([]byte, error) {
	csgd.ServiceKind = ServiceKindBasicCreateServiceGroupDescriptionServiceKindCreateServiceGroupDescription
	objectMap := make(map[string]interface{})
	if csgd.ApplicationName != nil {
		objectMap["ApplicationName"] = csgd.ApplicationName
	}
	if csgd.ServiceName != nil {
		objectMap["ServiceName"] = csgd.ServiceName
	}
	if csgd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = csgd.ServiceTypeName
	}
	if csgd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = csgd.PartitionDescription
	}
	if csgd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = csgd.PlacementConstraints
	}
	if csgd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = csgd.CorrelationScheme
	}
	if csgd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = csgd.ServiceLoadMetrics
	}
	if csgd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = csgd.ServicePlacementPolicies
	}
	if csgd.Flags != nil {
		objectMap["Flags"] = csgd.Flags
	}
	if csgd.ServiceGroupMemberDescription != nil {
		objectMap["ServiceGroupMemberDescription"] = csgd.ServiceGroupMemberDescription
	}
	if csgd.ServiceKind != "" {
		objectMap["ServiceKind"] = csgd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for CreateServiceGroupDescription.
func (csgd CreateServiceGroupDescription) AsStatelessCreateServiceGroupDescription() (*StatelessCreateServiceGroupDescription, bool) {
	return nil, false
}

// AsStatefulCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for CreateServiceGroupDescription.
func (csgd CreateServiceGroupDescription) AsStatefulCreateServiceGroupDescription() (*StatefulCreateServiceGroupDescription, bool) {
	return nil, false
}

// AsCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for CreateServiceGroupDescription.
func (csgd CreateServiceGroupDescription) AsCreateServiceGroupDescription() (*CreateServiceGroupDescription, bool) {
	return &csgd, true
}

// AsBasicCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for CreateServiceGroupDescription.
func (csgd CreateServiceGroupDescription) AsBasicCreateServiceGroupDescription() (BasicCreateServiceGroupDescription, bool) {
	return &csgd, true
}

// DeltaNodesCheckHealthEvaluation the evaluation of the delta nodes check health
type DeltaNodesCheckHealthEvaluation struct {
	UnhealthyEvaluations          *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	BaselineErrorCount            *int32                 `json:"BaselineErrorCount,omitempty"`
	BaselineTotalCount            *int32                 `json:"BaselineTotalCount,omitempty"`
	TotalCount                    *int32                 `json:"TotalCount,omitempty"`
	MaxPercentDeltaUnhealthyNodes *int32                 `json:"MaxPercentDeltaUnhealthyNodes,omitempty"`
	Description                   *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) MarshalJSON() ([]byte, error) {
	dnche.Kind = KindDeltaNodesCheck
	objectMap := make(map[string]interface{})
	if dnche.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = dnche.UnhealthyEvaluations
	}
	if dnche.BaselineErrorCount != nil {
		objectMap["BaselineErrorCount"] = dnche.BaselineErrorCount
	}
	if dnche.BaselineTotalCount != nil {
		objectMap["BaselineTotalCount"] = dnche.BaselineTotalCount
	}
	if dnche.TotalCount != nil {
		objectMap["TotalCount"] = dnche.TotalCount
	}
	if dnche.MaxPercentDeltaUnhealthyNodes != nil {
		objectMap["MaxPercentDeltaUnhealthyNodes"] = dnche.MaxPercentDeltaUnhealthyNodes
	}
	if dnche.Description != nil {
		objectMap["Description"] = dnche.Description
	}
	if dnche.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = dnche.AggregatedHealthState
	}
	if dnche.Kind != "" {
		objectMap["Kind"] = dnche.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return &dnche, true
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for DeltaNodesCheckHealthEvaluation.
func (dnche DeltaNodesCheckHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &dnche, true
}

// DeployedApplication the application of the deployed
type DeployedApplication struct {
	autorest.Response `json:"-"`
	ID                *string `json:"Id,omitempty"`
	Name              *string `json:"Name,omitempty"`
	TypeName          *string `json:"TypeName,omitempty"`
	Status            *string `json:"Status,omitempty"`
	WorkDirectory     *string `json:"WorkDirectory,omitempty"`
	LogDirectory      *string `json:"LogDirectory,omitempty"`
	TempDirectory     *string `json:"TempDirectory,omitempty"`
}

// DeployedApplicationHealth the health of the deployed application
type DeployedApplicationHealth struct {
	autorest.Response `json:"-"`
	HealthEvents      *[]HealthEvent `json:"HealthEvents,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState3Invalid', 'AggregatedHealthState3Ok', 'AggregatedHealthState3Warning', 'AggregatedHealthState3Error', 'AggregatedHealthState3Unknown'
	AggregatedHealthState              AggregatedHealthState3             `json:"AggregatedHealthState,omitempty"`
	UnhealthyEvaluations               *string                            `json:"UnhealthyEvaluations,omitempty"`
	Name                               *string                            `json:"Name,omitempty"`
	NodeName                           *string                            `json:"NodeName,omitempty"`
	DeployedServicePackageHealthStates *DeployedServicePackageHealthState `json:"DeployedServicePackageHealthStates,omitempty"`
}

// DeployedApplicationHealthEvaluation the evaluation of the deployed application health
type DeployedApplicationHealthEvaluation struct {
	ApplicationName      *string                `json:"ApplicationName,omitempty"`
	NodeName             *string                `json:"NodeName,omitempty"`
	UnhealthyEvaluations *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	Description          *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) MarshalJSON() ([]byte, error) {
	dahe.Kind = KindDeployedApplication
	objectMap := make(map[string]interface{})
	if dahe.ApplicationName != nil {
		objectMap["ApplicationName"] = dahe.ApplicationName
	}
	if dahe.NodeName != nil {
		objectMap["NodeName"] = dahe.NodeName
	}
	if dahe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = dahe.UnhealthyEvaluations
	}
	if dahe.Description != nil {
		objectMap["Description"] = dahe.Description
	}
	if dahe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = dahe.AggregatedHealthState
	}
	if dahe.Kind != "" {
		objectMap["Kind"] = dahe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return &dahe, true
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationHealthEvaluation.
func (dahe DeployedApplicationHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &dahe, true
}

// DeployedApplicationHealthReport the report of the deployed application health
type DeployedApplicationHealthReport struct {
	SourceID *string `json:"SourceId,omitempty"`
	Property *string `json:"Property,omitempty"`
	// HealthState - Possible values include: 'HealthState1Invalid', 'HealthState1Ok', 'HealthState1Warning', 'HealthState1Error', 'HealthState1Unknown'
	HealthState              HealthState1 `json:"HealthState,omitempty"`
	Description              *string      `json:"Description,omitempty"`
	TimeToLiveInMilliSeconds *string      `json:"TimeToLiveInMilliSeconds,omitempty"`
	SequenceNumber           *string      `json:"SequenceNumber,omitempty"`
	RemoveWhenExpired        *bool        `json:"RemoveWhenExpired,omitempty"`
}

// DeployedApplicationsHealthEvaluation the evaluation of the deployed applications health
type DeployedApplicationsHealthEvaluation struct {
	UnhealthyEvaluations                    *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	TotalCount                              *int32                 `json:"TotalCount,omitempty"`
	MaxPercentUnhealthyDeployedApplications *int32                 `json:"MaxPercentUnhealthyDeployedApplications,omitempty"`
	Description                             *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) MarshalJSON() ([]byte, error) {
	dahe.Kind = KindDeployedApplications
	objectMap := make(map[string]interface{})
	if dahe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = dahe.UnhealthyEvaluations
	}
	if dahe.TotalCount != nil {
		objectMap["TotalCount"] = dahe.TotalCount
	}
	if dahe.MaxPercentUnhealthyDeployedApplications != nil {
		objectMap["MaxPercentUnhealthyDeployedApplications"] = dahe.MaxPercentUnhealthyDeployedApplications
	}
	if dahe.Description != nil {
		objectMap["Description"] = dahe.Description
	}
	if dahe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = dahe.AggregatedHealthState
	}
	if dahe.Kind != "" {
		objectMap["Kind"] = dahe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return &dahe, true
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for DeployedApplicationsHealthEvaluation.
func (dahe DeployedApplicationsHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &dahe, true
}

// DeployedCodePackage the package of the deployed code
type DeployedCodePackage struct {
	Name                 *string     `json:"Name,omitempty"`
	Version              *string     `json:"Version,omitempty"`
	ServiceManifestName  *string     `json:"ServiceManifestName,omitempty"`
	Status               *string     `json:"Status,omitempty"`
	RunFrequencyInterval *string     `json:"RunFrequencyInterval,omitempty"`
	SetupEntryPoint      *EntryPoint `json:"SetupEntryPoint,omitempty"`
	MainEntryPoint       *EntryPoint `json:"MainEntryPoint,omitempty"`
	HasSetupEntryPoint   *bool       `json:"HasSetupEntryPoint,omitempty"`
}

// DeployedReplica the replica of the deployed
type DeployedReplica struct {
	// ServiceKind - Possible values include: 'ServiceKindInvalid', 'ServiceKindStateless', 'ServiceKindStateful'
	ServiceKind            ServiceKind `json:"ServiceKind,omitempty"`
	ServiceName            *string     `json:"ServiceName,omitempty"`
	ServiceTypeName        *string     `json:"ServiceTypeName,omitempty"`
	ServiceManifestVersion *string     `json:"ServiceManifestVersion,omitempty"`
	ServiceManifestName    *string     `json:"ServiceManifestName,omitempty"`
	CodePackageName        *string     `json:"CodePackageName,omitempty"`
	PartitionID            *string     `json:"PartitionId,omitempty"`
	InstanceID             *string     `json:"InstanceId,omitempty"`
	ReplicaID              *string     `json:"ReplicaId,omitempty"`
	// ReplicaRole - Possible values include: 'ReplicaRoleInvalid', 'ReplicaRoleNone', 'ReplicaRolePrimary', 'ReplicaRoleIdleSecondary', 'ReplicaRoleActiveSecondary'
	ReplicaRole ReplicaRole `json:"ReplicaRole,omitempty"`
	// ReplicaStatus - Possible values include: 'ReplicaStatusInvalid', 'ReplicaStatusInBuild', 'ReplicaStatusStandby', 'ReplicaStatusReady', 'ReplicaStatusDown', 'ReplicaStatusDropped'
	ReplicaStatus ReplicaStatus `json:"ReplicaStatus,omitempty"`
	Address       *string       `json:"Address,omitempty"`
}

// DeployedReplicaDetail the detail of the deployed replica
type DeployedReplicaDetail struct {
	autorest.Response `json:"-"`
	// ServiceKind - Possible values include: 'ServiceKind1Invalid', 'ServiceKind1Stateless', 'ServiceKind1Stateful'
	ServiceKind                         ServiceKind1 `json:"ServiceKind,omitempty"`
	ServiceName                         *string      `json:"ServiceName,omitempty"`
	PartitionID                         *string      `json:"PartitionId,omitempty"`
	CurrentServiceOperation             *int32       `json:"CurrentServiceOperation,omitempty"`
	CurrentReplicatorOperation          *int32       `json:"CurrentReplicatorOperation,omitempty"`
	CurrentServiceOperationStartTimeUtc *string      `json:"CurrentServiceOperationStartTimeUtc,omitempty"`
	InstanceID                          *string      `json:"InstanceId,omitempty"`
	ReplicaID                           *string      `json:"ReplicaId,omitempty"`
	ReadStatus                          *int32       `json:"ReadStatus,omitempty"`
	WriteStatus                         *int32       `json:"WriteStatus,omitempty"`
	// ReplicatorStatus - The status of the replicator
	ReplicatorStatus *DeployedReplicaDetailReplicatorStatus `json:"ReplicatorStatus,omitempty"`
}

// DeployedReplicaDetailReplicatorStatus the status of the replicator
type DeployedReplicaDetailReplicatorStatus struct {
	Kind *int32 `json:"Kind,omitempty"`
	// ReplicationQueueStatus - The status of the replication queue
	ReplicationQueueStatus *DeployedReplicaDetailReplicatorStatusReplicationQueueStatus `json:"ReplicationQueueStatus,omitempty"`
}

// DeployedReplicaDetailReplicatorStatusReplicationQueueStatus the status of the replication queue
type DeployedReplicaDetailReplicatorStatusReplicationQueueStatus struct {
	QueueUtilizationPercentage *string `json:"QueueUtilizationPercentage,omitempty"`
	QueueMemorySize            *string `json:"QueueMemorySize,omitempty"`
	FirstSequenceNumber        *string `json:"FirstSequenceNumber,omitempty"`
	CompletedSequenceNumber    *string `json:"CompletedSequenceNumber,omitempty"`
	CommittedSequenceNumber    *string `json:"CommittedSequenceNumber,omitempty"`
	LastSequenceNumber         *string `json:"LastSequenceNumber,omitempty"`
}

// DeployedServiceHealthReport the report of the deployed service package health
type DeployedServiceHealthReport struct {
	SourceID *string `json:"SourceId,omitempty"`
	Property *string `json:"Property,omitempty"`
	// HealthState - Possible values include: 'HealthState1Invalid', 'HealthState1Ok', 'HealthState1Warning', 'HealthState1Error', 'HealthState1Unknown'
	HealthState              HealthState1 `json:"HealthState,omitempty"`
	Description              *string      `json:"Description,omitempty"`
	TimeToLiveInMilliSeconds *string      `json:"TimeToLiveInMilliSeconds,omitempty"`
	SequenceNumber           *string      `json:"SequenceNumber,omitempty"`
	RemoveWhenExpired        *bool        `json:"RemoveWhenExpired,omitempty"`
}

// DeployedServicePackage the package of the deployed service
type DeployedServicePackage struct {
	Name    *string `json:"Name,omitempty"`
	Version *string `json:"Version,omitempty"`
	Status  *string `json:"Status,omitempty"`
}

// DeployedServicePackageHealth the health of the deployed service package
type DeployedServicePackageHealth struct {
	autorest.Response   `json:"-"`
	ApplicationName     *string        `json:"ApplicationName,omitempty"`
	ServiceManifestName *string        `json:"ServiceManifestName,omitempty"`
	NodeName            *string        `json:"NodeName,omitempty"`
	HealthEvents        *[]HealthEvent `json:"HealthEvents,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState4Invalid', 'AggregatedHealthState4Ok', 'AggregatedHealthState4Warning', 'AggregatedHealthState4Error', 'AggregatedHealthState4Unknown'
	AggregatedHealthState AggregatedHealthState4 `json:"AggregatedHealthState,omitempty"`
}

// DeployedServicePackageHealthEvaluation the evaluation of the deployed service package health
type DeployedServicePackageHealthEvaluation struct {
	ApplicationName      *string                `json:"ApplicationName,omitempty"`
	NodeName             *string                `json:"NodeName,omitempty"`
	ServiceManifestName  *string                `json:"ServiceManifestName,omitempty"`
	UnhealthyEvaluations *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	Description          *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) MarshalJSON() ([]byte, error) {
	dsphe.Kind = KindDeployedServicePackage
	objectMap := make(map[string]interface{})
	if dsphe.ApplicationName != nil {
		objectMap["ApplicationName"] = dsphe.ApplicationName
	}
	if dsphe.NodeName != nil {
		objectMap["NodeName"] = dsphe.NodeName
	}
	if dsphe.ServiceManifestName != nil {
		objectMap["ServiceManifestName"] = dsphe.ServiceManifestName
	}
	if dsphe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = dsphe.UnhealthyEvaluations
	}
	if dsphe.Description != nil {
		objectMap["Description"] = dsphe.Description
	}
	if dsphe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = dsphe.AggregatedHealthState
	}
	if dsphe.Kind != "" {
		objectMap["Kind"] = dsphe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return &dsphe, true
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackageHealthEvaluation.
func (dsphe DeployedServicePackageHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &dsphe, true
}

// DeployedServicePackageHealthState the state of the deployed service package health
type DeployedServicePackageHealthState struct {
	ApplicationName     *string `json:"ApplicationName,omitempty"`
	ServiceManifestName *string `json:"ServiceManifestName,omitempty"`
	NodeName            *string `json:"NodeName,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState2Invalid', 'AggregatedHealthState2Ok', 'AggregatedHealthState2Warning', 'AggregatedHealthState2Error', 'AggregatedHealthState2Unknown'
	AggregatedHealthState AggregatedHealthState2 `json:"AggregatedHealthState,omitempty"`
}

// DeployedServicePackagesHealthEvaluation the evaluation of the deployed service packages health
type DeployedServicePackagesHealthEvaluation struct {
	UnhealthyEvaluations *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	TotalCount           *int32                 `json:"TotalCount,omitempty"`
	Description          *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) MarshalJSON() ([]byte, error) {
	dsphe.Kind = KindDeployedServicePackages
	objectMap := make(map[string]interface{})
	if dsphe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = dsphe.UnhealthyEvaluations
	}
	if dsphe.TotalCount != nil {
		objectMap["TotalCount"] = dsphe.TotalCount
	}
	if dsphe.Description != nil {
		objectMap["Description"] = dsphe.Description
	}
	if dsphe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = dsphe.AggregatedHealthState
	}
	if dsphe.Kind != "" {
		objectMap["Kind"] = dsphe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return &dsphe, true
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for DeployedServicePackagesHealthEvaluation.
func (dsphe DeployedServicePackagesHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &dsphe, true
}

// DeployedServiceType the type of the deploye service
type DeployedServiceType struct {
	ServiceTypeName     *string `json:"ServiceTypeName,omitempty"`
	CodePackageName     *string `json:"CodePackageName,omitempty"`
	ServiceManifestName *string `json:"ServiceManifestName,omitempty"`
	Status              *string `json:"Status,omitempty"`
}

// DisableNode the node
type DisableNode struct {
	// DeactivationIntent - Possible values include: 'Pause', 'Restart', 'RemoveData', 'RemoveNode'
	DeactivationIntent DeactivationIntent `json:"DeactivationIntent,omitempty"`
}

// EntryPoint the point of the entry
type EntryPoint struct {
	EntryPointLocation              *int32                           `json:"EntryPointLocation,omitempty"`
	ProcessID                       *int32                           `json:"ProcessId,omitempty"`
	RunAsUserName                   *int32                           `json:"RunAsUserName,omitempty"`
	NextActivationTime              *int32                           `json:"NextActivationTime,omitempty"`
	Status                          *string                          `json:"Status,omitempty"`
	CodePackageEntryPointStatistics *CodePackageEntryPointStatistics `json:"CodePackageEntryPointStatistics,omitempty"`
}

// ErrorModel the model of the error
type ErrorModel struct {
	// Error - The error
	Error *ErrorModelError `json:"Error,omitempty"`
}

// ErrorModelError the error
type ErrorModelError struct {
	Code    *string `json:"Code,omitempty"`
	Message *string `json:"Message,omitempty"`
}

// EventHealthEvaluation the evaluation of the event health
type EventHealthEvaluation struct {
	UnhealthyEvent         *HealthEvent `json:"UnhealthyEvent,omitempty"`
	ConsiderWarningAsError *bool        `json:"ConsiderWarningAsError,omitempty"`
	Description            *string      `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for EventHealthEvaluation.
func (ehe EventHealthEvaluation) MarshalJSON() ([]byte, error) {
	ehe.Kind = KindEvent
	objectMap := make(map[string]interface{})
	if ehe.UnhealthyEvent != nil {
		objectMap["UnhealthyEvent"] = ehe.UnhealthyEvent
	}
	if ehe.ConsiderWarningAsError != nil {
		objectMap["ConsiderWarningAsError"] = ehe.ConsiderWarningAsError
	}
	if ehe.Description != nil {
		objectMap["Description"] = ehe.Description
	}
	if ehe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = ehe.AggregatedHealthState
	}
	if ehe.Kind != "" {
		objectMap["Kind"] = ehe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return &ehe, true
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for EventHealthEvaluation.
func (ehe EventHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &ehe, true
}

// BasicHealthEvaluation the evauation of the health
type BasicHealthEvaluation interface {
	AsEventHealthEvaluation() (*EventHealthEvaluation, bool)
	AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool)
	AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool)
	AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool)
	AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool)
	AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool)
	AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool)
	AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool)
	AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool)
	AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool)
	AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool)
	AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool)
	AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool)
	AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool)
	AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool)
	AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool)
	AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool)
	AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool)
	AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool)
	AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool)
	AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool)
	AsHealthEvaluation() (*HealthEvaluation, bool)
}

// HealthEvaluation the evauation of the health
type HealthEvaluation struct {
	Description *string `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

func unmarshalBasicHealthEvaluation(body []byte) (BasicHealthEvaluation, error) {
	var m map[string]interface{}
	err := json.Unmarshal(body, &m)
	if err != nil {
		return nil, err
	}

	switch m["Kind"] {
	case string(KindEvent):
		var ehe EventHealthEvaluation
		err := json.Unmarshal(body, &ehe)
		return ehe, err
	case string(KindPartitions):
		var phe PartitionsHealthEvaluation
		err := json.Unmarshal(body, &phe)
		return phe, err
	case string(KindReplicas):
		var rhe ReplicasHealthEvaluation
		err := json.Unmarshal(body, &rhe)
		return rhe, err
	case string(KindDeployedServicePackages):
		var dsphe DeployedServicePackagesHealthEvaluation
		err := json.Unmarshal(body, &dsphe)
		return dsphe, err
	case string(KindDeployedApplications):
		var dahe DeployedApplicationsHealthEvaluation
		err := json.Unmarshal(body, &dahe)
		return dahe, err
	case string(KindServices):
		var she ServicesHealthEvaluation
		err := json.Unmarshal(body, &she)
		return she, err
	case string(KindNodes):
		var nhe NodesHealthEvaluation
		err := json.Unmarshal(body, &nhe)
		return nhe, err
	case string(KindApplications):
		var ahe ApplicationsHealthEvaluation
		err := json.Unmarshal(body, &ahe)
		return ahe, err
	case string(KindUpgradeDomainNodes):
		var udnhe UpgradeDomainNodesHealthEvaluation
		err := json.Unmarshal(body, &udnhe)
		return udnhe, err
	case string(KindUpgradeDomainDeployedApplications):
		var uddahe UpgradeDomainDeployedApplicationsHealthEvaluation
		err := json.Unmarshal(body, &uddahe)
		return uddahe, err
	case string(KindSystemApplication):
		var sahe SystemApplicationHealthEvaluation
		err := json.Unmarshal(body, &sahe)
		return sahe, err
	case string(KindPartition):
		var phe PartitionHealthEvaluation
		err := json.Unmarshal(body, &phe)
		return phe, err
	case string(KindReplica):
		var rhe ReplicaHealthEvaluation
		err := json.Unmarshal(body, &rhe)
		return rhe, err
	case string(KindDeployedServicePackage):
		var dsphe DeployedServicePackageHealthEvaluation
		err := json.Unmarshal(body, &dsphe)
		return dsphe, err
	case string(KindDeployedApplication):
		var dahe DeployedApplicationHealthEvaluation
		err := json.Unmarshal(body, &dahe)
		return dahe, err
	case string(KindService):
		var she ServiceHealthEvaluation
		err := json.Unmarshal(body, &she)
		return she, err
	case string(KindNode):
		var nhe NodeHealthEvaluation
		err := json.Unmarshal(body, &nhe)
		return nhe, err
	case string(KindApplication):
		var ahe ApplicationHealthEvaluation
		err := json.Unmarshal(body, &ahe)
		return ahe, err
	case string(KindDeltaNodesCheck):
		var dnche DeltaNodesCheckHealthEvaluation
		err := json.Unmarshal(body, &dnche)
		return dnche, err
	case string(KindUpgradeDomainDeltaNodesCheck):
		var uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation
		err := json.Unmarshal(body, &uddnche)
		return uddnche, err
	case string(KindApplicationType):
		var athe ApplicationTypeHealthEvaluation
		err := json.Unmarshal(body, &athe)
		return athe, err
	default:
		var he HealthEvaluation
		err := json.Unmarshal(body, &he)
		return he, err
	}
}
func unmarshalBasicHealthEvaluationArray(body []byte) ([]BasicHealthEvaluation, error) {
	var rawMessages []*json.RawMessage
	err := json.Unmarshal(body, &rawMessages)
	if err != nil {
		return nil, err
	}

	heArray := make([]BasicHealthEvaluation, len(rawMessages))

	for index, rawMessage := range rawMessages {
		he, err := unmarshalBasicHealthEvaluation(*rawMessage)
		if err != nil {
			return nil, err
		}
		heArray[index] = he
	}
	return heArray, nil
}

// MarshalJSON is the custom marshaler for HealthEvaluation.
func (he HealthEvaluation) MarshalJSON() ([]byte, error) {
	he.Kind = KindHealthEvaluation
	objectMap := make(map[string]interface{})
	if he.Description != nil {
		objectMap["Description"] = he.Description
	}
	if he.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = he.AggregatedHealthState
	}
	if he.Kind != "" {
		objectMap["Kind"] = he.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return &he, true
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for HealthEvaluation.
func (he HealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &he, true
}

// HealthEvent the event of the health
type HealthEvent struct {
	SourceID *string `json:"SourceId,omitempty"`
	Property *string `json:"Property,omitempty"`
	// HealthState - Possible values include: 'HealthState2Invalid', 'HealthState2Ok', 'HealthState2Warning', 'HealthState2Error', 'HealthState2Unknown'
	HealthState              HealthState2 `json:"HealthState,omitempty"`
	TimeToLiveInMilliSeconds *string      `json:"TimeToLiveInMilliSeconds,omitempty"`
	Description              *string      `json:"Description,omitempty"`
	SequenceNumber           *string      `json:"SequenceNumber,omitempty"`
	RemoveWhenExpired        *bool        `json:"RemoveWhenExpired,omitempty"`
	SourceUtcTimestamp       *string      `json:"SourceUtcTimestamp,omitempty"`
	LastModifiedUtcTimestamp *string      `json:"LastModifiedUtcTimestamp,omitempty"`
	IsExpired                *bool        `json:"IsExpired,omitempty"`
	LastOkTransitionAt       *string      `json:"LastOkTransitionAt,omitempty"`
	LastWarningTransitionAt  *string      `json:"LastWarningTransitionAt,omitempty"`
	LastErrorTransitionAt    *string      `json:"LastErrorTransitionAt,omitempty"`
}

// HealthReport the report of the health
type HealthReport struct {
	SourceID *string `json:"SourceId,omitempty"`
	Property *string `json:"Property,omitempty"`
	// HealthState - Possible values include: 'HealthState1Invalid', 'HealthState1Ok', 'HealthState1Warning', 'HealthState1Error', 'HealthState1Unknown'
	HealthState              HealthState1 `json:"HealthState,omitempty"`
	Description              *string      `json:"Description,omitempty"`
	TimeToLiveInMilliSeconds *string      `json:"TimeToLiveInMilliSeconds,omitempty"`
	SequenceNumber           *string      `json:"SequenceNumber,omitempty"`
	RemoveWhenExpired        *bool        `json:"RemoveWhenExpired,omitempty"`
}

// ListApplicationType ...
type ListApplicationType struct {
	autorest.Response `json:"-"`
	Value             *[]ApplicationType `json:"value,omitempty"`
}

// ListDeployedApplication ...
type ListDeployedApplication struct {
	autorest.Response `json:"-"`
	Value             *[]DeployedApplication `json:"value,omitempty"`
}

// ListDeployedCodePackage ...
type ListDeployedCodePackage struct {
	autorest.Response `json:"-"`
	Value             *[]DeployedCodePackage `json:"value,omitempty"`
}

// ListDeployedReplica ...
type ListDeployedReplica struct {
	autorest.Response `json:"-"`
	Value             *[]DeployedReplica `json:"value,omitempty"`
}

// ListDeployedServicePackage ...
type ListDeployedServicePackage struct {
	autorest.Response `json:"-"`
	Value             *[]DeployedServicePackage `json:"value,omitempty"`
}

// ListDeployedServiceType ...
type ListDeployedServiceType struct {
	autorest.Response `json:"-"`
	Value             *[]DeployedServiceType `json:"value,omitempty"`
}

// ListServiceType ...
type ListServiceType struct {
	autorest.Response `json:"-"`
	Value             *[]ServiceType `json:"value,omitempty"`
}

// LoadMetricInformation the information of the load metric
type LoadMetricInformation struct {
	Name                        *string `json:"Name,omitempty"`
	IsBalancedBefore            *bool   `json:"IsBalancedBefore,omitempty"`
	IsBalancedAfter             *bool   `json:"IsBalancedAfter,omitempty"`
	DeviationBefore             *int32  `json:"DeviationBefore,omitempty"`
	DeviationAfter              *int32  `json:"DeviationAfter,omitempty"`
	BalancingThreshold          *int32  `json:"BalancingThreshold,omitempty"`
	Action                      *string `json:"Action,omitempty"`
	ActivityThreshold           *int32  `json:"ActivityThreshold,omitempty"`
	ClusterCapacity             *string `json:"ClusterCapacity,omitempty"`
	ClusterLoad                 *string `json:"ClusterLoad,omitempty"`
	RemainingUnbufferedCapacity *string `json:"RemainingUnbufferedCapacity,omitempty"`
	NodeBufferPercentage        *int32  `json:"NodeBufferPercentage,omitempty"`
	BufferedCapacity            *string `json:"BufferedCapacity,omitempty"`
	RemainingBufferedCapacity   *string `json:"RemainingBufferedCapacity,omitempty"`
	IsClusterCapacityViolation  *bool   `json:"IsClusterCapacityViolation,omitempty"`
	MinNodeLoadValue            *string `json:"MinNodeLoadValue,omitempty"`
	// MinNodeLoadID - The id of the min node
	MinNodeLoadID    *LoadMetricInformationMinNodeLoadID `json:"MinNodeLoadId,omitempty"`
	MaxNodeLoadValue *string                             `json:"MaxNodeLoadValue,omitempty"`
	// MaxNodeLoadID - The id of the max node load
	MaxNodeLoadID *LoadMetricInformationMaxNodeLoadID `json:"MaxNodeLoadId,omitempty"`
}

// LoadMetricInformationMaxNodeLoadID the id of the max node load
type LoadMetricInformationMaxNodeLoadID struct {
	ID *string `json:"Id,omitempty"`
}

// LoadMetricInformationMinNodeLoadID the id of the min node
type LoadMetricInformationMinNodeLoadID struct {
	ID *string `json:"Id,omitempty"`
}

// MonitoringPolicy the policy of the monitoring
type MonitoringPolicy struct {
	FailureAction                           *string `json:"FailureAction,omitempty"`
	HealthCheckWaitDurationInMilliseconds   *string `json:"HealthCheckWaitDurationInMilliseconds,omitempty"`
	HealthCheckStableDurationInMilliseconds *string `json:"HealthCheckStableDurationInMilliseconds,omitempty"`
	HealthCheckRetryTimeoutInMilliseconds   *string `json:"HealthCheckRetryTimeoutInMilliseconds,omitempty"`
	UpgradeTimeoutInMilliseconds            *string `json:"UpgradeTimeoutInMilliseconds,omitempty"`
	UpgradeDomainTimeoutInMilliseconds      *string `json:"UpgradeDomainTimeoutInMilliseconds,omitempty"`
}

// Node the node
type Node struct {
	autorest.Response `json:"-"`
	Name              *string `json:"Name,omitempty"`
	IPAddressOrFQDN   *string `json:"IpAddressOrFQDN,omitempty"`
	Type              *string `json:"Type,omitempty"`
	CodeVersion       *string `json:"CodeVersion,omitempty"`
	ConfigVersion     *string `json:"ConfigVersion,omitempty"`
	// NodeStatus - Possible values include: 'NodeStatusInvalid', 'NodeStatusUp', 'NodeStatusDown', 'NodeStatusEnabling', 'NodeStatusDisabling', 'NodeStatusDisabled', 'NodeStatusUnknown', 'NodeStatusRemoved'
	NodeStatus          NodeStatus `json:"NodeStatus,omitempty"`
	NodeUpTimeInSeconds *string    `json:"NodeUpTimeInSeconds,omitempty"`
	// HealthState - Possible values include: 'HealthStateInvalid', 'HealthStateOk', 'HealthStateWarning', 'HealthStateError', 'HealthStateUnknown'
	HealthState   HealthState `json:"HealthState,omitempty"`
	IsSeedNode    *bool       `json:"IsSeedNode,omitempty"`
	UpgradeDomain *string     `json:"UpgradeDomain,omitempty"`
	FaultDomain   *string     `json:"FaultDomain,omitempty"`
	// ID - The id
	ID         *NodeID `json:"Id,omitempty"`
	InstanceID *string `json:"InstanceId,omitempty"`
	// NodeDeactivationInfo - The info of the deactivation info
	NodeDeactivationInfo *NodeNodeDeactivationInfo `json:"NodeDeactivationInfo,omitempty"`
}

// NodeHealth the health of the node
type NodeHealth struct {
	autorest.Response `json:"-"`
	HealthEvents      *[]HealthEvent `json:"HealthEvents,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState1Invalid', 'AggregatedHealthState1Ok', 'AggregatedHealthState1Warning', 'AggregatedHealthState1Error', 'AggregatedHealthState1Unknown'
	AggregatedHealthState AggregatedHealthState1 `json:"AggregatedHealthState,omitempty"`
	Name                  *string                `json:"Name,omitempty"`
}

// NodeHealthEvaluation the evaluation of the node health
type NodeHealthEvaluation struct {
	NodeName             *string                `json:"NodeName,omitempty"`
	UnhealthyEvaluations *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	Description          *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) MarshalJSON() ([]byte, error) {
	nhe.Kind = KindNode
	objectMap := make(map[string]interface{})
	if nhe.NodeName != nil {
		objectMap["NodeName"] = nhe.NodeName
	}
	if nhe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = nhe.UnhealthyEvaluations
	}
	if nhe.Description != nil {
		objectMap["Description"] = nhe.Description
	}
	if nhe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = nhe.AggregatedHealthState
	}
	if nhe.Kind != "" {
		objectMap["Kind"] = nhe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return &nhe, true
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for NodeHealthEvaluation.
func (nhe NodeHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &nhe, true
}

// NodeHealthReport the report of the node health
type NodeHealthReport struct {
	SourceID *string `json:"SourceId,omitempty"`
	Property *string `json:"Property,omitempty"`
	// HealthState - Possible values include: 'HealthState1Invalid', 'HealthState1Ok', 'HealthState1Warning', 'HealthState1Error', 'HealthState1Unknown'
	HealthState              HealthState1 `json:"HealthState,omitempty"`
	Description              *string      `json:"Description,omitempty"`
	TimeToLiveInMilliSeconds *string      `json:"TimeToLiveInMilliSeconds,omitempty"`
	SequenceNumber           *string      `json:"SequenceNumber,omitempty"`
	RemoveWhenExpired        *bool        `json:"RemoveWhenExpired,omitempty"`
}

// NodeID the id
type NodeID struct {
	ID *string `json:"Id,omitempty"`
}

// NodeList the list of the node
type NodeList struct {
	autorest.Response `json:"-"`
	ContinuationToken *string `json:"ContinuationToken,omitempty"`
	Items             *[]Node `json:"Items,omitempty"`
}

// NodeLoadInformation the information of the node load
type NodeLoadInformation struct {
	autorest.Response         `json:"-"`
	NodeName                  *string                    `json:"NodeName,omitempty"`
	NodeLoadMetricInformation *NodeLoadMetricInformation `json:"NodeLoadMetricInformation,omitempty"`
}

// NodeLoadMetricInformation the information of the node load metric
type NodeLoadMetricInformation struct {
	Name                          *string `json:"Name,omitempty"`
	NodeCapacity                  *string `json:"NodeCapacity,omitempty"`
	NodeLoad                      *string `json:"NodeLoad,omitempty"`
	NodeRemainingCapacity         *string `json:"NodeRemainingCapacity,omitempty"`
	IsCapacityViolation           *bool   `json:"IsCapacityViolation,omitempty"`
	NodeBufferedCapacity          *string `json:"NodeBufferedCapacity,omitempty"`
	NodeRemainingBufferedCapacity *string `json:"NodeRemainingBufferedCapacity,omitempty"`
}

// NodeNodeDeactivationInfo the info of the deactivation info
type NodeNodeDeactivationInfo struct {
	// NodeDeactivationIntent - Possible values include: 'NodeDeactivationIntentInvalid', 'NodeDeactivationIntentPause', 'NodeDeactivationIntentRestart', 'NodeDeactivationIntentRemoveData'
	NodeDeactivationIntent NodeDeactivationIntent `json:"NodeDeactivationIntent,omitempty"`
	// NodeDeactivationStatus - Possible values include: 'NodeDeactivationStatusInvalid', 'NodeDeactivationStatusSafetyCheckInProgress', 'NodeDeactivationStatusSafetyCheckComplete', 'NodeDeactivationStatusCompleted'
	NodeDeactivationStatus NodeDeactivationStatus `json:"NodeDeactivationStatus,omitempty"`
}

// NodesHealthEvaluation the evaluation of the nodes health
type NodesHealthEvaluation struct {
	UnhealthyEvaluations     *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	TotalCount               *int32                 `json:"TotalCount,omitempty"`
	MaxPercentUnhealthyNodes *int32                 `json:"MaxPercentUnhealthyNodes,omitempty"`
	Description              *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) MarshalJSON() ([]byte, error) {
	nhe.Kind = KindNodes
	objectMap := make(map[string]interface{})
	if nhe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = nhe.UnhealthyEvaluations
	}
	if nhe.TotalCount != nil {
		objectMap["TotalCount"] = nhe.TotalCount
	}
	if nhe.MaxPercentUnhealthyNodes != nil {
		objectMap["MaxPercentUnhealthyNodes"] = nhe.MaxPercentUnhealthyNodes
	}
	if nhe.Description != nil {
		objectMap["Description"] = nhe.Description
	}
	if nhe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = nhe.AggregatedHealthState
	}
	if nhe.Kind != "" {
		objectMap["Kind"] = nhe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return &nhe, true
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for NodesHealthEvaluation.
func (nhe NodesHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &nhe, true
}

// Partition the partition
type Partition struct {
	autorest.Response `json:"-"`
	// ServiceKind - Possible values include: 'ServiceKind4Invalid', 'ServiceKind4Stateless', 'ServiceKind4Stateful'
	ServiceKind          ServiceKind4          `json:"ServiceKind,omitempty"`
	PartitionInformation *PartitionInformation `json:"PartitionInformation,omitempty"`
	InstanceCount        *int32                `json:"InstanceCount,omitempty"`
	TargetReplicaSetSize *int32                `json:"TargetReplicaSetSize,omitempty"`
	MinReplicaSetSize    *int32                `json:"MinReplicaSetSize,omitempty"`
	// HealthState - Possible values include: 'HealthState5Invalid', 'HealthState5Ok', 'HealthState5Warning', 'HealthState5Error', 'HealthState5Unknown'
	HealthState HealthState5 `json:"HealthState,omitempty"`
	// PartitionStatus - Possible values include: 'PartitionStatusInvalid', 'PartitionStatusReady', 'PartitionStatusNotReady', 'PartitionStatusInQuorumLoss', 'PartitionStatusReconfiguring', 'PartitionStatusDeleting'
	PartitionStatus PartitionStatus `json:"PartitionStatus,omitempty"`
	// CurrentConfigurationEpoch - The epoch of the current configuration
	CurrentConfigurationEpoch *PartitionCurrentConfigurationEpoch `json:"CurrentConfigurationEpoch,omitempty"`
}

// PartitionCurrentConfigurationEpoch the epoch of the current configuration
type PartitionCurrentConfigurationEpoch struct {
	ConfigurationVersion *string `json:"ConfigurationVersion,omitempty"`
	DataLossVersion      *string `json:"DataLossVersion,omitempty"`
}

// PartitionDescription the description of the partition
type PartitionDescription struct {
	// PartitionScheme - Possible values include: 'PartitionSchemeInvalid', 'PartitionSchemeSingleton', 'PartitionSchemeUniformInt64', 'PartitionSchemeNamed'
	PartitionScheme PartitionScheme `json:"PartitionScheme,omitempty"`
	Count           *int32          `json:"Count,omitempty"`
	Names           *[]string       `json:"Names,omitempty"`
	LowKey          *string         `json:"LowKey,omitempty"`
	HighKey         *string         `json:"HighKey,omitempty"`
}

// PartitionHealth the health of the partition
type PartitionHealth struct {
	autorest.Response `json:"-"`
	HealthEvents      *[]HealthEvent `json:"HealthEvents,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState11Invalid', 'AggregatedHealthState11Ok', 'AggregatedHealthState11Warning', 'AggregatedHealthState11Error', 'AggregatedHealthState11Unknown'
	AggregatedHealthState AggregatedHealthState11                   `json:"AggregatedHealthState,omitempty"`
	PartitionID           *string                                   `json:"PartitionId,omitempty"`
	ReplicaHealthStates   *[]PartitionHealthReplicaHealthStatesItem `json:"ReplicaHealthStates,omitempty"`
}

// PartitionHealthEvaluation the evaluation of the partition health
type PartitionHealthEvaluation struct {
	PartitionID          *string                `json:"PartitionId,omitempty"`
	UnhealthyEvaluations *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	Description          *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) MarshalJSON() ([]byte, error) {
	phe.Kind = KindPartition
	objectMap := make(map[string]interface{})
	if phe.PartitionID != nil {
		objectMap["PartitionId"] = phe.PartitionID
	}
	if phe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = phe.UnhealthyEvaluations
	}
	if phe.Description != nil {
		objectMap["Description"] = phe.Description
	}
	if phe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = phe.AggregatedHealthState
	}
	if phe.Kind != "" {
		objectMap["Kind"] = phe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return &phe, true
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for PartitionHealthEvaluation.
func (phe PartitionHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &phe, true
}

// PartitionHealthReplicaHealthStatesItem the states of the replica health
type PartitionHealthReplicaHealthStatesItem struct {
	HealthEvents *int32  `json:"HealthEvents,omitempty"`
	PartitionID  *string `json:"PartitionId,omitempty"`
	ReplicaID    *string `json:"ReplicaId,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState10Invalid', 'AggregatedHealthState10Ok', 'AggregatedHealthState10Warning', 'AggregatedHealthState10Error', 'AggregatedHealthState10Unknown'
	AggregatedHealthState AggregatedHealthState10 `json:"AggregatedHealthState,omitempty"`
}

// PartitionHealthReport the report of the partition health
type PartitionHealthReport struct {
	SourceID *string `json:"SourceId,omitempty"`
	Property *string `json:"Property,omitempty"`
	// HealthState - Possible values include: 'HealthState1Invalid', 'HealthState1Ok', 'HealthState1Warning', 'HealthState1Error', 'HealthState1Unknown'
	HealthState              HealthState1 `json:"HealthState,omitempty"`
	Description              *string      `json:"Description,omitempty"`
	TimeToLiveInMilliSeconds *string      `json:"TimeToLiveInMilliSeconds,omitempty"`
	SequenceNumber           *string      `json:"SequenceNumber,omitempty"`
	RemoveWhenExpired        *bool        `json:"RemoveWhenExpired,omitempty"`
}

// PartitionInformation the information of the partition
type PartitionInformation struct {
	// ServicePartitionKind - Possible values include: 'ServicePartitionKindInvalid', 'ServicePartitionKindSingleton', 'ServicePartitionKindInt64Range', 'ServicePartitionKindNamed'
	ServicePartitionKind ServicePartitionKind `json:"ServicePartitionKind,omitempty"`
	ID                   *string              `json:"Id,omitempty"`
	Name                 *[]string            `json:"Name,omitempty"`
	LowKey               *string              `json:"LowKey,omitempty"`
	HighKey              *string              `json:"HighKey,omitempty"`
}

// PartitionList the list of the partition
type PartitionList struct {
	autorest.Response `json:"-"`
	ContinuationToken *string      `json:"ContinuationToken,omitempty"`
	Items             *[]Partition `json:"Items,omitempty"`
}

// PartitionLoadInformation the information of the partition load
type PartitionLoadInformation struct {
	autorest.Response          `json:"-"`
	PartitionID                *string   `json:"PartitionId,omitempty"`
	PrimaryLoadMetricReports   *[]string `json:"PrimaryLoadMetricReports,omitempty"`
	SecondaryLoadMetricReports *[]string `json:"SecondaryLoadMetricReports,omitempty"`
}

// PartitionsHealthEvaluation the evaluation of the partitions health
type PartitionsHealthEvaluation struct {
	UnhealthyEvaluations                    *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	TotalCount                              *int32                 `json:"TotalCount,omitempty"`
	MaxPercentUnhealthyPartitionsPerService *int32                 `json:"MaxPercentUnhealthyPartitionsPerService,omitempty"`
	Description                             *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) MarshalJSON() ([]byte, error) {
	phe.Kind = KindPartitions
	objectMap := make(map[string]interface{})
	if phe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = phe.UnhealthyEvaluations
	}
	if phe.TotalCount != nil {
		objectMap["TotalCount"] = phe.TotalCount
	}
	if phe.MaxPercentUnhealthyPartitionsPerService != nil {
		objectMap["MaxPercentUnhealthyPartitionsPerService"] = phe.MaxPercentUnhealthyPartitionsPerService
	}
	if phe.Description != nil {
		objectMap["Description"] = phe.Description
	}
	if phe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = phe.AggregatedHealthState
	}
	if phe.Kind != "" {
		objectMap["Kind"] = phe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return &phe, true
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for PartitionsHealthEvaluation.
func (phe PartitionsHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &phe, true
}

// RegisterApplicationType the type of the register application
type RegisterApplicationType struct {
	ApplicationTypeBuildPath *string `json:"ApplicationTypeBuildPath,omitempty"`
}

// RegisterClusterPackage the package of the register cluster
type RegisterClusterPackage struct {
	// CodeFilePath - The path of the code file
	CodeFilePath *string `json:"CodeFilePath,omitempty"`
	// ClusterManifestFilePath - The relative path of the cluster manifest file
	ClusterManifestFilePath *string `json:"ClusterManifestFilePath,omitempty"`
}

// Replica the replica
type Replica struct {
	autorest.Response `json:"-"`
	// ServiceKind - Possible values include: 'ServiceKind5Invalid', 'ServiceKind5Stateless', 'ServiceKind5Stateful'
	ServiceKind ServiceKind5 `json:"ServiceKind,omitempty"`
	InstanceID  *string      `json:"InstanceId,omitempty"`
	ReplicaID   *string      `json:"ReplicaId,omitempty"`
	// ReplicaRole - Possible values include: 'ReplicaRole1Invalid', 'ReplicaRole1None', 'ReplicaRole1Primary', 'ReplicaRole1IdleSecondary', 'ReplicaRole1ActiveSecondary'
	ReplicaRole ReplicaRole1 `json:"ReplicaRole,omitempty"`
	// ReplicaStatus - Possible values include: 'ReplicaStatus1Invalid', 'ReplicaStatus1InBuild', 'ReplicaStatus1Standby', 'ReplicaStatus1Ready', 'ReplicaStatus1Down', 'ReplicaStatus1Dropped'
	ReplicaStatus ReplicaStatus1 `json:"ReplicaStatus,omitempty"`
	// HealthState - Possible values include: 'HealthState6Invalid', 'HealthState6Ok', 'HealthState6Warning', 'HealthState6Error', 'HealthState6Unknown'
	HealthState                  HealthState6 `json:"HealthState,omitempty"`
	Address                      *string      `json:"Address,omitempty"`
	NodeName                     *string      `json:"NodeName,omitempty"`
	LastInBuildDurationInSeconds *string      `json:"LastInBuildDurationInSeconds,omitempty"`
}

// ReplicaHealth the health of the replica
type ReplicaHealth struct {
	autorest.Response `json:"-"`
	// ServiceKind - Possible values include: 'ServiceKind6Invalid', 'ServiceKind6Stateless', 'ServiceKind6Stateful'
	ServiceKind  ServiceKind6   `json:"ServiceKind,omitempty"`
	PartitionID  *string        `json:"PartitionId,omitempty"`
	ReplicaID    *string        `json:"ReplicaId,omitempty"`
	HealthEvents *[]HealthEvent `json:"HealthEvents,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState12Invalid', 'AggregatedHealthState12Ok', 'AggregatedHealthState12Warning', 'AggregatedHealthState12Error', 'AggregatedHealthState12Unknown'
	AggregatedHealthState AggregatedHealthState12 `json:"AggregatedHealthState,omitempty"`
}

// ReplicaHealthEvaluation the evaluation of the replica health
type ReplicaHealthEvaluation struct {
	PartitionID          *string                `json:"PartitionId,omitempty"`
	ReplicaOrInstanceID  *string                `json:"ReplicaOrInstanceId,omitempty"`
	UnhealthyEvaluations *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	Description          *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) MarshalJSON() ([]byte, error) {
	rhe.Kind = KindReplica
	objectMap := make(map[string]interface{})
	if rhe.PartitionID != nil {
		objectMap["PartitionId"] = rhe.PartitionID
	}
	if rhe.ReplicaOrInstanceID != nil {
		objectMap["ReplicaOrInstanceId"] = rhe.ReplicaOrInstanceID
	}
	if rhe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = rhe.UnhealthyEvaluations
	}
	if rhe.Description != nil {
		objectMap["Description"] = rhe.Description
	}
	if rhe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = rhe.AggregatedHealthState
	}
	if rhe.Kind != "" {
		objectMap["Kind"] = rhe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return &rhe, true
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for ReplicaHealthEvaluation.
func (rhe ReplicaHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &rhe, true
}

// ReplicaHealthReport the report of the replica health
type ReplicaHealthReport struct {
	SourceID *string `json:"SourceId,omitempty"`
	Property *string `json:"Property,omitempty"`
	// HealthState - Possible values include: 'HealthState1Invalid', 'HealthState1Ok', 'HealthState1Warning', 'HealthState1Error', 'HealthState1Unknown'
	HealthState              HealthState1 `json:"HealthState,omitempty"`
	Description              *string      `json:"Description,omitempty"`
	TimeToLiveInMilliSeconds *string      `json:"TimeToLiveInMilliSeconds,omitempty"`
	SequenceNumber           *string      `json:"SequenceNumber,omitempty"`
	RemoveWhenExpired        *bool        `json:"RemoveWhenExpired,omitempty"`
}

// ReplicaList the list of the replica
type ReplicaList struct {
	autorest.Response `json:"-"`
	ContinuationToken *string    `json:"ContinuationToken,omitempty"`
	Items             *[]Replica `json:"Items,omitempty"`
}

// ReplicaLoadInformation the information of the replica load
type ReplicaLoadInformation struct {
	autorest.Response   `json:"-"`
	PartitionID         *string   `json:"PartitionId,omitempty"`
	ReplicaOrInstanceID *string   `json:"ReplicaOrInstanceId,omitempty"`
	ReportedLoad        *[]string `json:"ReportedLoad,omitempty"`
}

// ReplicasHealthEvaluation the evaluation of the replicas health
type ReplicasHealthEvaluation struct {
	UnhealthyEvaluations                    *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	TotalCount                              *int32                 `json:"TotalCount,omitempty"`
	MaxPercentUnhealthyPartitionsPerService *int32                 `json:"MaxPercentUnhealthyPartitionsPerService,omitempty"`
	Description                             *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) MarshalJSON() ([]byte, error) {
	rhe.Kind = KindReplicas
	objectMap := make(map[string]interface{})
	if rhe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = rhe.UnhealthyEvaluations
	}
	if rhe.TotalCount != nil {
		objectMap["TotalCount"] = rhe.TotalCount
	}
	if rhe.MaxPercentUnhealthyPartitionsPerService != nil {
		objectMap["MaxPercentUnhealthyPartitionsPerService"] = rhe.MaxPercentUnhealthyPartitionsPerService
	}
	if rhe.Description != nil {
		objectMap["Description"] = rhe.Description
	}
	if rhe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = rhe.AggregatedHealthState
	}
	if rhe.Kind != "" {
		objectMap["Kind"] = rhe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return &rhe, true
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for ReplicasHealthEvaluation.
func (rhe ReplicasHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &rhe, true
}

// ResolvedServicePartition the partition of the resolved service
type ResolvedServicePartition struct {
	autorest.Response    `json:"-"`
	Name                 *string                                  `json:"Name,omitempty"`
	PartitionInformation *PartitionInformation                    `json:"PartitionInformation,omitempty"`
	Endpoints            *[]ResolvedServicePartitionEndpointsItem `json:"Endpoints,omitempty"`
	Version              *string                                  `json:"Version,omitempty"`
}

// ResolvedServicePartitionEndpointsItem the endpoints
type ResolvedServicePartitionEndpointsItem struct {
	Kind    *int32  `json:"Kind,omitempty"`
	Address *string `json:"Address,omitempty"`
}

// ResumeApplicationUpgrade the upgrade of the resume application
type ResumeApplicationUpgrade struct {
	UpgradeDomainName *string `json:"UpgradeDomainName,omitempty"`
}

// ResumeClusterUpgrade the upgrade of the resume cluster
type ResumeClusterUpgrade struct {
	UpgradeDomain *string `json:"UpgradeDomain,omitempty"`
}

// Service the service
type Service struct {
	autorest.Response `json:"-"`
	ID                *string `json:"Id,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKind2Invalid', 'ServiceKind2Stateless', 'ServiceKind2Stateful'
	ServiceKind       ServiceKind2 `json:"ServiceKind,omitempty"`
	Name              *string      `json:"Name,omitempty"`
	TypeName          *string      `json:"TypeName,omitempty"`
	ManifestVersion   *string      `json:"ManifestVersion,omitempty"`
	HasPersistedState *bool        `json:"HasPersistedState,omitempty"`
	// HealthState - Possible values include: 'HealthState4Invalid', 'HealthState4Ok', 'HealthState4Warning', 'HealthState4Error', 'HealthState4Unknown'
	HealthState HealthState4 `json:"HealthState,omitempty"`
	// ServiceStatus - Possible values include: 'ServiceStatusInvalid', 'ServiceStatusActive', 'ServiceStatusUpgrading', 'ServiceStatusDeleting', 'ServiceStatusCreating', 'ServiceStatusFaile'
	ServiceStatus  ServiceStatus `json:"ServiceStatus,omitempty"`
	IsServiceGroup *bool         `json:"IsServiceGroup,omitempty"`
}

// ServiceCorrelationDescription the description of the service correlation
type ServiceCorrelationDescription struct {
	ServiceName *string `json:"ServiceName,omitempty"`
	// ServiceCorrelationScheme - Possible values include: 'ServiceCorrelationSchemeInvalid', 'ServiceCorrelationSchemeAffinity', 'ServiceCorrelationSchemeAlignedAffinity', 'ServiceCorrelationSchemeNonAlignedAffinity'
	ServiceCorrelationScheme ServiceCorrelationScheme `json:"ServiceCorrelationScheme,omitempty"`
}

// BasicServiceDescription the description of the service
type BasicServiceDescription interface {
	AsStatelessServiceDescription() (*StatelessServiceDescription, bool)
	AsStatefulServiceDescription() (*StatefulServiceDescription, bool)
	AsServiceDescription() (*ServiceDescription, bool)
}

// ServiceDescription the description of the service
type ServiceDescription struct {
	autorest.Response        `json:"-"`
	ApplicationName          *string                        `json:"ApplicationName,omitempty"`
	ServiceName              *string                        `json:"ServiceName,omitempty"`
	ServiceTypeName          *string                        `json:"ServiceTypeName,omitempty"`
	PartitionDescription     *PartitionDescription          `json:"PartitionDescription,omitempty"`
	PlacementConstraints     *string                        `json:"PlacementConstraints,omitempty"`
	CorrelationScheme        *ServiceCorrelationDescription `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics       *ServiceCorrelationDescription `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies *ServiceCorrelationDescription `json:"ServicePlacementPolicies,omitempty"`
	Flags                    *int32                         `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicServiceDescriptionServiceKindServiceDescription', 'ServiceKindBasicServiceDescriptionServiceKindStateless', 'ServiceKindBasicServiceDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicServiceDescription `json:"ServiceKind,omitempty"`
}

func unmarshalBasicServiceDescription(body []byte) (BasicServiceDescription, error) {
	var m map[string]interface{}
	err := json.Unmarshal(body, &m)
	if err != nil {
		return nil, err
	}

	switch m["ServiceKind"] {
	case string(ServiceKindBasicServiceDescriptionServiceKindStateless):
		var ssd StatelessServiceDescription
		err := json.Unmarshal(body, &ssd)
		return ssd, err
	case string(ServiceKindBasicServiceDescriptionServiceKindStateful):
		var ssd StatefulServiceDescription
		err := json.Unmarshal(body, &ssd)
		return ssd, err
	default:
		var sd ServiceDescription
		err := json.Unmarshal(body, &sd)
		return sd, err
	}
}
func unmarshalBasicServiceDescriptionArray(body []byte) ([]BasicServiceDescription, error) {
	var rawMessages []*json.RawMessage
	err := json.Unmarshal(body, &rawMessages)
	if err != nil {
		return nil, err
	}

	sdArray := make([]BasicServiceDescription, len(rawMessages))

	for index, rawMessage := range rawMessages {
		sd, err := unmarshalBasicServiceDescription(*rawMessage)
		if err != nil {
			return nil, err
		}
		sdArray[index] = sd
	}
	return sdArray, nil
}

// MarshalJSON is the custom marshaler for ServiceDescription.
func (sd ServiceDescription) MarshalJSON() ([]byte, error) {
	sd.ServiceKind = ServiceKindBasicServiceDescriptionServiceKindServiceDescription
	objectMap := make(map[string]interface{})
	if sd.ApplicationName != nil {
		objectMap["ApplicationName"] = sd.ApplicationName
	}
	if sd.ServiceName != nil {
		objectMap["ServiceName"] = sd.ServiceName
	}
	if sd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = sd.ServiceTypeName
	}
	if sd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = sd.PartitionDescription
	}
	if sd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = sd.PlacementConstraints
	}
	if sd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = sd.CorrelationScheme
	}
	if sd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = sd.ServiceLoadMetrics
	}
	if sd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = sd.ServicePlacementPolicies
	}
	if sd.Flags != nil {
		objectMap["Flags"] = sd.Flags
	}
	if sd.ServiceKind != "" {
		objectMap["ServiceKind"] = sd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessServiceDescription is the BasicServiceDescription implementation for ServiceDescription.
func (sd ServiceDescription) AsStatelessServiceDescription() (*StatelessServiceDescription, bool) {
	return nil, false
}

// AsStatefulServiceDescription is the BasicServiceDescription implementation for ServiceDescription.
func (sd ServiceDescription) AsStatefulServiceDescription() (*StatefulServiceDescription, bool) {
	return nil, false
}

// AsServiceDescription is the BasicServiceDescription implementation for ServiceDescription.
func (sd ServiceDescription) AsServiceDescription() (*ServiceDescription, bool) {
	return &sd, true
}

// AsBasicServiceDescription is the BasicServiceDescription implementation for ServiceDescription.
func (sd ServiceDescription) AsBasicServiceDescription() (BasicServiceDescription, bool) {
	return &sd, true
}

// ServiceDescriptionModel ...
type ServiceDescriptionModel struct {
	autorest.Response `json:"-"`
	Value             BasicServiceDescription `json:"value,omitempty"`
}

// UnmarshalJSON is the custom unmarshaler for ServiceDescriptionModel struct.
func (sdm *ServiceDescriptionModel) UnmarshalJSON(body []byte) error {
	sd, err := unmarshalBasicServiceDescription(body)
	if err != nil {
		return err
	}
	sdm.Value = sd

	return nil
}

// ServiceDescriptionTemplate the template of the service description
type ServiceDescriptionTemplate struct {
	ServiceName     *string `json:"ServiceName,omitempty"`
	ServiceTypeName *string `json:"ServiceTypeName,omitempty"`
}

// BasicServiceGroupDescription the description of the service group
type BasicServiceGroupDescription interface {
	AsStatelessServiceGroupDescription() (*StatelessServiceGroupDescription, bool)
	AsStatefulServiceGroupDescription() (*StatefulServiceGroupDescription, bool)
	AsServiceGroupDescription() (*ServiceGroupDescription, bool)
}

// ServiceGroupDescription the description of the service group
type ServiceGroupDescription struct {
	autorest.Response             `json:"-"`
	ApplicationName               *string                          `json:"ApplicationName,omitempty"`
	ServiceName                   *string                          `json:"ServiceName,omitempty"`
	ServiceTypeName               *string                          `json:"ServiceTypeName,omitempty"`
	PartitionDescription          *PartitionDescription            `json:"PartitionDescription,omitempty"`
	PlacementConstraints          *string                          `json:"PlacementConstraints,omitempty"`
	CorrelationScheme             *ServiceCorrelationDescription   `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics            *ServiceCorrelationDescription   `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies      *ServiceCorrelationDescription   `json:"ServicePlacementPolicies,omitempty"`
	Flags                         *int32                           `json:"Flags,omitempty"`
	ServiceGroupMemberDescription *[]ServiceGroupMemberDescription `json:"ServiceGroupMemberDescription,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicServiceGroupDescriptionServiceKindServiceGroupDescription', 'ServiceKindBasicServiceGroupDescriptionServiceKindStateless', 'ServiceKindBasicServiceGroupDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicServiceGroupDescription `json:"ServiceKind,omitempty"`
}

func unmarshalBasicServiceGroupDescription(body []byte) (BasicServiceGroupDescription, error) {
	var m map[string]interface{}
	err := json.Unmarshal(body, &m)
	if err != nil {
		return nil, err
	}

	switch m["ServiceKind"] {
	case string(ServiceKindBasicServiceGroupDescriptionServiceKindStateless):
		var ssgd StatelessServiceGroupDescription
		err := json.Unmarshal(body, &ssgd)
		return ssgd, err
	case string(ServiceKindBasicServiceGroupDescriptionServiceKindStateful):
		var ssgd StatefulServiceGroupDescription
		err := json.Unmarshal(body, &ssgd)
		return ssgd, err
	default:
		var sgd ServiceGroupDescription
		err := json.Unmarshal(body, &sgd)
		return sgd, err
	}
}
func unmarshalBasicServiceGroupDescriptionArray(body []byte) ([]BasicServiceGroupDescription, error) {
	var rawMessages []*json.RawMessage
	err := json.Unmarshal(body, &rawMessages)
	if err != nil {
		return nil, err
	}

	sgdArray := make([]BasicServiceGroupDescription, len(rawMessages))

	for index, rawMessage := range rawMessages {
		sgd, err := unmarshalBasicServiceGroupDescription(*rawMessage)
		if err != nil {
			return nil, err
		}
		sgdArray[index] = sgd
	}
	return sgdArray, nil
}

// MarshalJSON is the custom marshaler for ServiceGroupDescription.
func (sgd ServiceGroupDescription) MarshalJSON() ([]byte, error) {
	sgd.ServiceKind = ServiceKindBasicServiceGroupDescriptionServiceKindServiceGroupDescription
	objectMap := make(map[string]interface{})
	if sgd.ApplicationName != nil {
		objectMap["ApplicationName"] = sgd.ApplicationName
	}
	if sgd.ServiceName != nil {
		objectMap["ServiceName"] = sgd.ServiceName
	}
	if sgd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = sgd.ServiceTypeName
	}
	if sgd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = sgd.PartitionDescription
	}
	if sgd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = sgd.PlacementConstraints
	}
	if sgd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = sgd.CorrelationScheme
	}
	if sgd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = sgd.ServiceLoadMetrics
	}
	if sgd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = sgd.ServicePlacementPolicies
	}
	if sgd.Flags != nil {
		objectMap["Flags"] = sgd.Flags
	}
	if sgd.ServiceGroupMemberDescription != nil {
		objectMap["ServiceGroupMemberDescription"] = sgd.ServiceGroupMemberDescription
	}
	if sgd.ServiceKind != "" {
		objectMap["ServiceKind"] = sgd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessServiceGroupDescription is the BasicServiceGroupDescription implementation for ServiceGroupDescription.
func (sgd ServiceGroupDescription) AsStatelessServiceGroupDescription() (*StatelessServiceGroupDescription, bool) {
	return nil, false
}

// AsStatefulServiceGroupDescription is the BasicServiceGroupDescription implementation for ServiceGroupDescription.
func (sgd ServiceGroupDescription) AsStatefulServiceGroupDescription() (*StatefulServiceGroupDescription, bool) {
	return nil, false
}

// AsServiceGroupDescription is the BasicServiceGroupDescription implementation for ServiceGroupDescription.
func (sgd ServiceGroupDescription) AsServiceGroupDescription() (*ServiceGroupDescription, bool) {
	return &sgd, true
}

// AsBasicServiceGroupDescription is the BasicServiceGroupDescription implementation for ServiceGroupDescription.
func (sgd ServiceGroupDescription) AsBasicServiceGroupDescription() (BasicServiceGroupDescription, bool) {
	return &sgd, true
}

// ServiceGroupDescriptionModel ...
type ServiceGroupDescriptionModel struct {
	autorest.Response `json:"-"`
	Value             BasicServiceGroupDescription `json:"value,omitempty"`
}

// UnmarshalJSON is the custom unmarshaler for ServiceGroupDescriptionModel struct.
func (sgdm *ServiceGroupDescriptionModel) UnmarshalJSON(body []byte) error {
	sgd, err := unmarshalBasicServiceGroupDescription(body)
	if err != nil {
		return err
	}
	sgdm.Value = sgd

	return nil
}

// ServiceGroupMember the member of the service group
type ServiceGroupMember struct {
	autorest.Response             `json:"-"`
	Name                          *string                          `json:"Name,omitempty"`
	ServiceGroupMemberDescription *[]ServiceGroupMemberDescription `json:"ServiceGroupMemberDescription,omitempty"`
}

// ServiceGroupMemberDescription the description of the service group member
type ServiceGroupMemberDescription struct {
	ServiceName     *string `json:"ServiceName,omitempty"`
	ServiceTypeName *string `json:"ServiceTypeName,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKind3Invalid', 'ServiceKind3Stateless', 'ServiceKind3Stateful'
	ServiceKind ServiceKind3 `json:"ServiceKind,omitempty"`
}

// ServiceHealth the health of the service
type ServiceHealth struct {
	autorest.Response `json:"-"`
	HealthEvents      *[]HealthEvent `json:"HealthEvents,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState9Invalid', 'AggregatedHealthState9Ok', 'AggregatedHealthState9Warning', 'AggregatedHealthState9Error', 'AggregatedHealthState9Unknown'
	AggregatedHealthState AggregatedHealthState9                    `json:"AggregatedHealthState,omitempty"`
	Name                  *string                                   `json:"Name,omitempty"`
	PartitionHealthStates *[]ServiceHealthPartitionHealthStatesItem `json:"PartitionHealthStates,omitempty"`
}

// ServiceHealthEvaluation the evaluation of the service health
type ServiceHealthEvaluation struct {
	ServiceName          *string                `json:"ServiceName,omitempty"`
	UnhealthyEvaluations *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	Description          *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) MarshalJSON() ([]byte, error) {
	she.Kind = KindService
	objectMap := make(map[string]interface{})
	if she.ServiceName != nil {
		objectMap["ServiceName"] = she.ServiceName
	}
	if she.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = she.UnhealthyEvaluations
	}
	if she.Description != nil {
		objectMap["Description"] = she.Description
	}
	if she.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = she.AggregatedHealthState
	}
	if she.Kind != "" {
		objectMap["Kind"] = she.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return &she, true
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for ServiceHealthEvaluation.
func (she ServiceHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &she, true
}

// ServiceHealthPartitionHealthStatesItem the states of the partition health
type ServiceHealthPartitionHealthStatesItem struct {
	PartitionID *string `json:"PartitionId,omitempty"`
	// AggregatedHealthState - Possible values include: 'AggregatedHealthState8Invalid', 'AggregatedHealthState8Ok', 'AggregatedHealthState8Warning', 'AggregatedHealthState8Error', 'AggregatedHealthState8Unknown'
	AggregatedHealthState AggregatedHealthState8 `json:"AggregatedHealthState,omitempty"`
}

// ServiceHealthReport the report of the service health
type ServiceHealthReport struct {
	SourceID *string `json:"SourceId,omitempty"`
	Property *string `json:"Property,omitempty"`
	// HealthState - Possible values include: 'HealthState1Invalid', 'HealthState1Ok', 'HealthState1Warning', 'HealthState1Error', 'HealthState1Unknown'
	HealthState              HealthState1 `json:"HealthState,omitempty"`
	Description              *string      `json:"Description,omitempty"`
	TimeToLiveInMilliSeconds *string      `json:"TimeToLiveInMilliSeconds,omitempty"`
	SequenceNumber           *string      `json:"SequenceNumber,omitempty"`
	RemoveWhenExpired        *bool        `json:"RemoveWhenExpired,omitempty"`
}

// ServiceList the list of the service
type ServiceList struct {
	autorest.Response `json:"-"`
	ContinuationToken *string    `json:"ContinuationToken,omitempty"`
	Items             *[]Service `json:"Items,omitempty"`
}

// ServiceLoadMetricDescription the description of the service load metric
type ServiceLoadMetricDescription struct {
	Name *string `json:"Name,omitempty"`
	// ServiceLoadMetricWeight - Possible values include: 'ServiceLoadMetricWeightZero', 'ServiceLoadMetricWeightLow', 'ServiceLoadMetricWeightMedium', 'ServiceLoadMetricWeightHigh'
	ServiceLoadMetricWeight ServiceLoadMetricWeight `json:"ServiceLoadMetricWeight,omitempty"`
	PrimaryDefaultLoad      *int32                  `json:"PrimaryDefaultLoad,omitempty"`
	SecondaryDefaultLoad    *int32                  `json:"SecondaryDefaultLoad,omitempty"`
}

// ServiceManifest the manifest of the service
type ServiceManifest struct {
	autorest.Response `json:"-"`
	Manifest          *string `json:"Manifest,omitempty"`
}

// ServicePlacementPolicyDescription the description of the service placement policy
type ServicePlacementPolicyDescription struct {
	Type *string `json:"Type,omitempty"`
}

// ServicesHealthEvaluation the evaluation of the services health
type ServicesHealthEvaluation struct {
	ServiceTypeName             *string                `json:"ServiceTypeName,omitempty"`
	UnhealthyEvaluations        *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	TotalCount                  *int32                 `json:"TotalCount,omitempty"`
	MaxPercentUnhealthyServices *int32                 `json:"MaxPercentUnhealthyServices,omitempty"`
	Description                 *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) MarshalJSON() ([]byte, error) {
	she.Kind = KindServices
	objectMap := make(map[string]interface{})
	if she.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = she.ServiceTypeName
	}
	if she.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = she.UnhealthyEvaluations
	}
	if she.TotalCount != nil {
		objectMap["TotalCount"] = she.TotalCount
	}
	if she.MaxPercentUnhealthyServices != nil {
		objectMap["MaxPercentUnhealthyServices"] = she.MaxPercentUnhealthyServices
	}
	if she.Description != nil {
		objectMap["Description"] = she.Description
	}
	if she.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = she.AggregatedHealthState
	}
	if she.Kind != "" {
		objectMap["Kind"] = she.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return &she, true
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for ServicesHealthEvaluation.
func (she ServicesHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &she, true
}

// ServiceType the type of the service
type ServiceType struct {
	// ServiceTypeDescription - The description of the service type
	ServiceTypeDescription *ServiceTypeServiceTypeDescription `json:"ServiceTypeDescription,omitempty"`
	ServiceManifestVersion *string                            `json:"ServiceManifestVersion,omitempty"`
	ServiceManifestName    *string                            `json:"ServiceManifestName,omitempty"`
	IsServiceGroup         *bool                              `json:"IsServiceGroup,omitempty"`
}

// ServiceTypeServiceTypeDescription the description of the service type
type ServiceTypeServiceTypeDescription struct {
	IsStateful           *bool   `json:"IsStateful,omitempty"`
	ServiceTypeName      *string `json:"ServiceTypeName,omitempty"`
	PlacementConstraints *string `json:"PlacementConstraints,omitempty"`
	HasPersistedState    *bool   `json:"HasPersistedState,omitempty"`
}

// StartApplicationUpgrade the description of the start application upgrade
type StartApplicationUpgrade struct {
	Name                         *string                                  `json:"Name,omitempty"`
	TargetApplicationTypeVersion *string                                  `json:"TargetApplicationTypeVersion,omitempty"`
	Parameters                   *[]StartApplicationUpgradeParametersItem `json:"Parameters,omitempty"`
	// UpgradeKind - Possible values include: 'UpgradeKindInvalid', 'UpgradeKindRolling'
	UpgradeKind UpgradeKind `json:"UpgradeKind,omitempty"`
	// RollingUpgradeMode - Possible values include: 'RollingUpgradeMode2Invalid', 'RollingUpgradeMode2UnmonitoredAuto', 'RollingUpgradeMode2UnmonitoredManual', 'RollingUpgradeMode2Monitored'
	RollingUpgradeMode                     RollingUpgradeMode2      `json:"RollingUpgradeMode,omitempty"`
	UpgradeReplicaSetCheckTimeoutInSeconds *int32                   `json:"UpgradeReplicaSetCheckTimeoutInSeconds,omitempty"`
	ForceRestart                           *bool                    `json:"ForceRestart,omitempty"`
	MonitoringPolicy                       *MonitoringPolicy        `json:"MonitoringPolicy,omitempty"`
	ApplicationHealthPolicy                *ApplicationHealthPolicy `json:"ApplicationHealthPolicy,omitempty"`
}

// StartApplicationUpgradeParametersItem the parameters
type StartApplicationUpgradeParametersItem struct {
	Key   *string `json:"Key,omitempty"`
	Value *string `json:"Value,omitempty"`
}

// StartClusterUpgrade the description of the start cluster upgrade
type StartClusterUpgrade struct {
	// ConfigVersion - The version of the config
	ConfigVersion *string `json:"ConfigVersion,omitempty"`
	// CodeVersion - The version of the code
	CodeVersion *string `json:"CodeVersion,omitempty"`
	// UpgradeKind - The kind of the upgrade
	UpgradeKind *string `json:"UpgradeKind,omitempty"`
	// RollingUpgradeMode - The mode of the rolling upgrade. Possible values include: 'RollingUpgradeModeInvalid', 'RollingUpgradeModeUnmonitoredAuto', 'RollingUpgradeModeUnmonitoredManual', 'RollingUpgradeModeMonitored'
	RollingUpgradeMode RollingUpgradeMode `json:"RollingUpgradeMode,omitempty"`
	// UpgradeReplicaSetCheckTimeoutInSeconds - The seconds of the upgrade replica set check timeout
	UpgradeReplicaSetCheckTimeoutInSeconds *int32 `json:"UpgradeReplicaSetCheckTimeoutInSeconds,omitempty"`
	// ForceRestart - The flag of the force restart
	ForceRestart *bool `json:"ForceRestart,omitempty"`
	// EnableDeltaHealthEvaluation - The evaluation of the enable delta health
	EnableDeltaHealthEvaluation *bool `json:"EnableDeltaHealthEvaluation,omitempty"`
	// MonitoringPolicy - The policy of the monitoring
	MonitoringPolicy interface{} `json:"MonitoringPolicy,omitempty"`
	// ClusterUpgradeHealthPolicy - The policy of the cluster upgrade health
	ClusterUpgradeHealthPolicy *ClusterUpgradeHealthPolicy `json:"ClusterUpgradeHealthPolicy,omitempty"`
	// ApplicationHealthPolicyMap - The map of the application health policy
	ApplicationHealthPolicyMap *ApplicationHealthPolicyMap `json:"ApplicationHealthPolicyMap,omitempty"`
}

// StatefulCreateServiceDescription the description of the stateful create service
type StatefulCreateServiceDescription struct {
	TargetReplicaSetSize              *int32 `json:"TargetReplicaSetSize,omitempty"`
	MinReplicaSetSize                 *int32 `json:"MinReplicaSetSize,omitempty"`
	HasPersistedState                 *bool  `json:"HasPersistedState,omitempty"`
	ReplicaRestartWaitDurationSeconds *int32 `json:"ReplicaRestartWaitDurationSeconds,omitempty"`
	QuorumLossWaitDurationSeconds     *int32 `json:"QuorumLossWaitDurationSeconds,omitempty"`
	StandByReplicaKeepDurationSeconds *int32 `json:"StandByReplicaKeepDurationSeconds,omitempty"`
	// DefaultMoveCost - Possible values include: 'DefaultMoveCost3Zero', 'DefaultMoveCost3Low', 'DefaultMoveCost3Medium', 'DefaultMoveCost3High'
	DefaultMoveCost            DefaultMoveCost3               `json:"DefaultMoveCost,omitempty"`
	IsDefaultMoveCostSpecified *bool                          `json:"IsDefaultMoveCostSpecified,omitempty"`
	ApplicationName            *string                        `json:"ApplicationName,omitempty"`
	ServiceName                *string                        `json:"ServiceName,omitempty"`
	ServiceTypeName            *string                        `json:"ServiceTypeName,omitempty"`
	PartitionDescription       *PartitionDescription          `json:"PartitionDescription,omitempty"`
	PlacementConstraints       *string                        `json:"PlacementConstraints,omitempty"`
	CorrelationScheme          *ServiceCorrelationDescription `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics         *ServiceCorrelationDescription `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies   *ServiceCorrelationDescription `json:"ServicePlacementPolicies,omitempty"`
	Flags                      *int32                         `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindCreateServiceDescription', 'ServiceKindStateless1', 'ServiceKindStateful1'
	ServiceKind ServiceKindBasicCreateServiceDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatefulCreateServiceDescription.
func (scsd StatefulCreateServiceDescription) MarshalJSON() ([]byte, error) {
	scsd.ServiceKind = ServiceKindStateful1
	objectMap := make(map[string]interface{})
	if scsd.TargetReplicaSetSize != nil {
		objectMap["TargetReplicaSetSize"] = scsd.TargetReplicaSetSize
	}
	if scsd.MinReplicaSetSize != nil {
		objectMap["MinReplicaSetSize"] = scsd.MinReplicaSetSize
	}
	if scsd.HasPersistedState != nil {
		objectMap["HasPersistedState"] = scsd.HasPersistedState
	}
	if scsd.ReplicaRestartWaitDurationSeconds != nil {
		objectMap["ReplicaRestartWaitDurationSeconds"] = scsd.ReplicaRestartWaitDurationSeconds
	}
	if scsd.QuorumLossWaitDurationSeconds != nil {
		objectMap["QuorumLossWaitDurationSeconds"] = scsd.QuorumLossWaitDurationSeconds
	}
	if scsd.StandByReplicaKeepDurationSeconds != nil {
		objectMap["StandByReplicaKeepDurationSeconds"] = scsd.StandByReplicaKeepDurationSeconds
	}
	if scsd.DefaultMoveCost != "" {
		objectMap["DefaultMoveCost"] = scsd.DefaultMoveCost
	}
	if scsd.IsDefaultMoveCostSpecified != nil {
		objectMap["IsDefaultMoveCostSpecified"] = scsd.IsDefaultMoveCostSpecified
	}
	if scsd.ApplicationName != nil {
		objectMap["ApplicationName"] = scsd.ApplicationName
	}
	if scsd.ServiceName != nil {
		objectMap["ServiceName"] = scsd.ServiceName
	}
	if scsd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = scsd.ServiceTypeName
	}
	if scsd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = scsd.PartitionDescription
	}
	if scsd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = scsd.PlacementConstraints
	}
	if scsd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = scsd.CorrelationScheme
	}
	if scsd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = scsd.ServiceLoadMetrics
	}
	if scsd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = scsd.ServicePlacementPolicies
	}
	if scsd.Flags != nil {
		objectMap["Flags"] = scsd.Flags
	}
	if scsd.ServiceKind != "" {
		objectMap["ServiceKind"] = scsd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessCreateServiceDescription is the BasicCreateServiceDescription implementation for StatefulCreateServiceDescription.
func (scsd StatefulCreateServiceDescription) AsStatelessCreateServiceDescription() (*StatelessCreateServiceDescription, bool) {
	return nil, false
}

// AsStatefulCreateServiceDescription is the BasicCreateServiceDescription implementation for StatefulCreateServiceDescription.
func (scsd StatefulCreateServiceDescription) AsStatefulCreateServiceDescription() (*StatefulCreateServiceDescription, bool) {
	return &scsd, true
}

// AsCreateServiceDescription is the BasicCreateServiceDescription implementation for StatefulCreateServiceDescription.
func (scsd StatefulCreateServiceDescription) AsCreateServiceDescription() (*CreateServiceDescription, bool) {
	return nil, false
}

// AsBasicCreateServiceDescription is the BasicCreateServiceDescription implementation for StatefulCreateServiceDescription.
func (scsd StatefulCreateServiceDescription) AsBasicCreateServiceDescription() (BasicCreateServiceDescription, bool) {
	return &scsd, true
}

// StatefulCreateServiceGroupDescription the description of the stateful create service group
type StatefulCreateServiceGroupDescription struct {
	TargetReplicaSetSize              *int32 `json:"TargetReplicaSetSize,omitempty"`
	MinReplicaSetSize                 *int32 `json:"MinReplicaSetSize,omitempty"`
	HasPersistedState                 *bool  `json:"HasPersistedState,omitempty"`
	ReplicaRestartWaitDurationSeconds *int32 `json:"ReplicaRestartWaitDurationSeconds,omitempty"`
	QuorumLossWaitDurationSeconds     *int32 `json:"QuorumLossWaitDurationSeconds,omitempty"`
	StandByReplicaKeepDurationSeconds *int32 `json:"StandByReplicaKeepDurationSeconds,omitempty"`
	// DefaultMoveCost - Possible values include: 'DefaultMoveCost1Zero', 'DefaultMoveCost1Low', 'DefaultMoveCost1Medium', 'DefaultMoveCost1High'
	DefaultMoveCost               DefaultMoveCost1                 `json:"DefaultMoveCost,omitempty"`
	IsDefaultMoveCostSpecified    *bool                            `json:"IsDefaultMoveCostSpecified,omitempty"`
	ApplicationName               *string                          `json:"ApplicationName,omitempty"`
	ServiceName                   *string                          `json:"ServiceName,omitempty"`
	ServiceTypeName               *string                          `json:"ServiceTypeName,omitempty"`
	PartitionDescription          *PartitionDescription            `json:"PartitionDescription,omitempty"`
	PlacementConstraints          *string                          `json:"PlacementConstraints,omitempty"`
	CorrelationScheme             *ServiceCorrelationDescription   `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics            *ServiceCorrelationDescription   `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies      *ServiceCorrelationDescription   `json:"ServicePlacementPolicies,omitempty"`
	Flags                         *int32                           `json:"Flags,omitempty"`
	ServiceGroupMemberDescription *[]ServiceGroupMemberDescription `json:"ServiceGroupMemberDescription,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicCreateServiceGroupDescriptionServiceKindCreateServiceGroupDescription', 'ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateless', 'ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicCreateServiceGroupDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatefulCreateServiceGroupDescription.
func (scsgd StatefulCreateServiceGroupDescription) MarshalJSON() ([]byte, error) {
	scsgd.ServiceKind = ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateful
	objectMap := make(map[string]interface{})
	if scsgd.TargetReplicaSetSize != nil {
		objectMap["TargetReplicaSetSize"] = scsgd.TargetReplicaSetSize
	}
	if scsgd.MinReplicaSetSize != nil {
		objectMap["MinReplicaSetSize"] = scsgd.MinReplicaSetSize
	}
	if scsgd.HasPersistedState != nil {
		objectMap["HasPersistedState"] = scsgd.HasPersistedState
	}
	if scsgd.ReplicaRestartWaitDurationSeconds != nil {
		objectMap["ReplicaRestartWaitDurationSeconds"] = scsgd.ReplicaRestartWaitDurationSeconds
	}
	if scsgd.QuorumLossWaitDurationSeconds != nil {
		objectMap["QuorumLossWaitDurationSeconds"] = scsgd.QuorumLossWaitDurationSeconds
	}
	if scsgd.StandByReplicaKeepDurationSeconds != nil {
		objectMap["StandByReplicaKeepDurationSeconds"] = scsgd.StandByReplicaKeepDurationSeconds
	}
	if scsgd.DefaultMoveCost != "" {
		objectMap["DefaultMoveCost"] = scsgd.DefaultMoveCost
	}
	if scsgd.IsDefaultMoveCostSpecified != nil {
		objectMap["IsDefaultMoveCostSpecified"] = scsgd.IsDefaultMoveCostSpecified
	}
	if scsgd.ApplicationName != nil {
		objectMap["ApplicationName"] = scsgd.ApplicationName
	}
	if scsgd.ServiceName != nil {
		objectMap["ServiceName"] = scsgd.ServiceName
	}
	if scsgd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = scsgd.ServiceTypeName
	}
	if scsgd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = scsgd.PartitionDescription
	}
	if scsgd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = scsgd.PlacementConstraints
	}
	if scsgd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = scsgd.CorrelationScheme
	}
	if scsgd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = scsgd.ServiceLoadMetrics
	}
	if scsgd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = scsgd.ServicePlacementPolicies
	}
	if scsgd.Flags != nil {
		objectMap["Flags"] = scsgd.Flags
	}
	if scsgd.ServiceGroupMemberDescription != nil {
		objectMap["ServiceGroupMemberDescription"] = scsgd.ServiceGroupMemberDescription
	}
	if scsgd.ServiceKind != "" {
		objectMap["ServiceKind"] = scsgd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for StatefulCreateServiceGroupDescription.
func (scsgd StatefulCreateServiceGroupDescription) AsStatelessCreateServiceGroupDescription() (*StatelessCreateServiceGroupDescription, bool) {
	return nil, false
}

// AsStatefulCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for StatefulCreateServiceGroupDescription.
func (scsgd StatefulCreateServiceGroupDescription) AsStatefulCreateServiceGroupDescription() (*StatefulCreateServiceGroupDescription, bool) {
	return &scsgd, true
}

// AsCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for StatefulCreateServiceGroupDescription.
func (scsgd StatefulCreateServiceGroupDescription) AsCreateServiceGroupDescription() (*CreateServiceGroupDescription, bool) {
	return nil, false
}

// AsBasicCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for StatefulCreateServiceGroupDescription.
func (scsgd StatefulCreateServiceGroupDescription) AsBasicCreateServiceGroupDescription() (BasicCreateServiceGroupDescription, bool) {
	return &scsgd, true
}

// StatefulServiceDescription the description of the stateful service
type StatefulServiceDescription struct {
	TargetReplicaSetSize              *int32 `json:"TargetReplicaSetSize,omitempty"`
	MinReplicaSetSize                 *int32 `json:"MinReplicaSetSize,omitempty"`
	HasPersistedState                 *bool  `json:"HasPersistedState,omitempty"`
	ReplicaRestartWaitDurationSeconds *int32 `json:"ReplicaRestartWaitDurationSeconds,omitempty"`
	QuorumLossWaitDurationSeconds     *int32 `json:"QuorumLossWaitDurationSeconds,omitempty"`
	StandByReplicaKeepDurationSeconds *int32 `json:"StandByReplicaKeepDurationSeconds,omitempty"`
	// DefaultMoveCost - Possible values include: 'DefaultMoveCost2Zero', 'DefaultMoveCost2Low', 'DefaultMoveCost2Medium', 'DefaultMoveCost2High'
	DefaultMoveCost            DefaultMoveCost2               `json:"DefaultMoveCost,omitempty"`
	IsDefaultMoveCostSpecified *bool                          `json:"IsDefaultMoveCostSpecified,omitempty"`
	ApplicationName            *string                        `json:"ApplicationName,omitempty"`
	ServiceName                *string                        `json:"ServiceName,omitempty"`
	ServiceTypeName            *string                        `json:"ServiceTypeName,omitempty"`
	PartitionDescription       *PartitionDescription          `json:"PartitionDescription,omitempty"`
	PlacementConstraints       *string                        `json:"PlacementConstraints,omitempty"`
	CorrelationScheme          *ServiceCorrelationDescription `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics         *ServiceCorrelationDescription `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies   *ServiceCorrelationDescription `json:"ServicePlacementPolicies,omitempty"`
	Flags                      *int32                         `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicServiceDescriptionServiceKindServiceDescription', 'ServiceKindBasicServiceDescriptionServiceKindStateless', 'ServiceKindBasicServiceDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicServiceDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatefulServiceDescription.
func (ssd StatefulServiceDescription) MarshalJSON() ([]byte, error) {
	ssd.ServiceKind = ServiceKindBasicServiceDescriptionServiceKindStateful
	objectMap := make(map[string]interface{})
	if ssd.TargetReplicaSetSize != nil {
		objectMap["TargetReplicaSetSize"] = ssd.TargetReplicaSetSize
	}
	if ssd.MinReplicaSetSize != nil {
		objectMap["MinReplicaSetSize"] = ssd.MinReplicaSetSize
	}
	if ssd.HasPersistedState != nil {
		objectMap["HasPersistedState"] = ssd.HasPersistedState
	}
	if ssd.ReplicaRestartWaitDurationSeconds != nil {
		objectMap["ReplicaRestartWaitDurationSeconds"] = ssd.ReplicaRestartWaitDurationSeconds
	}
	if ssd.QuorumLossWaitDurationSeconds != nil {
		objectMap["QuorumLossWaitDurationSeconds"] = ssd.QuorumLossWaitDurationSeconds
	}
	if ssd.StandByReplicaKeepDurationSeconds != nil {
		objectMap["StandByReplicaKeepDurationSeconds"] = ssd.StandByReplicaKeepDurationSeconds
	}
	if ssd.DefaultMoveCost != "" {
		objectMap["DefaultMoveCost"] = ssd.DefaultMoveCost
	}
	if ssd.IsDefaultMoveCostSpecified != nil {
		objectMap["IsDefaultMoveCostSpecified"] = ssd.IsDefaultMoveCostSpecified
	}
	if ssd.ApplicationName != nil {
		objectMap["ApplicationName"] = ssd.ApplicationName
	}
	if ssd.ServiceName != nil {
		objectMap["ServiceName"] = ssd.ServiceName
	}
	if ssd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = ssd.ServiceTypeName
	}
	if ssd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = ssd.PartitionDescription
	}
	if ssd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = ssd.PlacementConstraints
	}
	if ssd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = ssd.CorrelationScheme
	}
	if ssd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = ssd.ServiceLoadMetrics
	}
	if ssd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = ssd.ServicePlacementPolicies
	}
	if ssd.Flags != nil {
		objectMap["Flags"] = ssd.Flags
	}
	if ssd.ServiceKind != "" {
		objectMap["ServiceKind"] = ssd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessServiceDescription is the BasicServiceDescription implementation for StatefulServiceDescription.
func (ssd StatefulServiceDescription) AsStatelessServiceDescription() (*StatelessServiceDescription, bool) {
	return nil, false
}

// AsStatefulServiceDescription is the BasicServiceDescription implementation for StatefulServiceDescription.
func (ssd StatefulServiceDescription) AsStatefulServiceDescription() (*StatefulServiceDescription, bool) {
	return &ssd, true
}

// AsServiceDescription is the BasicServiceDescription implementation for StatefulServiceDescription.
func (ssd StatefulServiceDescription) AsServiceDescription() (*ServiceDescription, bool) {
	return nil, false
}

// AsBasicServiceDescription is the BasicServiceDescription implementation for StatefulServiceDescription.
func (ssd StatefulServiceDescription) AsBasicServiceDescription() (BasicServiceDescription, bool) {
	return &ssd, true
}

// StatefulServiceGroupDescription the description of the stateful service group
type StatefulServiceGroupDescription struct {
	TargetReplicaSetSize              *int32 `json:"TargetReplicaSetSize,omitempty"`
	MinReplicaSetSize                 *int32 `json:"MinReplicaSetSize,omitempty"`
	HasPersistedState                 *bool  `json:"HasPersistedState,omitempty"`
	ReplicaRestartWaitDurationSeconds *int32 `json:"ReplicaRestartWaitDurationSeconds,omitempty"`
	QuorumLossWaitDurationSeconds     *int32 `json:"QuorumLossWaitDurationSeconds,omitempty"`
	StandByReplicaKeepDurationSeconds *int32 `json:"StandByReplicaKeepDurationSeconds,omitempty"`
	// DefaultMoveCost - Possible values include: 'Zero', 'Low', 'Medium', 'High'
	DefaultMoveCost               DefaultMoveCost                  `json:"DefaultMoveCost,omitempty"`
	IsDefaultMoveCostSpecified    *bool                            `json:"IsDefaultMoveCostSpecified,omitempty"`
	ApplicationName               *string                          `json:"ApplicationName,omitempty"`
	ServiceName                   *string                          `json:"ServiceName,omitempty"`
	ServiceTypeName               *string                          `json:"ServiceTypeName,omitempty"`
	PartitionDescription          *PartitionDescription            `json:"PartitionDescription,omitempty"`
	PlacementConstraints          *string                          `json:"PlacementConstraints,omitempty"`
	CorrelationScheme             *ServiceCorrelationDescription   `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics            *ServiceCorrelationDescription   `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies      *ServiceCorrelationDescription   `json:"ServicePlacementPolicies,omitempty"`
	Flags                         *int32                           `json:"Flags,omitempty"`
	ServiceGroupMemberDescription *[]ServiceGroupMemberDescription `json:"ServiceGroupMemberDescription,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicServiceGroupDescriptionServiceKindServiceGroupDescription', 'ServiceKindBasicServiceGroupDescriptionServiceKindStateless', 'ServiceKindBasicServiceGroupDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicServiceGroupDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatefulServiceGroupDescription.
func (ssgd StatefulServiceGroupDescription) MarshalJSON() ([]byte, error) {
	ssgd.ServiceKind = ServiceKindBasicServiceGroupDescriptionServiceKindStateful
	objectMap := make(map[string]interface{})
	if ssgd.TargetReplicaSetSize != nil {
		objectMap["TargetReplicaSetSize"] = ssgd.TargetReplicaSetSize
	}
	if ssgd.MinReplicaSetSize != nil {
		objectMap["MinReplicaSetSize"] = ssgd.MinReplicaSetSize
	}
	if ssgd.HasPersistedState != nil {
		objectMap["HasPersistedState"] = ssgd.HasPersistedState
	}
	if ssgd.ReplicaRestartWaitDurationSeconds != nil {
		objectMap["ReplicaRestartWaitDurationSeconds"] = ssgd.ReplicaRestartWaitDurationSeconds
	}
	if ssgd.QuorumLossWaitDurationSeconds != nil {
		objectMap["QuorumLossWaitDurationSeconds"] = ssgd.QuorumLossWaitDurationSeconds
	}
	if ssgd.StandByReplicaKeepDurationSeconds != nil {
		objectMap["StandByReplicaKeepDurationSeconds"] = ssgd.StandByReplicaKeepDurationSeconds
	}
	if ssgd.DefaultMoveCost != "" {
		objectMap["DefaultMoveCost"] = ssgd.DefaultMoveCost
	}
	if ssgd.IsDefaultMoveCostSpecified != nil {
		objectMap["IsDefaultMoveCostSpecified"] = ssgd.IsDefaultMoveCostSpecified
	}
	if ssgd.ApplicationName != nil {
		objectMap["ApplicationName"] = ssgd.ApplicationName
	}
	if ssgd.ServiceName != nil {
		objectMap["ServiceName"] = ssgd.ServiceName
	}
	if ssgd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = ssgd.ServiceTypeName
	}
	if ssgd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = ssgd.PartitionDescription
	}
	if ssgd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = ssgd.PlacementConstraints
	}
	if ssgd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = ssgd.CorrelationScheme
	}
	if ssgd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = ssgd.ServiceLoadMetrics
	}
	if ssgd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = ssgd.ServicePlacementPolicies
	}
	if ssgd.Flags != nil {
		objectMap["Flags"] = ssgd.Flags
	}
	if ssgd.ServiceGroupMemberDescription != nil {
		objectMap["ServiceGroupMemberDescription"] = ssgd.ServiceGroupMemberDescription
	}
	if ssgd.ServiceKind != "" {
		objectMap["ServiceKind"] = ssgd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessServiceGroupDescription is the BasicServiceGroupDescription implementation for StatefulServiceGroupDescription.
func (ssgd StatefulServiceGroupDescription) AsStatelessServiceGroupDescription() (*StatelessServiceGroupDescription, bool) {
	return nil, false
}

// AsStatefulServiceGroupDescription is the BasicServiceGroupDescription implementation for StatefulServiceGroupDescription.
func (ssgd StatefulServiceGroupDescription) AsStatefulServiceGroupDescription() (*StatefulServiceGroupDescription, bool) {
	return &ssgd, true
}

// AsServiceGroupDescription is the BasicServiceGroupDescription implementation for StatefulServiceGroupDescription.
func (ssgd StatefulServiceGroupDescription) AsServiceGroupDescription() (*ServiceGroupDescription, bool) {
	return nil, false
}

// AsBasicServiceGroupDescription is the BasicServiceGroupDescription implementation for StatefulServiceGroupDescription.
func (ssgd StatefulServiceGroupDescription) AsBasicServiceGroupDescription() (BasicServiceGroupDescription, bool) {
	return &ssgd, true
}

// StatefulUpdateServiceDescription the description of the stateful update service
type StatefulUpdateServiceDescription struct {
	TargetReplicaSetSize                     *int32 `json:"TargetReplicaSetSize,omitempty"`
	MinReplicaSetSize                        *int32 `json:"MinReplicaSetSize,omitempty"`
	ReplicaRestartWaitDurationInMilliseconds *int32 `json:"ReplicaRestartWaitDurationInMilliseconds,omitempty"`
	QuorumLossWaitDurationInMilliseconds     *int32 `json:"QuorumLossWaitDurationInMilliseconds,omitempty"`
	StandByReplicaKeepDurationInMilliseconds *int32 `json:"StandByReplicaKeepDurationInMilliseconds,omitempty"`
	Flags                                    *int32 `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicUpdateServiceDescriptionServiceKindUpdateServiceDescription', 'ServiceKindBasicUpdateServiceDescriptionServiceKindStateless', 'ServiceKindBasicUpdateServiceDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicUpdateServiceDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatefulUpdateServiceDescription.
func (susd StatefulUpdateServiceDescription) MarshalJSON() ([]byte, error) {
	susd.ServiceKind = ServiceKindBasicUpdateServiceDescriptionServiceKindStateful
	objectMap := make(map[string]interface{})
	if susd.TargetReplicaSetSize != nil {
		objectMap["TargetReplicaSetSize"] = susd.TargetReplicaSetSize
	}
	if susd.MinReplicaSetSize != nil {
		objectMap["MinReplicaSetSize"] = susd.MinReplicaSetSize
	}
	if susd.ReplicaRestartWaitDurationInMilliseconds != nil {
		objectMap["ReplicaRestartWaitDurationInMilliseconds"] = susd.ReplicaRestartWaitDurationInMilliseconds
	}
	if susd.QuorumLossWaitDurationInMilliseconds != nil {
		objectMap["QuorumLossWaitDurationInMilliseconds"] = susd.QuorumLossWaitDurationInMilliseconds
	}
	if susd.StandByReplicaKeepDurationInMilliseconds != nil {
		objectMap["StandByReplicaKeepDurationInMilliseconds"] = susd.StandByReplicaKeepDurationInMilliseconds
	}
	if susd.Flags != nil {
		objectMap["Flags"] = susd.Flags
	}
	if susd.ServiceKind != "" {
		objectMap["ServiceKind"] = susd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessUpdateServiceDescription is the BasicUpdateServiceDescription implementation for StatefulUpdateServiceDescription.
func (susd StatefulUpdateServiceDescription) AsStatelessUpdateServiceDescription() (*StatelessUpdateServiceDescription, bool) {
	return nil, false
}

// AsStatefulUpdateServiceDescription is the BasicUpdateServiceDescription implementation for StatefulUpdateServiceDescription.
func (susd StatefulUpdateServiceDescription) AsStatefulUpdateServiceDescription() (*StatefulUpdateServiceDescription, bool) {
	return &susd, true
}

// AsUpdateServiceDescription is the BasicUpdateServiceDescription implementation for StatefulUpdateServiceDescription.
func (susd StatefulUpdateServiceDescription) AsUpdateServiceDescription() (*UpdateServiceDescription, bool) {
	return nil, false
}

// AsBasicUpdateServiceDescription is the BasicUpdateServiceDescription implementation for StatefulUpdateServiceDescription.
func (susd StatefulUpdateServiceDescription) AsBasicUpdateServiceDescription() (BasicUpdateServiceDescription, bool) {
	return &susd, true
}

// StatefulUpdateServiceGroupDescription the description of the stateful update service group
type StatefulUpdateServiceGroupDescription struct {
	TargetReplicaSetSize                     *int32 `json:"TargetReplicaSetSize,omitempty"`
	MinReplicaSetSize                        *int32 `json:"MinReplicaSetSize,omitempty"`
	ReplicaRestartWaitDurationInMilliseconds *int32 `json:"ReplicaRestartWaitDurationInMilliseconds,omitempty"`
	QuorumLossWaitDurationInMilliseconds     *int32 `json:"QuorumLossWaitDurationInMilliseconds,omitempty"`
	StandByReplicaKeepDurationInMilliseconds *int32 `json:"StandByReplicaKeepDurationInMilliseconds,omitempty"`
	Flags                                    *int32 `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicUpdateServiceGroupDescriptionServiceKindUpdateServiceGroupDescription', 'ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateless', 'ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicUpdateServiceGroupDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatefulUpdateServiceGroupDescription.
func (susgd StatefulUpdateServiceGroupDescription) MarshalJSON() ([]byte, error) {
	susgd.ServiceKind = ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateful
	objectMap := make(map[string]interface{})
	if susgd.TargetReplicaSetSize != nil {
		objectMap["TargetReplicaSetSize"] = susgd.TargetReplicaSetSize
	}
	if susgd.MinReplicaSetSize != nil {
		objectMap["MinReplicaSetSize"] = susgd.MinReplicaSetSize
	}
	if susgd.ReplicaRestartWaitDurationInMilliseconds != nil {
		objectMap["ReplicaRestartWaitDurationInMilliseconds"] = susgd.ReplicaRestartWaitDurationInMilliseconds
	}
	if susgd.QuorumLossWaitDurationInMilliseconds != nil {
		objectMap["QuorumLossWaitDurationInMilliseconds"] = susgd.QuorumLossWaitDurationInMilliseconds
	}
	if susgd.StandByReplicaKeepDurationInMilliseconds != nil {
		objectMap["StandByReplicaKeepDurationInMilliseconds"] = susgd.StandByReplicaKeepDurationInMilliseconds
	}
	if susgd.Flags != nil {
		objectMap["Flags"] = susgd.Flags
	}
	if susgd.ServiceKind != "" {
		objectMap["ServiceKind"] = susgd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for StatefulUpdateServiceGroupDescription.
func (susgd StatefulUpdateServiceGroupDescription) AsStatelessUpdateServiceGroupDescription() (*StatelessUpdateServiceGroupDescription, bool) {
	return nil, false
}

// AsStatefulUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for StatefulUpdateServiceGroupDescription.
func (susgd StatefulUpdateServiceGroupDescription) AsStatefulUpdateServiceGroupDescription() (*StatefulUpdateServiceGroupDescription, bool) {
	return &susgd, true
}

// AsUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for StatefulUpdateServiceGroupDescription.
func (susgd StatefulUpdateServiceGroupDescription) AsUpdateServiceGroupDescription() (*UpdateServiceGroupDescription, bool) {
	return nil, false
}

// AsBasicUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for StatefulUpdateServiceGroupDescription.
func (susgd StatefulUpdateServiceGroupDescription) AsBasicUpdateServiceGroupDescription() (BasicUpdateServiceGroupDescription, bool) {
	return &susgd, true
}

// StatelessCreateServiceDescription the description of the stateless create service
type StatelessCreateServiceDescription struct {
	InstanceCount            *int32                         `json:"InstanceCount,omitempty"`
	ApplicationName          *string                        `json:"ApplicationName,omitempty"`
	ServiceName              *string                        `json:"ServiceName,omitempty"`
	ServiceTypeName          *string                        `json:"ServiceTypeName,omitempty"`
	PartitionDescription     *PartitionDescription          `json:"PartitionDescription,omitempty"`
	PlacementConstraints     *string                        `json:"PlacementConstraints,omitempty"`
	CorrelationScheme        *ServiceCorrelationDescription `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics       *ServiceCorrelationDescription `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies *ServiceCorrelationDescription `json:"ServicePlacementPolicies,omitempty"`
	Flags                    *int32                         `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindCreateServiceDescription', 'ServiceKindStateless1', 'ServiceKindStateful1'
	ServiceKind ServiceKindBasicCreateServiceDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatelessCreateServiceDescription.
func (scsd StatelessCreateServiceDescription) MarshalJSON() ([]byte, error) {
	scsd.ServiceKind = ServiceKindStateless1
	objectMap := make(map[string]interface{})
	if scsd.InstanceCount != nil {
		objectMap["InstanceCount"] = scsd.InstanceCount
	}
	if scsd.ApplicationName != nil {
		objectMap["ApplicationName"] = scsd.ApplicationName
	}
	if scsd.ServiceName != nil {
		objectMap["ServiceName"] = scsd.ServiceName
	}
	if scsd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = scsd.ServiceTypeName
	}
	if scsd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = scsd.PartitionDescription
	}
	if scsd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = scsd.PlacementConstraints
	}
	if scsd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = scsd.CorrelationScheme
	}
	if scsd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = scsd.ServiceLoadMetrics
	}
	if scsd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = scsd.ServicePlacementPolicies
	}
	if scsd.Flags != nil {
		objectMap["Flags"] = scsd.Flags
	}
	if scsd.ServiceKind != "" {
		objectMap["ServiceKind"] = scsd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessCreateServiceDescription is the BasicCreateServiceDescription implementation for StatelessCreateServiceDescription.
func (scsd StatelessCreateServiceDescription) AsStatelessCreateServiceDescription() (*StatelessCreateServiceDescription, bool) {
	return &scsd, true
}

// AsStatefulCreateServiceDescription is the BasicCreateServiceDescription implementation for StatelessCreateServiceDescription.
func (scsd StatelessCreateServiceDescription) AsStatefulCreateServiceDescription() (*StatefulCreateServiceDescription, bool) {
	return nil, false
}

// AsCreateServiceDescription is the BasicCreateServiceDescription implementation for StatelessCreateServiceDescription.
func (scsd StatelessCreateServiceDescription) AsCreateServiceDescription() (*CreateServiceDescription, bool) {
	return nil, false
}

// AsBasicCreateServiceDescription is the BasicCreateServiceDescription implementation for StatelessCreateServiceDescription.
func (scsd StatelessCreateServiceDescription) AsBasicCreateServiceDescription() (BasicCreateServiceDescription, bool) {
	return &scsd, true
}

// StatelessCreateServiceGroupDescription the description of the stateless create service group
type StatelessCreateServiceGroupDescription struct {
	InstanceCount                 *int32                           `json:"InstanceCount,omitempty"`
	ApplicationName               *string                          `json:"ApplicationName,omitempty"`
	ServiceName                   *string                          `json:"ServiceName,omitempty"`
	ServiceTypeName               *string                          `json:"ServiceTypeName,omitempty"`
	PartitionDescription          *PartitionDescription            `json:"PartitionDescription,omitempty"`
	PlacementConstraints          *string                          `json:"PlacementConstraints,omitempty"`
	CorrelationScheme             *ServiceCorrelationDescription   `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics            *ServiceCorrelationDescription   `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies      *ServiceCorrelationDescription   `json:"ServicePlacementPolicies,omitempty"`
	Flags                         *int32                           `json:"Flags,omitempty"`
	ServiceGroupMemberDescription *[]ServiceGroupMemberDescription `json:"ServiceGroupMemberDescription,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicCreateServiceGroupDescriptionServiceKindCreateServiceGroupDescription', 'ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateless', 'ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicCreateServiceGroupDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatelessCreateServiceGroupDescription.
func (scsgd StatelessCreateServiceGroupDescription) MarshalJSON() ([]byte, error) {
	scsgd.ServiceKind = ServiceKindBasicCreateServiceGroupDescriptionServiceKindStateless
	objectMap := make(map[string]interface{})
	if scsgd.InstanceCount != nil {
		objectMap["InstanceCount"] = scsgd.InstanceCount
	}
	if scsgd.ApplicationName != nil {
		objectMap["ApplicationName"] = scsgd.ApplicationName
	}
	if scsgd.ServiceName != nil {
		objectMap["ServiceName"] = scsgd.ServiceName
	}
	if scsgd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = scsgd.ServiceTypeName
	}
	if scsgd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = scsgd.PartitionDescription
	}
	if scsgd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = scsgd.PlacementConstraints
	}
	if scsgd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = scsgd.CorrelationScheme
	}
	if scsgd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = scsgd.ServiceLoadMetrics
	}
	if scsgd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = scsgd.ServicePlacementPolicies
	}
	if scsgd.Flags != nil {
		objectMap["Flags"] = scsgd.Flags
	}
	if scsgd.ServiceGroupMemberDescription != nil {
		objectMap["ServiceGroupMemberDescription"] = scsgd.ServiceGroupMemberDescription
	}
	if scsgd.ServiceKind != "" {
		objectMap["ServiceKind"] = scsgd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for StatelessCreateServiceGroupDescription.
func (scsgd StatelessCreateServiceGroupDescription) AsStatelessCreateServiceGroupDescription() (*StatelessCreateServiceGroupDescription, bool) {
	return &scsgd, true
}

// AsStatefulCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for StatelessCreateServiceGroupDescription.
func (scsgd StatelessCreateServiceGroupDescription) AsStatefulCreateServiceGroupDescription() (*StatefulCreateServiceGroupDescription, bool) {
	return nil, false
}

// AsCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for StatelessCreateServiceGroupDescription.
func (scsgd StatelessCreateServiceGroupDescription) AsCreateServiceGroupDescription() (*CreateServiceGroupDescription, bool) {
	return nil, false
}

// AsBasicCreateServiceGroupDescription is the BasicCreateServiceGroupDescription implementation for StatelessCreateServiceGroupDescription.
func (scsgd StatelessCreateServiceGroupDescription) AsBasicCreateServiceGroupDescription() (BasicCreateServiceGroupDescription, bool) {
	return &scsgd, true
}

// StatelessServiceDescription the description of the stateless service
type StatelessServiceDescription struct {
	InstanceCount            *int32                         `json:"InstanceCount,omitempty"`
	ApplicationName          *string                        `json:"ApplicationName,omitempty"`
	ServiceName              *string                        `json:"ServiceName,omitempty"`
	ServiceTypeName          *string                        `json:"ServiceTypeName,omitempty"`
	PartitionDescription     *PartitionDescription          `json:"PartitionDescription,omitempty"`
	PlacementConstraints     *string                        `json:"PlacementConstraints,omitempty"`
	CorrelationScheme        *ServiceCorrelationDescription `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics       *ServiceCorrelationDescription `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies *ServiceCorrelationDescription `json:"ServicePlacementPolicies,omitempty"`
	Flags                    *int32                         `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicServiceDescriptionServiceKindServiceDescription', 'ServiceKindBasicServiceDescriptionServiceKindStateless', 'ServiceKindBasicServiceDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicServiceDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatelessServiceDescription.
func (ssd StatelessServiceDescription) MarshalJSON() ([]byte, error) {
	ssd.ServiceKind = ServiceKindBasicServiceDescriptionServiceKindStateless
	objectMap := make(map[string]interface{})
	if ssd.InstanceCount != nil {
		objectMap["InstanceCount"] = ssd.InstanceCount
	}
	if ssd.ApplicationName != nil {
		objectMap["ApplicationName"] = ssd.ApplicationName
	}
	if ssd.ServiceName != nil {
		objectMap["ServiceName"] = ssd.ServiceName
	}
	if ssd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = ssd.ServiceTypeName
	}
	if ssd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = ssd.PartitionDescription
	}
	if ssd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = ssd.PlacementConstraints
	}
	if ssd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = ssd.CorrelationScheme
	}
	if ssd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = ssd.ServiceLoadMetrics
	}
	if ssd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = ssd.ServicePlacementPolicies
	}
	if ssd.Flags != nil {
		objectMap["Flags"] = ssd.Flags
	}
	if ssd.ServiceKind != "" {
		objectMap["ServiceKind"] = ssd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessServiceDescription is the BasicServiceDescription implementation for StatelessServiceDescription.
func (ssd StatelessServiceDescription) AsStatelessServiceDescription() (*StatelessServiceDescription, bool) {
	return &ssd, true
}

// AsStatefulServiceDescription is the BasicServiceDescription implementation for StatelessServiceDescription.
func (ssd StatelessServiceDescription) AsStatefulServiceDescription() (*StatefulServiceDescription, bool) {
	return nil, false
}

// AsServiceDescription is the BasicServiceDescription implementation for StatelessServiceDescription.
func (ssd StatelessServiceDescription) AsServiceDescription() (*ServiceDescription, bool) {
	return nil, false
}

// AsBasicServiceDescription is the BasicServiceDescription implementation for StatelessServiceDescription.
func (ssd StatelessServiceDescription) AsBasicServiceDescription() (BasicServiceDescription, bool) {
	return &ssd, true
}

// StatelessServiceGroupDescription the description of the stateless service group
type StatelessServiceGroupDescription struct {
	InstanceCount                 *int32                           `json:"InstanceCount,omitempty"`
	ApplicationName               *string                          `json:"ApplicationName,omitempty"`
	ServiceName                   *string                          `json:"ServiceName,omitempty"`
	ServiceTypeName               *string                          `json:"ServiceTypeName,omitempty"`
	PartitionDescription          *PartitionDescription            `json:"PartitionDescription,omitempty"`
	PlacementConstraints          *string                          `json:"PlacementConstraints,omitempty"`
	CorrelationScheme             *ServiceCorrelationDescription   `json:"CorrelationScheme,omitempty"`
	ServiceLoadMetrics            *ServiceCorrelationDescription   `json:"ServiceLoadMetrics,omitempty"`
	ServicePlacementPolicies      *ServiceCorrelationDescription   `json:"ServicePlacementPolicies,omitempty"`
	Flags                         *int32                           `json:"Flags,omitempty"`
	ServiceGroupMemberDescription *[]ServiceGroupMemberDescription `json:"ServiceGroupMemberDescription,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicServiceGroupDescriptionServiceKindServiceGroupDescription', 'ServiceKindBasicServiceGroupDescriptionServiceKindStateless', 'ServiceKindBasicServiceGroupDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicServiceGroupDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatelessServiceGroupDescription.
func (ssgd StatelessServiceGroupDescription) MarshalJSON() ([]byte, error) {
	ssgd.ServiceKind = ServiceKindBasicServiceGroupDescriptionServiceKindStateless
	objectMap := make(map[string]interface{})
	if ssgd.InstanceCount != nil {
		objectMap["InstanceCount"] = ssgd.InstanceCount
	}
	if ssgd.ApplicationName != nil {
		objectMap["ApplicationName"] = ssgd.ApplicationName
	}
	if ssgd.ServiceName != nil {
		objectMap["ServiceName"] = ssgd.ServiceName
	}
	if ssgd.ServiceTypeName != nil {
		objectMap["ServiceTypeName"] = ssgd.ServiceTypeName
	}
	if ssgd.PartitionDescription != nil {
		objectMap["PartitionDescription"] = ssgd.PartitionDescription
	}
	if ssgd.PlacementConstraints != nil {
		objectMap["PlacementConstraints"] = ssgd.PlacementConstraints
	}
	if ssgd.CorrelationScheme != nil {
		objectMap["CorrelationScheme"] = ssgd.CorrelationScheme
	}
	if ssgd.ServiceLoadMetrics != nil {
		objectMap["ServiceLoadMetrics"] = ssgd.ServiceLoadMetrics
	}
	if ssgd.ServicePlacementPolicies != nil {
		objectMap["ServicePlacementPolicies"] = ssgd.ServicePlacementPolicies
	}
	if ssgd.Flags != nil {
		objectMap["Flags"] = ssgd.Flags
	}
	if ssgd.ServiceGroupMemberDescription != nil {
		objectMap["ServiceGroupMemberDescription"] = ssgd.ServiceGroupMemberDescription
	}
	if ssgd.ServiceKind != "" {
		objectMap["ServiceKind"] = ssgd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessServiceGroupDescription is the BasicServiceGroupDescription implementation for StatelessServiceGroupDescription.
func (ssgd StatelessServiceGroupDescription) AsStatelessServiceGroupDescription() (*StatelessServiceGroupDescription, bool) {
	return &ssgd, true
}

// AsStatefulServiceGroupDescription is the BasicServiceGroupDescription implementation for StatelessServiceGroupDescription.
func (ssgd StatelessServiceGroupDescription) AsStatefulServiceGroupDescription() (*StatefulServiceGroupDescription, bool) {
	return nil, false
}

// AsServiceGroupDescription is the BasicServiceGroupDescription implementation for StatelessServiceGroupDescription.
func (ssgd StatelessServiceGroupDescription) AsServiceGroupDescription() (*ServiceGroupDescription, bool) {
	return nil, false
}

// AsBasicServiceGroupDescription is the BasicServiceGroupDescription implementation for StatelessServiceGroupDescription.
func (ssgd StatelessServiceGroupDescription) AsBasicServiceGroupDescription() (BasicServiceGroupDescription, bool) {
	return &ssgd, true
}

// StatelessUpdateServiceDescription the description of the stateless update service
type StatelessUpdateServiceDescription struct {
	InstanceCount *int32 `json:"InstanceCount,omitempty"`
	Flags         *int32 `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicUpdateServiceDescriptionServiceKindUpdateServiceDescription', 'ServiceKindBasicUpdateServiceDescriptionServiceKindStateless', 'ServiceKindBasicUpdateServiceDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicUpdateServiceDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatelessUpdateServiceDescription.
func (susd StatelessUpdateServiceDescription) MarshalJSON() ([]byte, error) {
	susd.ServiceKind = ServiceKindBasicUpdateServiceDescriptionServiceKindStateless
	objectMap := make(map[string]interface{})
	if susd.InstanceCount != nil {
		objectMap["InstanceCount"] = susd.InstanceCount
	}
	if susd.Flags != nil {
		objectMap["Flags"] = susd.Flags
	}
	if susd.ServiceKind != "" {
		objectMap["ServiceKind"] = susd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessUpdateServiceDescription is the BasicUpdateServiceDescription implementation for StatelessUpdateServiceDescription.
func (susd StatelessUpdateServiceDescription) AsStatelessUpdateServiceDescription() (*StatelessUpdateServiceDescription, bool) {
	return &susd, true
}

// AsStatefulUpdateServiceDescription is the BasicUpdateServiceDescription implementation for StatelessUpdateServiceDescription.
func (susd StatelessUpdateServiceDescription) AsStatefulUpdateServiceDescription() (*StatefulUpdateServiceDescription, bool) {
	return nil, false
}

// AsUpdateServiceDescription is the BasicUpdateServiceDescription implementation for StatelessUpdateServiceDescription.
func (susd StatelessUpdateServiceDescription) AsUpdateServiceDescription() (*UpdateServiceDescription, bool) {
	return nil, false
}

// AsBasicUpdateServiceDescription is the BasicUpdateServiceDescription implementation for StatelessUpdateServiceDescription.
func (susd StatelessUpdateServiceDescription) AsBasicUpdateServiceDescription() (BasicUpdateServiceDescription, bool) {
	return &susd, true
}

// StatelessUpdateServiceGroupDescription the description of the stateless update service group
type StatelessUpdateServiceGroupDescription struct {
	InstanceCount *int32 `json:"InstanceCount,omitempty"`
	Flags         *int32 `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicUpdateServiceGroupDescriptionServiceKindUpdateServiceGroupDescription', 'ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateless', 'ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicUpdateServiceGroupDescription `json:"ServiceKind,omitempty"`
}

// MarshalJSON is the custom marshaler for StatelessUpdateServiceGroupDescription.
func (susgd StatelessUpdateServiceGroupDescription) MarshalJSON() ([]byte, error) {
	susgd.ServiceKind = ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateless
	objectMap := make(map[string]interface{})
	if susgd.InstanceCount != nil {
		objectMap["InstanceCount"] = susgd.InstanceCount
	}
	if susgd.Flags != nil {
		objectMap["Flags"] = susgd.Flags
	}
	if susgd.ServiceKind != "" {
		objectMap["ServiceKind"] = susgd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for StatelessUpdateServiceGroupDescription.
func (susgd StatelessUpdateServiceGroupDescription) AsStatelessUpdateServiceGroupDescription() (*StatelessUpdateServiceGroupDescription, bool) {
	return &susgd, true
}

// AsStatefulUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for StatelessUpdateServiceGroupDescription.
func (susgd StatelessUpdateServiceGroupDescription) AsStatefulUpdateServiceGroupDescription() (*StatefulUpdateServiceGroupDescription, bool) {
	return nil, false
}

// AsUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for StatelessUpdateServiceGroupDescription.
func (susgd StatelessUpdateServiceGroupDescription) AsUpdateServiceGroupDescription() (*UpdateServiceGroupDescription, bool) {
	return nil, false
}

// AsBasicUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for StatelessUpdateServiceGroupDescription.
func (susgd StatelessUpdateServiceGroupDescription) AsBasicUpdateServiceGroupDescription() (BasicUpdateServiceGroupDescription, bool) {
	return &susgd, true
}

// String ...
type String struct {
	autorest.Response `json:"-"`
	Value             *string `json:"value,omitempty"`
}

// SystemApplicationHealthEvaluation the evaluation of the system application health
type SystemApplicationHealthEvaluation struct {
	UnhealthyEvaluations *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	Description          *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) MarshalJSON() ([]byte, error) {
	sahe.Kind = KindSystemApplication
	objectMap := make(map[string]interface{})
	if sahe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = sahe.UnhealthyEvaluations
	}
	if sahe.Description != nil {
		objectMap["Description"] = sahe.Description
	}
	if sahe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = sahe.AggregatedHealthState
	}
	if sahe.Kind != "" {
		objectMap["Kind"] = sahe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return &sahe, true
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for SystemApplicationHealthEvaluation.
func (sahe SystemApplicationHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &sahe, true
}

// UnhealthyEvaluation the evaluation of the unhealthy
type UnhealthyEvaluation struct {
	HealthEvaluation BasicHealthEvaluation `json:"HealthEvaluation,omitempty"`
}

// UnmarshalJSON is the custom unmarshaler for UnhealthyEvaluation struct.
func (ue *UnhealthyEvaluation) UnmarshalJSON(body []byte) error {
	var m map[string]*json.RawMessage
	err := json.Unmarshal(body, &m)
	if err != nil {
		return err
	}
	for k, v := range m {
		switch k {
		case "HealthEvaluation":
			if v != nil {
				healthEvaluation, err := unmarshalBasicHealthEvaluation(*v)
				if err != nil {
					return err
				}
				ue.HealthEvaluation = healthEvaluation
			}
		}
	}

	return nil
}

// UnregisterApplicationType the type of the unregister application
type UnregisterApplicationType struct {
	ApplicationTypeVersion *string `json:"ApplicationTypeVersion,omitempty"`
}

// UnregisterClusterPackage the package of the unregister cluster
type UnregisterClusterPackage struct {
	// CodeVersion - The version of the code
	CodeVersion *string `json:"CodeVersion,omitempty"`
	// ConfigVersion - The version of the config
	ConfigVersion *string `json:"ConfigVersion,omitempty"`
}

// UpdateApplicationUpgrade the description of the update application upgrade
type UpdateApplicationUpgrade struct {
	Name                    *string                  `json:"Name,omitempty"`
	UpgradeKind             *string                  `json:"UpgradeKind,omitempty"`
	UpdateDescription       *UpdateDescription       `json:"UpdateDescription,omitempty"`
	ApplicationHealthPolicy *ApplicationHealthPolicy `json:"ApplicationHealthPolicy,omitempty"`
}

// UpdateClusterUpgrade the description of the update cluster upgrade
type UpdateClusterUpgrade struct {
	// UpgradeKind - The kind of the upgrade
	UpgradeKind *string `json:"UpgradeKind,omitempty"`
	// UpdateDescription - The description of the update
	UpdateDescription *UpdateDescription `json:"UpdateDescription,omitempty"`
	// ClusterHealthPolicy - The policy of the cluster health
	ClusterHealthPolicy *ClusterHealthPolicy `json:"ClusterHealthPolicy,omitempty"`
	// EnableDeltaHealthEvaluations - The evaluations of the enable delta health
	EnableDeltaHealthEvaluations *bool `json:"EnableDeltaHealthEvaluations,omitempty"`
}

// UpdateDescription the description of the update
type UpdateDescription struct {
	// RollingUpgradeMode - The mode of the rolling upgrade. Possible values include: 'RollingUpgradeMode3Invalid', 'RollingUpgradeMode3UnmonitoredAuto', 'RollingUpgradeMode3UnmonitoredManual', 'RollingUpgradeMode3Monitored'
	RollingUpgradeMode RollingUpgradeMode3 `json:"RollingUpgradeMode,omitempty"`
	// ForceRestart - The flag of the force restart
	ForceRestart *bool `json:"ForceRestart,omitempty"`
	// FailureAction - The action of the failure
	FailureAction *string `json:"FailureAction,omitempty"`
	// UpgradeReplicaSetCheckTimeoutInSeconds - The seconds of the upgrade replica set check timeout
	UpgradeReplicaSetCheckTimeoutInSeconds *int32 `json:"UpgradeReplicaSetCheckTimeoutInSeconds,omitempty"`
	// HealthCheckWaitDurationInMilliseconds - The seconds of the health check wait duration
	HealthCheckWaitDurationInMilliseconds *string `json:"HealthCheckWaitDurationInMilliseconds,omitempty"`
	// HealthCheckStableDurationInMilliseconds - The seconds of the health check stable duration
	HealthCheckStableDurationInMilliseconds *string `json:"HealthCheckStableDurationInMilliseconds,omitempty"`
	// HealthCheckRetryTimeoutInMilliseconds - The milliseconds of the health check retry timeout
	HealthCheckRetryTimeoutInMilliseconds *string `json:"HealthCheckRetryTimeoutInMilliseconds,omitempty"`
	// UpgradeTimeoutInMilliseconds - The milliseconds of the upgrade timeout
	UpgradeTimeoutInMilliseconds *string `json:"UpgradeTimeoutInMilliseconds,omitempty"`
	// UpgradeDomainTimeoutInMilliseconds - The milliseconds of the upgrade domain timeout
	UpgradeDomainTimeoutInMilliseconds *string `json:"UpgradeDomainTimeoutInMilliseconds,omitempty"`
}

// BasicUpdateServiceDescription the description of the update service
type BasicUpdateServiceDescription interface {
	AsStatelessUpdateServiceDescription() (*StatelessUpdateServiceDescription, bool)
	AsStatefulUpdateServiceDescription() (*StatefulUpdateServiceDescription, bool)
	AsUpdateServiceDescription() (*UpdateServiceDescription, bool)
}

// UpdateServiceDescription the description of the update service
type UpdateServiceDescription struct {
	Flags *int32 `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicUpdateServiceDescriptionServiceKindUpdateServiceDescription', 'ServiceKindBasicUpdateServiceDescriptionServiceKindStateless', 'ServiceKindBasicUpdateServiceDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicUpdateServiceDescription `json:"ServiceKind,omitempty"`
}

func unmarshalBasicUpdateServiceDescription(body []byte) (BasicUpdateServiceDescription, error) {
	var m map[string]interface{}
	err := json.Unmarshal(body, &m)
	if err != nil {
		return nil, err
	}

	switch m["ServiceKind"] {
	case string(ServiceKindBasicUpdateServiceDescriptionServiceKindStateless):
		var susd StatelessUpdateServiceDescription
		err := json.Unmarshal(body, &susd)
		return susd, err
	case string(ServiceKindBasicUpdateServiceDescriptionServiceKindStateful):
		var susd StatefulUpdateServiceDescription
		err := json.Unmarshal(body, &susd)
		return susd, err
	default:
		var usd UpdateServiceDescription
		err := json.Unmarshal(body, &usd)
		return usd, err
	}
}
func unmarshalBasicUpdateServiceDescriptionArray(body []byte) ([]BasicUpdateServiceDescription, error) {
	var rawMessages []*json.RawMessage
	err := json.Unmarshal(body, &rawMessages)
	if err != nil {
		return nil, err
	}

	usdArray := make([]BasicUpdateServiceDescription, len(rawMessages))

	for index, rawMessage := range rawMessages {
		usd, err := unmarshalBasicUpdateServiceDescription(*rawMessage)
		if err != nil {
			return nil, err
		}
		usdArray[index] = usd
	}
	return usdArray, nil
}

// MarshalJSON is the custom marshaler for UpdateServiceDescription.
func (usd UpdateServiceDescription) MarshalJSON() ([]byte, error) {
	usd.ServiceKind = ServiceKindBasicUpdateServiceDescriptionServiceKindUpdateServiceDescription
	objectMap := make(map[string]interface{})
	if usd.Flags != nil {
		objectMap["Flags"] = usd.Flags
	}
	if usd.ServiceKind != "" {
		objectMap["ServiceKind"] = usd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessUpdateServiceDescription is the BasicUpdateServiceDescription implementation for UpdateServiceDescription.
func (usd UpdateServiceDescription) AsStatelessUpdateServiceDescription() (*StatelessUpdateServiceDescription, bool) {
	return nil, false
}

// AsStatefulUpdateServiceDescription is the BasicUpdateServiceDescription implementation for UpdateServiceDescription.
func (usd UpdateServiceDescription) AsStatefulUpdateServiceDescription() (*StatefulUpdateServiceDescription, bool) {
	return nil, false
}

// AsUpdateServiceDescription is the BasicUpdateServiceDescription implementation for UpdateServiceDescription.
func (usd UpdateServiceDescription) AsUpdateServiceDescription() (*UpdateServiceDescription, bool) {
	return &usd, true
}

// AsBasicUpdateServiceDescription is the BasicUpdateServiceDescription implementation for UpdateServiceDescription.
func (usd UpdateServiceDescription) AsBasicUpdateServiceDescription() (BasicUpdateServiceDescription, bool) {
	return &usd, true
}

// BasicUpdateServiceGroupDescription the description of the update service group
type BasicUpdateServiceGroupDescription interface {
	AsStatelessUpdateServiceGroupDescription() (*StatelessUpdateServiceGroupDescription, bool)
	AsStatefulUpdateServiceGroupDescription() (*StatefulUpdateServiceGroupDescription, bool)
	AsUpdateServiceGroupDescription() (*UpdateServiceGroupDescription, bool)
}

// UpdateServiceGroupDescription the description of the update service group
type UpdateServiceGroupDescription struct {
	Flags *int32 `json:"Flags,omitempty"`
	// ServiceKind - Possible values include: 'ServiceKindBasicUpdateServiceGroupDescriptionServiceKindUpdateServiceGroupDescription', 'ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateless', 'ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateful'
	ServiceKind ServiceKindBasicUpdateServiceGroupDescription `json:"ServiceKind,omitempty"`
}

func unmarshalBasicUpdateServiceGroupDescription(body []byte) (BasicUpdateServiceGroupDescription, error) {
	var m map[string]interface{}
	err := json.Unmarshal(body, &m)
	if err != nil {
		return nil, err
	}

	switch m["ServiceKind"] {
	case string(ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateless):
		var susgd StatelessUpdateServiceGroupDescription
		err := json.Unmarshal(body, &susgd)
		return susgd, err
	case string(ServiceKindBasicUpdateServiceGroupDescriptionServiceKindStateful):
		var susgd StatefulUpdateServiceGroupDescription
		err := json.Unmarshal(body, &susgd)
		return susgd, err
	default:
		var usgd UpdateServiceGroupDescription
		err := json.Unmarshal(body, &usgd)
		return usgd, err
	}
}
func unmarshalBasicUpdateServiceGroupDescriptionArray(body []byte) ([]BasicUpdateServiceGroupDescription, error) {
	var rawMessages []*json.RawMessage
	err := json.Unmarshal(body, &rawMessages)
	if err != nil {
		return nil, err
	}

	usgdArray := make([]BasicUpdateServiceGroupDescription, len(rawMessages))

	for index, rawMessage := range rawMessages {
		usgd, err := unmarshalBasicUpdateServiceGroupDescription(*rawMessage)
		if err != nil {
			return nil, err
		}
		usgdArray[index] = usgd
	}
	return usgdArray, nil
}

// MarshalJSON is the custom marshaler for UpdateServiceGroupDescription.
func (usgd UpdateServiceGroupDescription) MarshalJSON() ([]byte, error) {
	usgd.ServiceKind = ServiceKindBasicUpdateServiceGroupDescriptionServiceKindUpdateServiceGroupDescription
	objectMap := make(map[string]interface{})
	if usgd.Flags != nil {
		objectMap["Flags"] = usgd.Flags
	}
	if usgd.ServiceKind != "" {
		objectMap["ServiceKind"] = usgd.ServiceKind
	}
	return json.Marshal(objectMap)
}

// AsStatelessUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for UpdateServiceGroupDescription.
func (usgd UpdateServiceGroupDescription) AsStatelessUpdateServiceGroupDescription() (*StatelessUpdateServiceGroupDescription, bool) {
	return nil, false
}

// AsStatefulUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for UpdateServiceGroupDescription.
func (usgd UpdateServiceGroupDescription) AsStatefulUpdateServiceGroupDescription() (*StatefulUpdateServiceGroupDescription, bool) {
	return nil, false
}

// AsUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for UpdateServiceGroupDescription.
func (usgd UpdateServiceGroupDescription) AsUpdateServiceGroupDescription() (*UpdateServiceGroupDescription, bool) {
	return &usgd, true
}

// AsBasicUpdateServiceGroupDescription is the BasicUpdateServiceGroupDescription implementation for UpdateServiceGroupDescription.
func (usgd UpdateServiceGroupDescription) AsBasicUpdateServiceGroupDescription() (BasicUpdateServiceGroupDescription, bool) {
	return &usgd, true
}

// UpgradeDomainDeltaNodesCheckHealthEvaluation the evaluation of the upgrade domain delta nodes check health
type UpgradeDomainDeltaNodesCheckHealthEvaluation struct {
	UpgradeDomainName                          *string                `json:"UpgradeDomainName,omitempty"`
	UnhealthyEvaluations                       *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	BaselineErrorCount                         *int32                 `json:"BaselineErrorCount,omitempty"`
	BaselineTotalCount                         *int32                 `json:"BaselineTotalCount,omitempty"`
	TotalCount                                 *int32                 `json:"TotalCount,omitempty"`
	MaxPercentUpgradeDomainDeltaUnhealthyNodes *int32                 `json:"MaxPercentUpgradeDomainDeltaUnhealthyNodes,omitempty"`
	Description                                *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) MarshalJSON() ([]byte, error) {
	uddnche.Kind = KindUpgradeDomainDeltaNodesCheck
	objectMap := make(map[string]interface{})
	if uddnche.UpgradeDomainName != nil {
		objectMap["UpgradeDomainName"] = uddnche.UpgradeDomainName
	}
	if uddnche.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = uddnche.UnhealthyEvaluations
	}
	if uddnche.BaselineErrorCount != nil {
		objectMap["BaselineErrorCount"] = uddnche.BaselineErrorCount
	}
	if uddnche.BaselineTotalCount != nil {
		objectMap["BaselineTotalCount"] = uddnche.BaselineTotalCount
	}
	if uddnche.TotalCount != nil {
		objectMap["TotalCount"] = uddnche.TotalCount
	}
	if uddnche.MaxPercentUpgradeDomainDeltaUnhealthyNodes != nil {
		objectMap["MaxPercentUpgradeDomainDeltaUnhealthyNodes"] = uddnche.MaxPercentUpgradeDomainDeltaUnhealthyNodes
	}
	if uddnche.Description != nil {
		objectMap["Description"] = uddnche.Description
	}
	if uddnche.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = uddnche.AggregatedHealthState
	}
	if uddnche.Kind != "" {
		objectMap["Kind"] = uddnche.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return &uddnche, true
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeltaNodesCheckHealthEvaluation.
func (uddnche UpgradeDomainDeltaNodesCheckHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &uddnche, true
}

// UpgradeDomainDeployedApplicationsHealthEvaluation the evaluation of the upgrade domain deployed applications
// health
type UpgradeDomainDeployedApplicationsHealthEvaluation struct {
	UpgradeDomainName                       *string                `json:"UpgradeDomainName,omitempty"`
	UnhealthyEvaluations                    *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	TotalCount                              *int32                 `json:"TotalCount,omitempty"`
	MaxPercentUnhealthyDeployedApplications *int32                 `json:"MaxPercentUnhealthyDeployedApplications,omitempty"`
	Description                             *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) MarshalJSON() ([]byte, error) {
	uddahe.Kind = KindUpgradeDomainDeployedApplications
	objectMap := make(map[string]interface{})
	if uddahe.UpgradeDomainName != nil {
		objectMap["UpgradeDomainName"] = uddahe.UpgradeDomainName
	}
	if uddahe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = uddahe.UnhealthyEvaluations
	}
	if uddahe.TotalCount != nil {
		objectMap["TotalCount"] = uddahe.TotalCount
	}
	if uddahe.MaxPercentUnhealthyDeployedApplications != nil {
		objectMap["MaxPercentUnhealthyDeployedApplications"] = uddahe.MaxPercentUnhealthyDeployedApplications
	}
	if uddahe.Description != nil {
		objectMap["Description"] = uddahe.Description
	}
	if uddahe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = uddahe.AggregatedHealthState
	}
	if uddahe.Kind != "" {
		objectMap["Kind"] = uddahe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return &uddahe, true
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainDeployedApplicationsHealthEvaluation.
func (uddahe UpgradeDomainDeployedApplicationsHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &uddahe, true
}

// UpgradeDomainNodesHealthEvaluation the evaluation of the upgrade domain nodes health
type UpgradeDomainNodesHealthEvaluation struct {
	UpgradeDomainName        *string                `json:"UpgradeDomainName,omitempty"`
	UnhealthyEvaluations     *[]UnhealthyEvaluation `json:"UnhealthyEvaluations,omitempty"`
	TotalCount               *int32                 `json:"TotalCount,omitempty"`
	MaxPercentUnhealthyNodes *int32                 `json:"MaxPercentUnhealthyNodes,omitempty"`
	Description              *string                `json:"Description,omitempty"`
	// AggregatedHealthState - Possible values include: 'Invalid', 'Ok', 'Warning', 'Error', 'Unknown'
	AggregatedHealthState AggregatedHealthState `json:"AggregatedHealthState,omitempty"`
	// Kind - Possible values include: 'KindHealthEvaluation', 'KindEvent', 'KindPartitions', 'KindReplicas', 'KindDeployedServicePackages', 'KindDeployedApplications', 'KindServices', 'KindNodes', 'KindApplications', 'KindUpgradeDomainNodes', 'KindUpgradeDomainDeployedApplications', 'KindSystemApplication', 'KindPartition', 'KindReplica', 'KindDeployedServicePackage', 'KindDeployedApplication', 'KindService', 'KindNode', 'KindApplication', 'KindDeltaNodesCheck', 'KindUpgradeDomainDeltaNodesCheck', 'KindApplicationType'
	Kind Kind `json:"Kind,omitempty"`
}

// MarshalJSON is the custom marshaler for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) MarshalJSON() ([]byte, error) {
	udnhe.Kind = KindUpgradeDomainNodes
	objectMap := make(map[string]interface{})
	if udnhe.UpgradeDomainName != nil {
		objectMap["UpgradeDomainName"] = udnhe.UpgradeDomainName
	}
	if udnhe.UnhealthyEvaluations != nil {
		objectMap["UnhealthyEvaluations"] = udnhe.UnhealthyEvaluations
	}
	if udnhe.TotalCount != nil {
		objectMap["TotalCount"] = udnhe.TotalCount
	}
	if udnhe.MaxPercentUnhealthyNodes != nil {
		objectMap["MaxPercentUnhealthyNodes"] = udnhe.MaxPercentUnhealthyNodes
	}
	if udnhe.Description != nil {
		objectMap["Description"] = udnhe.Description
	}
	if udnhe.AggregatedHealthState != "" {
		objectMap["AggregatedHealthState"] = udnhe.AggregatedHealthState
	}
	if udnhe.Kind != "" {
		objectMap["Kind"] = udnhe.Kind
	}
	return json.Marshal(objectMap)
}

// AsEventHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsEventHealthEvaluation() (*EventHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsPartitionsHealthEvaluation() (*PartitionsHealthEvaluation, bool) {
	return nil, false
}

// AsReplicasHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsReplicasHealthEvaluation() (*ReplicasHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackagesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsDeployedServicePackagesHealthEvaluation() (*DeployedServicePackagesHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsDeployedApplicationsHealthEvaluation() (*DeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsServicesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsServicesHealthEvaluation() (*ServicesHealthEvaluation, bool) {
	return nil, false
}

// AsNodesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsNodesHealthEvaluation() (*NodesHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsApplicationsHealthEvaluation() (*ApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainNodesHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsUpgradeDomainNodesHealthEvaluation() (*UpgradeDomainNodesHealthEvaluation, bool) {
	return &udnhe, true
}

// AsUpgradeDomainDeployedApplicationsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsUpgradeDomainDeployedApplicationsHealthEvaluation() (*UpgradeDomainDeployedApplicationsHealthEvaluation, bool) {
	return nil, false
}

// AsSystemApplicationHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsSystemApplicationHealthEvaluation() (*SystemApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsPartitionHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsPartitionHealthEvaluation() (*PartitionHealthEvaluation, bool) {
	return nil, false
}

// AsReplicaHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsReplicaHealthEvaluation() (*ReplicaHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedServicePackageHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsDeployedServicePackageHealthEvaluation() (*DeployedServicePackageHealthEvaluation, bool) {
	return nil, false
}

// AsDeployedApplicationHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsDeployedApplicationHealthEvaluation() (*DeployedApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsServiceHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsServiceHealthEvaluation() (*ServiceHealthEvaluation, bool) {
	return nil, false
}

// AsNodeHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsNodeHealthEvaluation() (*NodeHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsApplicationHealthEvaluation() (*ApplicationHealthEvaluation, bool) {
	return nil, false
}

// AsDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsDeltaNodesCheckHealthEvaluation() (*DeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsUpgradeDomainDeltaNodesCheckHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsUpgradeDomainDeltaNodesCheckHealthEvaluation() (*UpgradeDomainDeltaNodesCheckHealthEvaluation, bool) {
	return nil, false
}

// AsApplicationTypeHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsApplicationTypeHealthEvaluation() (*ApplicationTypeHealthEvaluation, bool) {
	return nil, false
}

// AsHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsHealthEvaluation() (*HealthEvaluation, bool) {
	return nil, false
}

// AsBasicHealthEvaluation is the BasicHealthEvaluation implementation for UpgradeDomainNodesHealthEvaluation.
func (udnhe UpgradeDomainNodesHealthEvaluation) AsBasicHealthEvaluation() (BasicHealthEvaluation, bool) {
	return &udnhe, true
}
