/*
DM OpenAPI DOC

No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)

API version: 6.0.0
*/

// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.

package dm

import (
	"encoding/json"
)

// checks if the ClusterTopology type satisfies the MappedNullable interface at compile time
var _ MappedNullable = &ClusterTopology{}

// ClusterTopology struct for ClusterTopology
type ClusterTopology struct {
	AlertManagerTopology *AlertManagerTopology `json:"alert_manager_topology,omitempty"`
	GrafanaTopology      *GrafanaTopology      `json:"grafana_topology,omitempty"`
	MasterTopologyList   []MasterTopology      `json:"master_topology_list,omitempty"`
	PrometheusTopology   *PrometheusTopology   `json:"prometheus_topology,omitempty"`
	WorkerTopologyList   []WorkerTopology      `json:"worker_topology_list,omitempty"`
}

// NewClusterTopology instantiates a new ClusterTopology object
// This constructor will assign default values to properties that have it defined,
// and makes sure properties required by API are set, but the set of arguments
// will change when the set of required properties is changed
func NewClusterTopology() *ClusterTopology {
	this := ClusterTopology{}
	return &this
}

// NewClusterTopologyWithDefaults instantiates a new ClusterTopology object
// This constructor will only assign default values to properties that have it defined,
// but it doesn't guarantee that properties required by API are set
func NewClusterTopologyWithDefaults() *ClusterTopology {
	this := ClusterTopology{}
	return &this
}

// GetAlertManagerTopology returns the AlertManagerTopology field value if set, zero value otherwise.
func (o *ClusterTopology) GetAlertManagerTopology() AlertManagerTopology {
	if o == nil || IsNil(o.AlertManagerTopology) {
		var ret AlertManagerTopology
		return ret
	}
	return *o.AlertManagerTopology
}

// GetAlertManagerTopologyOk returns a tuple with the AlertManagerTopology field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *ClusterTopology) GetAlertManagerTopologyOk() (*AlertManagerTopology, bool) {
	if o == nil || IsNil(o.AlertManagerTopology) {
		return nil, false
	}
	return o.AlertManagerTopology, true
}

// HasAlertManagerTopology returns a boolean if a field has been set.
func (o *ClusterTopology) HasAlertManagerTopology() bool {
	if o != nil && !IsNil(o.AlertManagerTopology) {
		return true
	}

	return false
}

// SetAlertManagerTopology gets a reference to the given AlertManagerTopology and assigns it to the AlertManagerTopology field.
func (o *ClusterTopology) SetAlertManagerTopology(v AlertManagerTopology) {
	o.AlertManagerTopology = &v
}

// GetGrafanaTopology returns the GrafanaTopology field value if set, zero value otherwise.
func (o *ClusterTopology) GetGrafanaTopology() GrafanaTopology {
	if o == nil || IsNil(o.GrafanaTopology) {
		var ret GrafanaTopology
		return ret
	}
	return *o.GrafanaTopology
}

// GetGrafanaTopologyOk returns a tuple with the GrafanaTopology field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *ClusterTopology) GetGrafanaTopologyOk() (*GrafanaTopology, bool) {
	if o == nil || IsNil(o.GrafanaTopology) {
		return nil, false
	}
	return o.GrafanaTopology, true
}

// HasGrafanaTopology returns a boolean if a field has been set.
func (o *ClusterTopology) HasGrafanaTopology() bool {
	if o != nil && !IsNil(o.GrafanaTopology) {
		return true
	}

	return false
}

// SetGrafanaTopology gets a reference to the given GrafanaTopology and assigns it to the GrafanaTopology field.
func (o *ClusterTopology) SetGrafanaTopology(v GrafanaTopology) {
	o.GrafanaTopology = &v
}

// GetMasterTopologyList returns the MasterTopologyList field value if set, zero value otherwise.
func (o *ClusterTopology) GetMasterTopologyList() []MasterTopology {
	if o == nil || IsNil(o.MasterTopologyList) {
		var ret []MasterTopology
		return ret
	}
	return o.MasterTopologyList
}

// GetMasterTopologyListOk returns a tuple with the MasterTopologyList field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *ClusterTopology) GetMasterTopologyListOk() ([]MasterTopology, bool) {
	if o == nil || IsNil(o.MasterTopologyList) {
		return nil, false
	}
	return o.MasterTopologyList, true
}

// HasMasterTopologyList returns a boolean if a field has been set.
func (o *ClusterTopology) HasMasterTopologyList() bool {
	if o != nil && !IsNil(o.MasterTopologyList) {
		return true
	}

	return false
}

// SetMasterTopologyList gets a reference to the given []MasterTopology and assigns it to the MasterTopologyList field.
func (o *ClusterTopology) SetMasterTopologyList(v []MasterTopology) {
	o.MasterTopologyList = v
}

// GetPrometheusTopology returns the PrometheusTopology field value if set, zero value otherwise.
func (o *ClusterTopology) GetPrometheusTopology() PrometheusTopology {
	if o == nil || IsNil(o.PrometheusTopology) {
		var ret PrometheusTopology
		return ret
	}
	return *o.PrometheusTopology
}

// GetPrometheusTopologyOk returns a tuple with the PrometheusTopology field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *ClusterTopology) GetPrometheusTopologyOk() (*PrometheusTopology, bool) {
	if o == nil || IsNil(o.PrometheusTopology) {
		return nil, false
	}
	return o.PrometheusTopology, true
}

// HasPrometheusTopology returns a boolean if a field has been set.
func (o *ClusterTopology) HasPrometheusTopology() bool {
	if o != nil && !IsNil(o.PrometheusTopology) {
		return true
	}

	return false
}

// SetPrometheusTopology gets a reference to the given PrometheusTopology and assigns it to the PrometheusTopology field.
func (o *ClusterTopology) SetPrometheusTopology(v PrometheusTopology) {
	o.PrometheusTopology = &v
}

// GetWorkerTopologyList returns the WorkerTopologyList field value if set, zero value otherwise.
func (o *ClusterTopology) GetWorkerTopologyList() []WorkerTopology {
	if o == nil || IsNil(o.WorkerTopologyList) {
		var ret []WorkerTopology
		return ret
	}
	return o.WorkerTopologyList
}

// GetWorkerTopologyListOk returns a tuple with the WorkerTopologyList field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *ClusterTopology) GetWorkerTopologyListOk() ([]WorkerTopology, bool) {
	if o == nil || IsNil(o.WorkerTopologyList) {
		return nil, false
	}
	return o.WorkerTopologyList, true
}

// HasWorkerTopologyList returns a boolean if a field has been set.
func (o *ClusterTopology) HasWorkerTopologyList() bool {
	if o != nil && !IsNil(o.WorkerTopologyList) {
		return true
	}

	return false
}

// SetWorkerTopologyList gets a reference to the given []WorkerTopology and assigns it to the WorkerTopologyList field.
func (o *ClusterTopology) SetWorkerTopologyList(v []WorkerTopology) {
	o.WorkerTopologyList = v
}

func (o ClusterTopology) MarshalJSON() ([]byte, error) {
	toSerialize, err := o.ToMap()
	if err != nil {
		return []byte{}, err
	}
	return json.Marshal(toSerialize)
}

func (o ClusterTopology) ToMap() (map[string]interface{}, error) {
	toSerialize := map[string]interface{}{}
	if !IsNil(o.AlertManagerTopology) {
		toSerialize["alert_manager_topology"] = o.AlertManagerTopology
	}
	if !IsNil(o.GrafanaTopology) {
		toSerialize["grafana_topology"] = o.GrafanaTopology
	}
	if !IsNil(o.MasterTopologyList) {
		toSerialize["master_topology_list"] = o.MasterTopologyList
	}
	if !IsNil(o.PrometheusTopology) {
		toSerialize["prometheus_topology"] = o.PrometheusTopology
	}
	if !IsNil(o.WorkerTopologyList) {
		toSerialize["worker_topology_list"] = o.WorkerTopologyList
	}
	return toSerialize, nil
}

type NullableClusterTopology struct {
	value *ClusterTopology
	isSet bool
}

func (v NullableClusterTopology) Get() *ClusterTopology {
	return v.value
}

func (v *NullableClusterTopology) Set(val *ClusterTopology) {
	v.value = val
	v.isSet = true
}

func (v NullableClusterTopology) IsSet() bool {
	return v.isSet
}

func (v *NullableClusterTopology) Unset() {
	v.value = nil
	v.isSet = false
}

func NewNullableClusterTopology(val *ClusterTopology) *NullableClusterTopology {
	return &NullableClusterTopology{value: val, isSet: true}
}

func (v NullableClusterTopology) MarshalJSON() ([]byte, error) {
	return json.Marshal(v.value)
}

func (v *NullableClusterTopology) UnmarshalJSON(src []byte) error {
	v.isSet = true
	return json.Unmarshal(src, &v.value)
}
