/*
Libre Graph API

Libre Graph is a free API for cloud collaboration inspired by the MS Graph API.

API version: v1.0.8
*/

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

package libregraph

import (
	"encoding/json"
)

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

// Video The video resource groups video-related data items into a single structure.  If a driveItem has a non-null video facet, the item represents a video file. The properties of the video resource are populated by extracting metadata from the file. 
type Video struct {
	// Number of audio bits per sample.
	AudioBitsPerSample *int32 `json:"audioBitsPerSample,omitempty"`
	// Number of audio channels.
	AudioChannels *int32 `json:"audioChannels,omitempty"`
	// Name of the audio format (AAC, MP3, etc.).
	AudioFormat *string `json:"audioFormat,omitempty"`
	// Number of audio samples per second.
	AudioSamplesPerSecond *int32 `json:"audioSamplesPerSecond,omitempty"`
	// Bit rate of the video in bits per second.
	Bitrate *int32 `json:"bitrate,omitempty"`
	// Duration of the file in milliseconds.
	Duration *int64 `json:"duration,omitempty"`
	// \\\"Four character code\\\" name of the video format.
	FourCC *string `json:"fourCC,omitempty"`
	// Frame rate of the video.
	FrameRate *float64 `json:"frameRate,omitempty"`
	// Height of the video, in pixels.
	Height *int32 `json:"height,omitempty"`
	// Width of the video, in pixels.
	Width *int32 `json:"width,omitempty"`
}

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

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

// GetAudioBitsPerSample returns the AudioBitsPerSample field value if set, zero value otherwise.
func (o *Video) GetAudioBitsPerSample() int32 {
	if o == nil || IsNil(o.AudioBitsPerSample) {
		var ret int32
		return ret
	}
	return *o.AudioBitsPerSample
}

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

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

	return false
}

// SetAudioBitsPerSample gets a reference to the given int32 and assigns it to the AudioBitsPerSample field.
func (o *Video) SetAudioBitsPerSample(v int32) {
	o.AudioBitsPerSample = &v
}

// GetAudioChannels returns the AudioChannels field value if set, zero value otherwise.
func (o *Video) GetAudioChannels() int32 {
	if o == nil || IsNil(o.AudioChannels) {
		var ret int32
		return ret
	}
	return *o.AudioChannels
}

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

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

	return false
}

// SetAudioChannels gets a reference to the given int32 and assigns it to the AudioChannels field.
func (o *Video) SetAudioChannels(v int32) {
	o.AudioChannels = &v
}

// GetAudioFormat returns the AudioFormat field value if set, zero value otherwise.
func (o *Video) GetAudioFormat() string {
	if o == nil || IsNil(o.AudioFormat) {
		var ret string
		return ret
	}
	return *o.AudioFormat
}

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

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

	return false
}

// SetAudioFormat gets a reference to the given string and assigns it to the AudioFormat field.
func (o *Video) SetAudioFormat(v string) {
	o.AudioFormat = &v
}

// GetAudioSamplesPerSecond returns the AudioSamplesPerSecond field value if set, zero value otherwise.
func (o *Video) GetAudioSamplesPerSecond() int32 {
	if o == nil || IsNil(o.AudioSamplesPerSecond) {
		var ret int32
		return ret
	}
	return *o.AudioSamplesPerSecond
}

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

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

	return false
}

// SetAudioSamplesPerSecond gets a reference to the given int32 and assigns it to the AudioSamplesPerSecond field.
func (o *Video) SetAudioSamplesPerSecond(v int32) {
	o.AudioSamplesPerSecond = &v
}

// GetBitrate returns the Bitrate field value if set, zero value otherwise.
func (o *Video) GetBitrate() int32 {
	if o == nil || IsNil(o.Bitrate) {
		var ret int32
		return ret
	}
	return *o.Bitrate
}

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

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

	return false
}

// SetBitrate gets a reference to the given int32 and assigns it to the Bitrate field.
func (o *Video) SetBitrate(v int32) {
	o.Bitrate = &v
}

// GetDuration returns the Duration field value if set, zero value otherwise.
func (o *Video) GetDuration() int64 {
	if o == nil || IsNil(o.Duration) {
		var ret int64
		return ret
	}
	return *o.Duration
}

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

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

	return false
}

// SetDuration gets a reference to the given int64 and assigns it to the Duration field.
func (o *Video) SetDuration(v int64) {
	o.Duration = &v
}

// GetFourCC returns the FourCC field value if set, zero value otherwise.
func (o *Video) GetFourCC() string {
	if o == nil || IsNil(o.FourCC) {
		var ret string
		return ret
	}
	return *o.FourCC
}

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

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

	return false
}

// SetFourCC gets a reference to the given string and assigns it to the FourCC field.
func (o *Video) SetFourCC(v string) {
	o.FourCC = &v
}

// GetFrameRate returns the FrameRate field value if set, zero value otherwise.
func (o *Video) GetFrameRate() float64 {
	if o == nil || IsNil(o.FrameRate) {
		var ret float64
		return ret
	}
	return *o.FrameRate
}

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

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

	return false
}

// SetFrameRate gets a reference to the given float64 and assigns it to the FrameRate field.
func (o *Video) SetFrameRate(v float64) {
	o.FrameRate = &v
}

// GetHeight returns the Height field value if set, zero value otherwise.
func (o *Video) GetHeight() int32 {
	if o == nil || IsNil(o.Height) {
		var ret int32
		return ret
	}
	return *o.Height
}

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

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

	return false
}

// SetHeight gets a reference to the given int32 and assigns it to the Height field.
func (o *Video) SetHeight(v int32) {
	o.Height = &v
}

// GetWidth returns the Width field value if set, zero value otherwise.
func (o *Video) GetWidth() int32 {
	if o == nil || IsNil(o.Width) {
		var ret int32
		return ret
	}
	return *o.Width
}

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

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

	return false
}

// SetWidth gets a reference to the given int32 and assigns it to the Width field.
func (o *Video) SetWidth(v int32) {
	o.Width = &v
}

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

func (o Video) ToMap() (map[string]interface{}, error) {
	toSerialize := map[string]interface{}{}
	if !IsNil(o.AudioBitsPerSample) {
		toSerialize["audioBitsPerSample"] = o.AudioBitsPerSample
	}
	if !IsNil(o.AudioChannels) {
		toSerialize["audioChannels"] = o.AudioChannels
	}
	if !IsNil(o.AudioFormat) {
		toSerialize["audioFormat"] = o.AudioFormat
	}
	if !IsNil(o.AudioSamplesPerSecond) {
		toSerialize["audioSamplesPerSecond"] = o.AudioSamplesPerSecond
	}
	if !IsNil(o.Bitrate) {
		toSerialize["bitrate"] = o.Bitrate
	}
	if !IsNil(o.Duration) {
		toSerialize["duration"] = o.Duration
	}
	if !IsNil(o.FourCC) {
		toSerialize["fourCC"] = o.FourCC
	}
	if !IsNil(o.FrameRate) {
		toSerialize["frameRate"] = o.FrameRate
	}
	if !IsNil(o.Height) {
		toSerialize["height"] = o.Height
	}
	if !IsNil(o.Width) {
		toSerialize["width"] = o.Width
	}
	return toSerialize, nil
}

type NullableVideo struct {
	value *Video
	isSet bool
}

func (v NullableVideo) Get() *Video {
	return v.value
}

func (v *NullableVideo) Set(val *Video) {
	v.value = val
	v.isSet = true
}

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

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

func NewNullableVideo(val *Video) *NullableVideo {
	return &NullableVideo{value: val, isSet: true}
}

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

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


