/*
 * Turing Minimal Openapi Spec for SDK
 *
 * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
 *
 * API version: 0.0.1
 */

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

package openapi

import (
	"encoding/json"
)

// EnsemblingJobSpec Ensembling job Specification
type EnsemblingJobSpec struct {
	Source EnsemblingJobSource `json:"source"`
	Predictions map[string]EnsemblingJobPredictionSource `json:"predictions"`
	Ensembler EnsemblingJobEnsemblerSpec `json:"ensembler"`
	Sink EnsemblingJobSink `json:"sink"`
}

// NewEnsemblingJobSpec instantiates a new EnsemblingJobSpec 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 NewEnsemblingJobSpec(source EnsemblingJobSource, predictions map[string]EnsemblingJobPredictionSource, ensembler EnsemblingJobEnsemblerSpec, sink EnsemblingJobSink) *EnsemblingJobSpec {
	this := EnsemblingJobSpec{}
	this.Source = source
	this.Predictions = predictions
	this.Ensembler = ensembler
	this.Sink = sink
	return &this
}

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

// GetSource returns the Source field value
func (o *EnsemblingJobSpec) GetSource() EnsemblingJobSource {
	if o == nil {
		var ret EnsemblingJobSource
		return ret
	}

	return o.Source
}

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

// SetSource sets field value
func (o *EnsemblingJobSpec) SetSource(v EnsemblingJobSource) {
	o.Source = v
}

// GetPredictions returns the Predictions field value
func (o *EnsemblingJobSpec) GetPredictions() map[string]EnsemblingJobPredictionSource {
	if o == nil {
		var ret map[string]EnsemblingJobPredictionSource
		return ret
	}

	return o.Predictions
}

// GetPredictionsOk returns a tuple with the Predictions field value
// and a boolean to check if the value has been set.
func (o *EnsemblingJobSpec) GetPredictionsOk() (*map[string]EnsemblingJobPredictionSource, bool) {
	if o == nil  {
		return nil, false
	}
	return &o.Predictions, true
}

// SetPredictions sets field value
func (o *EnsemblingJobSpec) SetPredictions(v map[string]EnsemblingJobPredictionSource) {
	o.Predictions = v
}

// GetEnsembler returns the Ensembler field value
func (o *EnsemblingJobSpec) GetEnsembler() EnsemblingJobEnsemblerSpec {
	if o == nil {
		var ret EnsemblingJobEnsemblerSpec
		return ret
	}

	return o.Ensembler
}

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

// SetEnsembler sets field value
func (o *EnsemblingJobSpec) SetEnsembler(v EnsemblingJobEnsemblerSpec) {
	o.Ensembler = v
}

// GetSink returns the Sink field value
func (o *EnsemblingJobSpec) GetSink() EnsemblingJobSink {
	if o == nil {
		var ret EnsemblingJobSink
		return ret
	}

	return o.Sink
}

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

// SetSink sets field value
func (o *EnsemblingJobSpec) SetSink(v EnsemblingJobSink) {
	o.Sink = v
}

func (o EnsemblingJobSpec) MarshalJSON() ([]byte, error) {
	toSerialize := map[string]interface{}{}
	if true {
		toSerialize["source"] = o.Source
	}
	if true {
		toSerialize["predictions"] = o.Predictions
	}
	if true {
		toSerialize["ensembler"] = o.Ensembler
	}
	if true {
		toSerialize["sink"] = o.Sink
	}
	return json.Marshal(toSerialize)
}

type NullableEnsemblingJobSpec struct {
	value *EnsemblingJobSpec
	isSet bool
}

func (v NullableEnsemblingJobSpec) Get() *EnsemblingJobSpec {
	return v.value
}

func (v *NullableEnsemblingJobSpec) Set(val *EnsemblingJobSpec) {
	v.value = val
	v.isSet = true
}

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

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

func NewNullableEnsemblingJobSpec(val *EnsemblingJobSpec) *NullableEnsemblingJobSpec {
	return &NullableEnsemblingJobSpec{value: val, isSet: true}
}

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

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


