/*
 * Subset of Influx API covered by Influx CLI
 *
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * API version: 2.0.0
 */

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

package api

import (
	"encoding/json"
)

// TemplateApplyAction struct for TemplateApplyAction
type TemplateApplyAction struct {
	Action     TemplateApplyActionKind       `json:"action" yaml:"action"`
	Properties TemplateApplyActionProperties `json:"properties" yaml:"properties"`
}

// NewTemplateApplyAction instantiates a new TemplateApplyAction 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 NewTemplateApplyAction(action TemplateApplyActionKind, properties TemplateApplyActionProperties) *TemplateApplyAction {
	this := TemplateApplyAction{}
	this.Action = action
	this.Properties = properties
	return &this
}

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

// GetAction returns the Action field value
func (o *TemplateApplyAction) GetAction() TemplateApplyActionKind {
	if o == nil {
		var ret TemplateApplyActionKind
		return ret
	}

	return o.Action
}

// GetActionOk returns a tuple with the Action field value
// and a boolean to check if the value has been set.
func (o *TemplateApplyAction) GetActionOk() (*TemplateApplyActionKind, bool) {
	if o == nil {
		return nil, false
	}
	return &o.Action, true
}

// SetAction sets field value
func (o *TemplateApplyAction) SetAction(v TemplateApplyActionKind) {
	o.Action = v
}

// GetProperties returns the Properties field value
func (o *TemplateApplyAction) GetProperties() TemplateApplyActionProperties {
	if o == nil {
		var ret TemplateApplyActionProperties
		return ret
	}

	return o.Properties
}

// GetPropertiesOk returns a tuple with the Properties field value
// and a boolean to check if the value has been set.
func (o *TemplateApplyAction) GetPropertiesOk() (*TemplateApplyActionProperties, bool) {
	if o == nil {
		return nil, false
	}
	return &o.Properties, true
}

// SetProperties sets field value
func (o *TemplateApplyAction) SetProperties(v TemplateApplyActionProperties) {
	o.Properties = v
}

func (o TemplateApplyAction) MarshalJSON() ([]byte, error) {
	toSerialize := map[string]interface{}{}
	if true {
		toSerialize["action"] = o.Action
	}
	if true {
		toSerialize["properties"] = o.Properties
	}
	return json.Marshal(toSerialize)
}

type NullableTemplateApplyAction struct {
	value *TemplateApplyAction
	isSet bool
}

func (v NullableTemplateApplyAction) Get() *TemplateApplyAction {
	return v.value
}

func (v *NullableTemplateApplyAction) Set(val *TemplateApplyAction) {
	v.value = val
	v.isSet = true
}

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

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

func NewNullableTemplateApplyAction(val *TemplateApplyAction) *NullableTemplateApplyAction {
	return &NullableTemplateApplyAction{value: val, isSet: true}
}

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

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