/*
TiDB Cloud Console API

TiDB Cloud Console API.

API version: v1beta1
*/

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

package client

import (
	"encoding/json"
)

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

// BffclusterManagementv1beta1Cluster struct for BffclusterManagementv1beta1Cluster
type BffclusterManagementv1beta1Cluster struct {
	ClusterType *ClusterClusterType `json:"clusterType,omitempty"`
	DedicatedCluster *TidbCloudOpenApidedicatedv1beta1Cluster `json:"dedicatedCluster,omitempty"`
	ServerlessCluster *TidbCloudOpenApiserverlessv1beta1Cluster `json:"serverlessCluster,omitempty"`
	AdditionalProperties map[string]interface{}
}

type _BffclusterManagementv1beta1Cluster BffclusterManagementv1beta1Cluster

// NewBffclusterManagementv1beta1Cluster instantiates a new BffclusterManagementv1beta1Cluster 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 NewBffclusterManagementv1beta1Cluster() *BffclusterManagementv1beta1Cluster {
	this := BffclusterManagementv1beta1Cluster{}
	return &this
}

// NewBffclusterManagementv1beta1ClusterWithDefaults instantiates a new BffclusterManagementv1beta1Cluster 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 NewBffclusterManagementv1beta1ClusterWithDefaults() *BffclusterManagementv1beta1Cluster {
	this := BffclusterManagementv1beta1Cluster{}
	return &this
}

// GetClusterType returns the ClusterType field value if set, zero value otherwise.
func (o *BffclusterManagementv1beta1Cluster) GetClusterType() ClusterClusterType {
	if o == nil || IsNil(o.ClusterType) {
		var ret ClusterClusterType
		return ret
	}
	return *o.ClusterType
}

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

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

	return false
}

// SetClusterType gets a reference to the given ClusterClusterType and assigns it to the ClusterType field.
func (o *BffclusterManagementv1beta1Cluster) SetClusterType(v ClusterClusterType) {
	o.ClusterType = &v
}

// GetDedicatedCluster returns the DedicatedCluster field value if set, zero value otherwise.
func (o *BffclusterManagementv1beta1Cluster) GetDedicatedCluster() TidbCloudOpenApidedicatedv1beta1Cluster {
	if o == nil || IsNil(o.DedicatedCluster) {
		var ret TidbCloudOpenApidedicatedv1beta1Cluster
		return ret
	}
	return *o.DedicatedCluster
}

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

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

	return false
}

// SetDedicatedCluster gets a reference to the given TidbCloudOpenApidedicatedv1beta1Cluster and assigns it to the DedicatedCluster field.
func (o *BffclusterManagementv1beta1Cluster) SetDedicatedCluster(v TidbCloudOpenApidedicatedv1beta1Cluster) {
	o.DedicatedCluster = &v
}

// GetServerlessCluster returns the ServerlessCluster field value if set, zero value otherwise.
func (o *BffclusterManagementv1beta1Cluster) GetServerlessCluster() TidbCloudOpenApiserverlessv1beta1Cluster {
	if o == nil || IsNil(o.ServerlessCluster) {
		var ret TidbCloudOpenApiserverlessv1beta1Cluster
		return ret
	}
	return *o.ServerlessCluster
}

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

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

	return false
}

// SetServerlessCluster gets a reference to the given TidbCloudOpenApiserverlessv1beta1Cluster and assigns it to the ServerlessCluster field.
func (o *BffclusterManagementv1beta1Cluster) SetServerlessCluster(v TidbCloudOpenApiserverlessv1beta1Cluster) {
	o.ServerlessCluster = &v
}

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

func (o BffclusterManagementv1beta1Cluster) ToMap() (map[string]interface{}, error) {
	toSerialize := map[string]interface{}{}
	if !IsNil(o.ClusterType) {
		toSerialize["clusterType"] = o.ClusterType
	}
	if !IsNil(o.DedicatedCluster) {
		toSerialize["dedicatedCluster"] = o.DedicatedCluster
	}
	if !IsNil(o.ServerlessCluster) {
		toSerialize["serverlessCluster"] = o.ServerlessCluster
	}

	for key, value := range o.AdditionalProperties {
		toSerialize[key] = value
	}

	return toSerialize, nil
}

func (o *BffclusterManagementv1beta1Cluster) UnmarshalJSON(data []byte) (err error) {
	varBffclusterManagementv1beta1Cluster := _BffclusterManagementv1beta1Cluster{}

	err = json.Unmarshal(data, &varBffclusterManagementv1beta1Cluster)

	if err != nil {
		return err
	}

	*o = BffclusterManagementv1beta1Cluster(varBffclusterManagementv1beta1Cluster)

	additionalProperties := make(map[string]interface{})

	if err = json.Unmarshal(data, &additionalProperties); err == nil {
		delete(additionalProperties, "clusterType")
		delete(additionalProperties, "dedicatedCluster")
		delete(additionalProperties, "serverlessCluster")
		o.AdditionalProperties = additionalProperties
	}

	return err
}

type NullableBffclusterManagementv1beta1Cluster struct {
	value *BffclusterManagementv1beta1Cluster
	isSet bool
}

func (v NullableBffclusterManagementv1beta1Cluster) Get() *BffclusterManagementv1beta1Cluster {
	return v.value
}

func (v *NullableBffclusterManagementv1beta1Cluster) Set(val *BffclusterManagementv1beta1Cluster) {
	v.value = val
	v.isSet = true
}

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

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

func NewNullableBffclusterManagementv1beta1Cluster(val *BffclusterManagementv1beta1Cluster) *NullableBffclusterManagementv1beta1Cluster {
	return &NullableBffclusterManagementv1beta1Cluster{value: val, isSet: true}
}

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

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


