/*
 * 3DS OUTSCALE API
 *
 * Welcome to the OUTSCALE API documentation.<br /> The OUTSCALE API enables you to manage your resources in the OUTSCALE Cloud. This documentation describes the different actions available along with code examples.<br /><br /> Throttling: To protect against overloads, the number of identical requests allowed in a given time period is limited.<br /> Brute force: To protect against brute force attacks, the number of failed authentication attempts in a given time period is limited.<br /><br /> Note that the OUTSCALE Cloud is compatible with Amazon Web Services (AWS) APIs, but there are [differences in resource names](https://docs.outscale.com/en/userguide/About-the-APIs.html) between AWS and the OUTSCALE API.<br /> You can also manage your resources using the [Cockpit](https://docs.outscale.com/en/userguide/About-Cockpit.html) web interface.<br /><br /> An OpenAPI description of this API is also available for download: <button>[GitHub repository](https://github.com/outscale/osc-api)</button><br /> # Authentication Schemes ### Access Key/Secret Key The main way to authenticate your requests to the OUTSCALE API is to use an access key and a secret key.<br /> The mechanism behind this is based on AWS Signature Version 4, whose technical implementation details are described in [Signature of API Requests](https://docs.outscale.com/en/userguide/Signature-of-API-Requests.html).<br /><br /> In practice, the way to specify your access key and secret key depends on the tool or SDK you want to use to interact with the API.<br />  > For example, if you use OSC CLI: > 1. You need to create an **~/.osc/config.json** file to specify your access key, secret key, and the Region of your account. > 2. You then specify the `--profile` option when executing OSC CLI commands. > > For more information, see [Installing and Configuring OSC CLI](https://docs.outscale.com/en/userguide/Installing-and-Configuring-OSC-CLI.html).  See the code samples in each section of this documentation for specific examples in different programming languages.<br /> For more information about access keys, see [About Access Keys](https://docs.outscale.com/en/userguide/About-Access-Keys.html).  > If you try to sign requests with an invalid access key four times in a row, further authentication attempts will be prevented for 1 minute. This lockout time increases 1 minute every four failed attempts, for up to 10 minutes.  ### Login/Password For certain API actions, you can also use basic authentication with the login (email address) and password of your OUTSCALE account.<br /> This is useful only in special circumstances, for example if you do not know your access key/secret key and want to retrieve them programmatically.<br /> In most cases, however, you can use the Cockpit web interface to retrieve them.<br />  > For example, if you use OSC CLI: > 1. You need to create an **~/.osc/config.json** file to specify the Region of your account, but you leave the access key value and secret key value empty (`&quot;&quot;`). > 2. You then specify the `--profile`, `--authentication-method`, `--login`, and `--password` options when executing OSC CLI commands.  See the code samples in each section of this documentation for specific examples in different programming languages.  > If you try to sign requests with an invalid password four times in a row, further authentication attempts will be prevented for 1 minute. This lockout time increases 1 minute every four failed attempts, for up to 10 minutes.  ### No Authentication A few API actions do not require any authentication. They are indicated as such in this documentation.<br /> ### Other Security Mechanisms In parallel with the authentication schemes, you can add other security mechanisms to your OUTSCALE account, for example to restrict API requests by IP or other criteria.<br /> For more information, see [Managing Your API Accesses](https://docs.outscale.com/en/userguide/Managing-Your-API-Accesses.html). # Pagination Tutorial You can learn more about the pagination methods for read calls in the dedicated [pagination tutorial](https://docs.outscale.com/en/userguide/Tutorial-Paginating-an-API-Request.html). # Error Codes Reference You can learn more about errors returned by the API in the dedicated [errors page](api-errors.html).
 *
 * API version: 1.41.0
 * Contact: support@outscale.com
 */

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

package osc

import (
	"encoding/json"
)

// FiltersVmType One or more filters.
type FiltersVmType struct {
	// This parameter is not available. It is present in our API for the sake of historical compatibility with AWS.
	BsuOptimized *bool `json:"BsuOptimized,omitempty"`
	// The types of ephemeral storage disk.
	EphemeralsTypes *[]string `json:"EphemeralsTypes,omitempty"`
	// The number of Ethernet interfaces available.
	Eths *[]int32 `json:"Eths,omitempty"`
	// The number of GPUs available.
	Gpus *[]int32 `json:"Gpus,omitempty"`
	// The amounts of memory, in gibibytes (GiB).
	MemorySizes *[]float32 `json:"MemorySizes,omitempty"`
	// The numbers of vCores.
	VcoreCounts *[]int32 `json:"VcoreCounts,omitempty"`
	// The names of the VM types. For more information, see [VM Types](https://docs.outscale.com/en/userguide/VM-Types.html).
	VmTypeNames *[]string `json:"VmTypeNames,omitempty"`
	// The maximum number of ephemeral storage disks.
	VolumeCounts *[]int32 `json:"VolumeCounts,omitempty"`
	// The size of one ephemeral storage disk, in gibibytes (GiB).
	VolumeSizes *[]int32 `json:"VolumeSizes,omitempty"`
}

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

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

// GetBsuOptimized returns the BsuOptimized field value if set, zero value otherwise.
func (o *FiltersVmType) GetBsuOptimized() bool {
	if o == nil || o.BsuOptimized == nil {
		var ret bool
		return ret
	}
	return *o.BsuOptimized
}

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

// HasBsuOptimized returns a boolean if a field has been set.
func (o *FiltersVmType) HasBsuOptimized() bool {
	if o != nil && o.BsuOptimized != nil {
		return true
	}

	return false
}

// SetBsuOptimized gets a reference to the given bool and assigns it to the BsuOptimized field.
func (o *FiltersVmType) SetBsuOptimized(v bool) {
	o.BsuOptimized = &v
}

// GetEphemeralsTypes returns the EphemeralsTypes field value if set, zero value otherwise.
func (o *FiltersVmType) GetEphemeralsTypes() []string {
	if o == nil || o.EphemeralsTypes == nil {
		var ret []string
		return ret
	}
	return *o.EphemeralsTypes
}

// GetEphemeralsTypesOk returns a tuple with the EphemeralsTypes field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *FiltersVmType) GetEphemeralsTypesOk() (*[]string, bool) {
	if o == nil || o.EphemeralsTypes == nil {
		return nil, false
	}
	return o.EphemeralsTypes, true
}

// HasEphemeralsTypes returns a boolean if a field has been set.
func (o *FiltersVmType) HasEphemeralsTypes() bool {
	if o != nil && o.EphemeralsTypes != nil {
		return true
	}

	return false
}

// SetEphemeralsTypes gets a reference to the given []string and assigns it to the EphemeralsTypes field.
func (o *FiltersVmType) SetEphemeralsTypes(v []string) {
	o.EphemeralsTypes = &v
}

// GetEths returns the Eths field value if set, zero value otherwise.
func (o *FiltersVmType) GetEths() []int32 {
	if o == nil || o.Eths == nil {
		var ret []int32
		return ret
	}
	return *o.Eths
}

// GetEthsOk returns a tuple with the Eths field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *FiltersVmType) GetEthsOk() (*[]int32, bool) {
	if o == nil || o.Eths == nil {
		return nil, false
	}
	return o.Eths, true
}

// HasEths returns a boolean if a field has been set.
func (o *FiltersVmType) HasEths() bool {
	if o != nil && o.Eths != nil {
		return true
	}

	return false
}

// SetEths gets a reference to the given []int32 and assigns it to the Eths field.
func (o *FiltersVmType) SetEths(v []int32) {
	o.Eths = &v
}

// GetGpus returns the Gpus field value if set, zero value otherwise.
func (o *FiltersVmType) GetGpus() []int32 {
	if o == nil || o.Gpus == nil {
		var ret []int32
		return ret
	}
	return *o.Gpus
}

// GetGpusOk returns a tuple with the Gpus field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *FiltersVmType) GetGpusOk() (*[]int32, bool) {
	if o == nil || o.Gpus == nil {
		return nil, false
	}
	return o.Gpus, true
}

// HasGpus returns a boolean if a field has been set.
func (o *FiltersVmType) HasGpus() bool {
	if o != nil && o.Gpus != nil {
		return true
	}

	return false
}

// SetGpus gets a reference to the given []int32 and assigns it to the Gpus field.
func (o *FiltersVmType) SetGpus(v []int32) {
	o.Gpus = &v
}

// GetMemorySizes returns the MemorySizes field value if set, zero value otherwise.
func (o *FiltersVmType) GetMemorySizes() []float32 {
	if o == nil || o.MemorySizes == nil {
		var ret []float32
		return ret
	}
	return *o.MemorySizes
}

// GetMemorySizesOk returns a tuple with the MemorySizes field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *FiltersVmType) GetMemorySizesOk() (*[]float32, bool) {
	if o == nil || o.MemorySizes == nil {
		return nil, false
	}
	return o.MemorySizes, true
}

// HasMemorySizes returns a boolean if a field has been set.
func (o *FiltersVmType) HasMemorySizes() bool {
	if o != nil && o.MemorySizes != nil {
		return true
	}

	return false
}

// SetMemorySizes gets a reference to the given []float32 and assigns it to the MemorySizes field.
func (o *FiltersVmType) SetMemorySizes(v []float32) {
	o.MemorySizes = &v
}

// GetVcoreCounts returns the VcoreCounts field value if set, zero value otherwise.
func (o *FiltersVmType) GetVcoreCounts() []int32 {
	if o == nil || o.VcoreCounts == nil {
		var ret []int32
		return ret
	}
	return *o.VcoreCounts
}

// GetVcoreCountsOk returns a tuple with the VcoreCounts field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *FiltersVmType) GetVcoreCountsOk() (*[]int32, bool) {
	if o == nil || o.VcoreCounts == nil {
		return nil, false
	}
	return o.VcoreCounts, true
}

// HasVcoreCounts returns a boolean if a field has been set.
func (o *FiltersVmType) HasVcoreCounts() bool {
	if o != nil && o.VcoreCounts != nil {
		return true
	}

	return false
}

// SetVcoreCounts gets a reference to the given []int32 and assigns it to the VcoreCounts field.
func (o *FiltersVmType) SetVcoreCounts(v []int32) {
	o.VcoreCounts = &v
}

// GetVmTypeNames returns the VmTypeNames field value if set, zero value otherwise.
func (o *FiltersVmType) GetVmTypeNames() []string {
	if o == nil || o.VmTypeNames == nil {
		var ret []string
		return ret
	}
	return *o.VmTypeNames
}

// GetVmTypeNamesOk returns a tuple with the VmTypeNames field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *FiltersVmType) GetVmTypeNamesOk() (*[]string, bool) {
	if o == nil || o.VmTypeNames == nil {
		return nil, false
	}
	return o.VmTypeNames, true
}

// HasVmTypeNames returns a boolean if a field has been set.
func (o *FiltersVmType) HasVmTypeNames() bool {
	if o != nil && o.VmTypeNames != nil {
		return true
	}

	return false
}

// SetVmTypeNames gets a reference to the given []string and assigns it to the VmTypeNames field.
func (o *FiltersVmType) SetVmTypeNames(v []string) {
	o.VmTypeNames = &v
}

// GetVolumeCounts returns the VolumeCounts field value if set, zero value otherwise.
func (o *FiltersVmType) GetVolumeCounts() []int32 {
	if o == nil || o.VolumeCounts == nil {
		var ret []int32
		return ret
	}
	return *o.VolumeCounts
}

// GetVolumeCountsOk returns a tuple with the VolumeCounts field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *FiltersVmType) GetVolumeCountsOk() (*[]int32, bool) {
	if o == nil || o.VolumeCounts == nil {
		return nil, false
	}
	return o.VolumeCounts, true
}

// HasVolumeCounts returns a boolean if a field has been set.
func (o *FiltersVmType) HasVolumeCounts() bool {
	if o != nil && o.VolumeCounts != nil {
		return true
	}

	return false
}

// SetVolumeCounts gets a reference to the given []int32 and assigns it to the VolumeCounts field.
func (o *FiltersVmType) SetVolumeCounts(v []int32) {
	o.VolumeCounts = &v
}

// GetVolumeSizes returns the VolumeSizes field value if set, zero value otherwise.
func (o *FiltersVmType) GetVolumeSizes() []int32 {
	if o == nil || o.VolumeSizes == nil {
		var ret []int32
		return ret
	}
	return *o.VolumeSizes
}

// GetVolumeSizesOk returns a tuple with the VolumeSizes field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *FiltersVmType) GetVolumeSizesOk() (*[]int32, bool) {
	if o == nil || o.VolumeSizes == nil {
		return nil, false
	}
	return o.VolumeSizes, true
}

// HasVolumeSizes returns a boolean if a field has been set.
func (o *FiltersVmType) HasVolumeSizes() bool {
	if o != nil && o.VolumeSizes != nil {
		return true
	}

	return false
}

// SetVolumeSizes gets a reference to the given []int32 and assigns it to the VolumeSizes field.
func (o *FiltersVmType) SetVolumeSizes(v []int32) {
	o.VolumeSizes = &v
}

func (o FiltersVmType) MarshalJSON() ([]byte, error) {
	toSerialize := map[string]interface{}{}
	if o.BsuOptimized != nil {
		toSerialize["BsuOptimized"] = o.BsuOptimized
	}
	if o.EphemeralsTypes != nil {
		toSerialize["EphemeralsTypes"] = o.EphemeralsTypes
	}
	if o.Eths != nil {
		toSerialize["Eths"] = o.Eths
	}
	if o.Gpus != nil {
		toSerialize["Gpus"] = o.Gpus
	}
	if o.MemorySizes != nil {
		toSerialize["MemorySizes"] = o.MemorySizes
	}
	if o.VcoreCounts != nil {
		toSerialize["VcoreCounts"] = o.VcoreCounts
	}
	if o.VmTypeNames != nil {
		toSerialize["VmTypeNames"] = o.VmTypeNames
	}
	if o.VolumeCounts != nil {
		toSerialize["VolumeCounts"] = o.VolumeCounts
	}
	if o.VolumeSizes != nil {
		toSerialize["VolumeSizes"] = o.VolumeSizes
	}
	return json.Marshal(toSerialize)
}

type NullableFiltersVmType struct {
	value *FiltersVmType
	isSet bool
}

func (v NullableFiltersVmType) Get() *FiltersVmType {
	return v.value
}

func (v *NullableFiltersVmType) Set(val *FiltersVmType) {
	v.value = val
	v.isSet = true
}

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

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

func NewNullableFiltersVmType(val *FiltersVmType) *NullableFiltersVmType {
	return &NullableFiltersVmType{value: val, isSet: true}
}

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

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