/*
Hindsight HTTP API

HTTP API for Hindsight

API version: 0.4.17
*/

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

package hindsight

import (
	"encoding/json"
)

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

// IncludeOptions Options for including additional data in recall results.
type IncludeOptions struct {
	Entities NullableEntityIncludeOptions `json:"entities,omitempty"`
	Chunks NullableChunkIncludeOptions `json:"chunks,omitempty"`
	SourceFacts NullableSourceFactsIncludeOptions `json:"source_facts,omitempty"`
}

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

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

// GetEntities returns the Entities field value if set, zero value otherwise (both if not set or set to explicit null).
func (o *IncludeOptions) GetEntities() EntityIncludeOptions {
	if o == nil || IsNil(o.Entities.Get()) {
		var ret EntityIncludeOptions
		return ret
	}
	return *o.Entities.Get()
}

// GetEntitiesOk returns a tuple with the Entities field value if set, nil otherwise
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *IncludeOptions) GetEntitiesOk() (*EntityIncludeOptions, bool) {
	if o == nil {
		return nil, false
	}
	return o.Entities.Get(), o.Entities.IsSet()
}

// HasEntities returns a boolean if a field has been set.
func (o *IncludeOptions) HasEntities() bool {
	if o != nil && o.Entities.IsSet() {
		return true
	}

	return false
}

// SetEntities gets a reference to the given NullableEntityIncludeOptions and assigns it to the Entities field.
func (o *IncludeOptions) SetEntities(v EntityIncludeOptions) {
	o.Entities.Set(&v)
}
// SetEntitiesNil sets the value for Entities to be an explicit nil
func (o *IncludeOptions) SetEntitiesNil() {
	o.Entities.Set(nil)
}

// UnsetEntities ensures that no value is present for Entities, not even an explicit nil
func (o *IncludeOptions) UnsetEntities() {
	o.Entities.Unset()
}

// GetChunks returns the Chunks field value if set, zero value otherwise (both if not set or set to explicit null).
func (o *IncludeOptions) GetChunks() ChunkIncludeOptions {
	if o == nil || IsNil(o.Chunks.Get()) {
		var ret ChunkIncludeOptions
		return ret
	}
	return *o.Chunks.Get()
}

// GetChunksOk returns a tuple with the Chunks field value if set, nil otherwise
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *IncludeOptions) GetChunksOk() (*ChunkIncludeOptions, bool) {
	if o == nil {
		return nil, false
	}
	return o.Chunks.Get(), o.Chunks.IsSet()
}

// HasChunks returns a boolean if a field has been set.
func (o *IncludeOptions) HasChunks() bool {
	if o != nil && o.Chunks.IsSet() {
		return true
	}

	return false
}

// SetChunks gets a reference to the given NullableChunkIncludeOptions and assigns it to the Chunks field.
func (o *IncludeOptions) SetChunks(v ChunkIncludeOptions) {
	o.Chunks.Set(&v)
}
// SetChunksNil sets the value for Chunks to be an explicit nil
func (o *IncludeOptions) SetChunksNil() {
	o.Chunks.Set(nil)
}

// UnsetChunks ensures that no value is present for Chunks, not even an explicit nil
func (o *IncludeOptions) UnsetChunks() {
	o.Chunks.Unset()
}

// GetSourceFacts returns the SourceFacts field value if set, zero value otherwise (both if not set or set to explicit null).
func (o *IncludeOptions) GetSourceFacts() SourceFactsIncludeOptions {
	if o == nil || IsNil(o.SourceFacts.Get()) {
		var ret SourceFactsIncludeOptions
		return ret
	}
	return *o.SourceFacts.Get()
}

// GetSourceFactsOk returns a tuple with the SourceFacts field value if set, nil otherwise
// and a boolean to check if the value has been set.
// NOTE: If the value is an explicit nil, `nil, true` will be returned
func (o *IncludeOptions) GetSourceFactsOk() (*SourceFactsIncludeOptions, bool) {
	if o == nil {
		return nil, false
	}
	return o.SourceFacts.Get(), o.SourceFacts.IsSet()
}

// HasSourceFacts returns a boolean if a field has been set.
func (o *IncludeOptions) HasSourceFacts() bool {
	if o != nil && o.SourceFacts.IsSet() {
		return true
	}

	return false
}

// SetSourceFacts gets a reference to the given NullableSourceFactsIncludeOptions and assigns it to the SourceFacts field.
func (o *IncludeOptions) SetSourceFacts(v SourceFactsIncludeOptions) {
	o.SourceFacts.Set(&v)
}
// SetSourceFactsNil sets the value for SourceFacts to be an explicit nil
func (o *IncludeOptions) SetSourceFactsNil() {
	o.SourceFacts.Set(nil)
}

// UnsetSourceFacts ensures that no value is present for SourceFacts, not even an explicit nil
func (o *IncludeOptions) UnsetSourceFacts() {
	o.SourceFacts.Unset()
}

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

func (o IncludeOptions) ToMap() (map[string]interface{}, error) {
	toSerialize := map[string]interface{}{}
	if o.Entities.IsSet() {
		toSerialize["entities"] = o.Entities.Get()
	}
	if o.Chunks.IsSet() {
		toSerialize["chunks"] = o.Chunks.Get()
	}
	if o.SourceFacts.IsSet() {
		toSerialize["source_facts"] = o.SourceFacts.Get()
	}
	return toSerialize, nil
}

type NullableIncludeOptions struct {
	value *IncludeOptions
	isSet bool
}

func (v NullableIncludeOptions) Get() *IncludeOptions {
	return v.value
}

func (v *NullableIncludeOptions) Set(val *IncludeOptions) {
	v.value = val
	v.isSet = true
}

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

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

func NewNullableIncludeOptions(val *IncludeOptions) *NullableIncludeOptions {
	return &NullableIncludeOptions{value: val, isSet: true}
}

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

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


