/*
Daytona

Daytona AI platform API Docs

API version: 1.0
Contact: support@daytona.com
*/

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

package apiclient

import (
	"encoding/json"
	"fmt"
)

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

// Workspace struct for Workspace
type Workspace struct {
	// The ID of the sandbox
	Id string `json:"id"`
	// The organization ID of the sandbox
	OrganizationId string `json:"organizationId"`
	// The name of the sandbox
	Name string `json:"name"`
	// The snapshot used for the sandbox
	Snapshot *string `json:"snapshot,omitempty"`
	// The user associated with the project
	User string `json:"user"`
	// Environment variables for the sandbox
	Env map[string]string `json:"env"`
	// Labels for the sandbox
	Labels map[string]string `json:"labels"`
	// Whether the sandbox http preview is public
	Public bool `json:"public"`
	// Whether to block all network access for the sandbox
	NetworkBlockAll bool `json:"networkBlockAll"`
	// Comma-separated list of allowed CIDR network addresses for the sandbox
	NetworkAllowList *string `json:"networkAllowList,omitempty"`
	// The target environment for the sandbox
	Target string `json:"target"`
	// The CPU quota for the sandbox
	Cpu float32 `json:"cpu"`
	// The GPU quota for the sandbox
	Gpu float32 `json:"gpu"`
	// The memory quota for the sandbox
	Memory float32 `json:"memory"`
	// The disk quota for the sandbox
	Disk float32 `json:"disk"`
	// The state of the sandbox
	State *SandboxState `json:"state,omitempty"`
	// The desired state of the sandbox
	DesiredState *SandboxDesiredState `json:"desiredState,omitempty"`
	// The error reason of the sandbox
	ErrorReason *string `json:"errorReason,omitempty"`
	// Whether the sandbox error is recoverable.
	Recoverable *bool `json:"recoverable,omitempty"`
	// The state of the backup
	BackupState *string `json:"backupState,omitempty"`
	// The creation timestamp of the last backup
	BackupCreatedAt *string `json:"backupCreatedAt,omitempty"`
	// Auto-stop interval in minutes (0 means disabled)
	AutoStopInterval *float32 `json:"autoStopInterval,omitempty"`
	// Auto-archive interval in minutes
	AutoArchiveInterval *float32 `json:"autoArchiveInterval,omitempty"`
	// Auto-delete interval in minutes (negative value means disabled, 0 means delete immediately upon stopping)
	AutoDeleteInterval *float32 `json:"autoDeleteInterval,omitempty"`
	// Array of volumes attached to the sandbox
	Volumes []SandboxVolume `json:"volumes,omitempty"`
	// Build information for the sandbox
	BuildInfo *BuildInfo `json:"buildInfo,omitempty"`
	// The creation timestamp of the sandbox
	CreatedAt *string `json:"createdAt,omitempty"`
	// The last update timestamp of the sandbox
	UpdatedAt *string `json:"updatedAt,omitempty"`
	// The last activity timestamp of the sandbox
	LastActivityAt *string `json:"lastActivityAt,omitempty"`
	// The class of the sandbox
	// Deprecated
	Class *string `json:"class,omitempty"`
	// The version of the daemon running in the sandbox
	DaemonVersion *string `json:"daemonVersion,omitempty"`
	// The runner ID of the sandbox
	RunnerId *string `json:"runnerId,omitempty"`
	// The toolbox proxy URL for the sandbox
	ToolboxProxyUrl string `json:"toolboxProxyUrl"`
	// The image used for the workspace
	Image *string `json:"image,omitempty"`
	// The state of the snapshot
	SnapshotState *string `json:"snapshotState,omitempty"`
	// The creation timestamp of the last snapshot
	SnapshotCreatedAt *string `json:"snapshotCreatedAt,omitempty"`
	// Additional information about the sandbox
	Info *SandboxInfo `json:"info,omitempty"`
	AdditionalProperties map[string]interface{}
}

type _Workspace Workspace

// NewWorkspace instantiates a new Workspace 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 NewWorkspace(id string, organizationId string, name string, user string, env map[string]string, labels map[string]string, public bool, networkBlockAll bool, target string, cpu float32, gpu float32, memory float32, disk float32, toolboxProxyUrl string) *Workspace {
	this := Workspace{}
	this.Id = id
	this.OrganizationId = organizationId
	this.Name = name
	this.User = user
	this.Env = env
	this.Labels = labels
	this.Public = public
	this.NetworkBlockAll = networkBlockAll
	this.Target = target
	this.Cpu = cpu
	this.Gpu = gpu
	this.Memory = memory
	this.Disk = disk
	this.ToolboxProxyUrl = toolboxProxyUrl
	return &this
}

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

// GetId returns the Id field value
func (o *Workspace) GetId() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.Id
}

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

// SetId sets field value
func (o *Workspace) SetId(v string) {
	o.Id = v
}

// GetOrganizationId returns the OrganizationId field value
func (o *Workspace) GetOrganizationId() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.OrganizationId
}

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

// SetOrganizationId sets field value
func (o *Workspace) SetOrganizationId(v string) {
	o.OrganizationId = v
}

// GetName returns the Name field value
func (o *Workspace) GetName() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.Name
}

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

// SetName sets field value
func (o *Workspace) SetName(v string) {
	o.Name = v
}

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

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

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

	return false
}

// SetSnapshot gets a reference to the given string and assigns it to the Snapshot field.
func (o *Workspace) SetSnapshot(v string) {
	o.Snapshot = &v
}

// GetUser returns the User field value
func (o *Workspace) GetUser() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.User
}

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

// SetUser sets field value
func (o *Workspace) SetUser(v string) {
	o.User = v
}

// GetEnv returns the Env field value
func (o *Workspace) GetEnv() map[string]string {
	if o == nil {
		var ret map[string]string
		return ret
	}

	return o.Env
}

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

// SetEnv sets field value
func (o *Workspace) SetEnv(v map[string]string) {
	o.Env = v
}

// GetLabels returns the Labels field value
func (o *Workspace) GetLabels() map[string]string {
	if o == nil {
		var ret map[string]string
		return ret
	}

	return o.Labels
}

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

// SetLabels sets field value
func (o *Workspace) SetLabels(v map[string]string) {
	o.Labels = v
}

// GetPublic returns the Public field value
func (o *Workspace) GetPublic() bool {
	if o == nil {
		var ret bool
		return ret
	}

	return o.Public
}

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

// SetPublic sets field value
func (o *Workspace) SetPublic(v bool) {
	o.Public = v
}

// GetNetworkBlockAll returns the NetworkBlockAll field value
func (o *Workspace) GetNetworkBlockAll() bool {
	if o == nil {
		var ret bool
		return ret
	}

	return o.NetworkBlockAll
}

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

// SetNetworkBlockAll sets field value
func (o *Workspace) SetNetworkBlockAll(v bool) {
	o.NetworkBlockAll = v
}

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

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

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

	return false
}

// SetNetworkAllowList gets a reference to the given string and assigns it to the NetworkAllowList field.
func (o *Workspace) SetNetworkAllowList(v string) {
	o.NetworkAllowList = &v
}

// GetTarget returns the Target field value
func (o *Workspace) GetTarget() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.Target
}

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

// SetTarget sets field value
func (o *Workspace) SetTarget(v string) {
	o.Target = v
}

// GetCpu returns the Cpu field value
func (o *Workspace) GetCpu() float32 {
	if o == nil {
		var ret float32
		return ret
	}

	return o.Cpu
}

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

// SetCpu sets field value
func (o *Workspace) SetCpu(v float32) {
	o.Cpu = v
}

// GetGpu returns the Gpu field value
func (o *Workspace) GetGpu() float32 {
	if o == nil {
		var ret float32
		return ret
	}

	return o.Gpu
}

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

// SetGpu sets field value
func (o *Workspace) SetGpu(v float32) {
	o.Gpu = v
}

// GetMemory returns the Memory field value
func (o *Workspace) GetMemory() float32 {
	if o == nil {
		var ret float32
		return ret
	}

	return o.Memory
}

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

// SetMemory sets field value
func (o *Workspace) SetMemory(v float32) {
	o.Memory = v
}

// GetDisk returns the Disk field value
func (o *Workspace) GetDisk() float32 {
	if o == nil {
		var ret float32
		return ret
	}

	return o.Disk
}

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

// SetDisk sets field value
func (o *Workspace) SetDisk(v float32) {
	o.Disk = v
}

// GetState returns the State field value if set, zero value otherwise.
func (o *Workspace) GetState() SandboxState {
	if o == nil || IsNil(o.State) {
		var ret SandboxState
		return ret
	}
	return *o.State
}

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

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

	return false
}

// SetState gets a reference to the given SandboxState and assigns it to the State field.
func (o *Workspace) SetState(v SandboxState) {
	o.State = &v
}

// GetDesiredState returns the DesiredState field value if set, zero value otherwise.
func (o *Workspace) GetDesiredState() SandboxDesiredState {
	if o == nil || IsNil(o.DesiredState) {
		var ret SandboxDesiredState
		return ret
	}
	return *o.DesiredState
}

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

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

	return false
}

// SetDesiredState gets a reference to the given SandboxDesiredState and assigns it to the DesiredState field.
func (o *Workspace) SetDesiredState(v SandboxDesiredState) {
	o.DesiredState = &v
}

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

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

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

	return false
}

// SetErrorReason gets a reference to the given string and assigns it to the ErrorReason field.
func (o *Workspace) SetErrorReason(v string) {
	o.ErrorReason = &v
}

// GetRecoverable returns the Recoverable field value if set, zero value otherwise.
func (o *Workspace) GetRecoverable() bool {
	if o == nil || IsNil(o.Recoverable) {
		var ret bool
		return ret
	}
	return *o.Recoverable
}

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

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

	return false
}

// SetRecoverable gets a reference to the given bool and assigns it to the Recoverable field.
func (o *Workspace) SetRecoverable(v bool) {
	o.Recoverable = &v
}

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

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

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

	return false
}

// SetBackupState gets a reference to the given string and assigns it to the BackupState field.
func (o *Workspace) SetBackupState(v string) {
	o.BackupState = &v
}

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

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

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

	return false
}

// SetBackupCreatedAt gets a reference to the given string and assigns it to the BackupCreatedAt field.
func (o *Workspace) SetBackupCreatedAt(v string) {
	o.BackupCreatedAt = &v
}

// GetAutoStopInterval returns the AutoStopInterval field value if set, zero value otherwise.
func (o *Workspace) GetAutoStopInterval() float32 {
	if o == nil || IsNil(o.AutoStopInterval) {
		var ret float32
		return ret
	}
	return *o.AutoStopInterval
}

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

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

	return false
}

// SetAutoStopInterval gets a reference to the given float32 and assigns it to the AutoStopInterval field.
func (o *Workspace) SetAutoStopInterval(v float32) {
	o.AutoStopInterval = &v
}

// GetAutoArchiveInterval returns the AutoArchiveInterval field value if set, zero value otherwise.
func (o *Workspace) GetAutoArchiveInterval() float32 {
	if o == nil || IsNil(o.AutoArchiveInterval) {
		var ret float32
		return ret
	}
	return *o.AutoArchiveInterval
}

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

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

	return false
}

// SetAutoArchiveInterval gets a reference to the given float32 and assigns it to the AutoArchiveInterval field.
func (o *Workspace) SetAutoArchiveInterval(v float32) {
	o.AutoArchiveInterval = &v
}

// GetAutoDeleteInterval returns the AutoDeleteInterval field value if set, zero value otherwise.
func (o *Workspace) GetAutoDeleteInterval() float32 {
	if o == nil || IsNil(o.AutoDeleteInterval) {
		var ret float32
		return ret
	}
	return *o.AutoDeleteInterval
}

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

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

	return false
}

// SetAutoDeleteInterval gets a reference to the given float32 and assigns it to the AutoDeleteInterval field.
func (o *Workspace) SetAutoDeleteInterval(v float32) {
	o.AutoDeleteInterval = &v
}

// GetVolumes returns the Volumes field value if set, zero value otherwise.
func (o *Workspace) GetVolumes() []SandboxVolume {
	if o == nil || IsNil(o.Volumes) {
		var ret []SandboxVolume
		return ret
	}
	return o.Volumes
}

// GetVolumesOk returns a tuple with the Volumes field value if set, nil otherwise
// and a boolean to check if the value has been set.
func (o *Workspace) GetVolumesOk() ([]SandboxVolume, bool) {
	if o == nil || IsNil(o.Volumes) {
		return nil, false
	}
	return o.Volumes, true
}

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

	return false
}

// SetVolumes gets a reference to the given []SandboxVolume and assigns it to the Volumes field.
func (o *Workspace) SetVolumes(v []SandboxVolume) {
	o.Volumes = v
}

// GetBuildInfo returns the BuildInfo field value if set, zero value otherwise.
func (o *Workspace) GetBuildInfo() BuildInfo {
	if o == nil || IsNil(o.BuildInfo) {
		var ret BuildInfo
		return ret
	}
	return *o.BuildInfo
}

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

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

	return false
}

// SetBuildInfo gets a reference to the given BuildInfo and assigns it to the BuildInfo field.
func (o *Workspace) SetBuildInfo(v BuildInfo) {
	o.BuildInfo = &v
}

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

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

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

	return false
}

// SetCreatedAt gets a reference to the given string and assigns it to the CreatedAt field.
func (o *Workspace) SetCreatedAt(v string) {
	o.CreatedAt = &v
}

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

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

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

	return false
}

// SetUpdatedAt gets a reference to the given string and assigns it to the UpdatedAt field.
func (o *Workspace) SetUpdatedAt(v string) {
	o.UpdatedAt = &v
}

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

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

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

	return false
}

// SetLastActivityAt gets a reference to the given string and assigns it to the LastActivityAt field.
func (o *Workspace) SetLastActivityAt(v string) {
	o.LastActivityAt = &v
}

// GetClass returns the Class field value if set, zero value otherwise.
// Deprecated
func (o *Workspace) GetClass() string {
	if o == nil || IsNil(o.Class) {
		var ret string
		return ret
	}
	return *o.Class
}

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

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

	return false
}

// SetClass gets a reference to the given string and assigns it to the Class field.
// Deprecated
func (o *Workspace) SetClass(v string) {
	o.Class = &v
}

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

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

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

	return false
}

// SetDaemonVersion gets a reference to the given string and assigns it to the DaemonVersion field.
func (o *Workspace) SetDaemonVersion(v string) {
	o.DaemonVersion = &v
}

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

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

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

	return false
}

// SetRunnerId gets a reference to the given string and assigns it to the RunnerId field.
func (o *Workspace) SetRunnerId(v string) {
	o.RunnerId = &v
}

// GetToolboxProxyUrl returns the ToolboxProxyUrl field value
func (o *Workspace) GetToolboxProxyUrl() string {
	if o == nil {
		var ret string
		return ret
	}

	return o.ToolboxProxyUrl
}

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

// SetToolboxProxyUrl sets field value
func (o *Workspace) SetToolboxProxyUrl(v string) {
	o.ToolboxProxyUrl = v
}

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

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

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

	return false
}

// SetImage gets a reference to the given string and assigns it to the Image field.
func (o *Workspace) SetImage(v string) {
	o.Image = &v
}

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

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

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

	return false
}

// SetSnapshotState gets a reference to the given string and assigns it to the SnapshotState field.
func (o *Workspace) SetSnapshotState(v string) {
	o.SnapshotState = &v
}

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

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

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

	return false
}

// SetSnapshotCreatedAt gets a reference to the given string and assigns it to the SnapshotCreatedAt field.
func (o *Workspace) SetSnapshotCreatedAt(v string) {
	o.SnapshotCreatedAt = &v
}

// GetInfo returns the Info field value if set, zero value otherwise.
func (o *Workspace) GetInfo() SandboxInfo {
	if o == nil || IsNil(o.Info) {
		var ret SandboxInfo
		return ret
	}
	return *o.Info
}

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

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

	return false
}

// SetInfo gets a reference to the given SandboxInfo and assigns it to the Info field.
func (o *Workspace) SetInfo(v SandboxInfo) {
	o.Info = &v
}

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

func (o Workspace) ToMap() (map[string]interface{}, error) {
	toSerialize := map[string]interface{}{}
	toSerialize["id"] = o.Id
	toSerialize["organizationId"] = o.OrganizationId
	toSerialize["name"] = o.Name
	if !IsNil(o.Snapshot) {
		toSerialize["snapshot"] = o.Snapshot
	}
	toSerialize["user"] = o.User
	toSerialize["env"] = o.Env
	toSerialize["labels"] = o.Labels
	toSerialize["public"] = o.Public
	toSerialize["networkBlockAll"] = o.NetworkBlockAll
	if !IsNil(o.NetworkAllowList) {
		toSerialize["networkAllowList"] = o.NetworkAllowList
	}
	toSerialize["target"] = o.Target
	toSerialize["cpu"] = o.Cpu
	toSerialize["gpu"] = o.Gpu
	toSerialize["memory"] = o.Memory
	toSerialize["disk"] = o.Disk
	if !IsNil(o.State) {
		toSerialize["state"] = o.State
	}
	if !IsNil(o.DesiredState) {
		toSerialize["desiredState"] = o.DesiredState
	}
	if !IsNil(o.ErrorReason) {
		toSerialize["errorReason"] = o.ErrorReason
	}
	if !IsNil(o.Recoverable) {
		toSerialize["recoverable"] = o.Recoverable
	}
	if !IsNil(o.BackupState) {
		toSerialize["backupState"] = o.BackupState
	}
	if !IsNil(o.BackupCreatedAt) {
		toSerialize["backupCreatedAt"] = o.BackupCreatedAt
	}
	if !IsNil(o.AutoStopInterval) {
		toSerialize["autoStopInterval"] = o.AutoStopInterval
	}
	if !IsNil(o.AutoArchiveInterval) {
		toSerialize["autoArchiveInterval"] = o.AutoArchiveInterval
	}
	if !IsNil(o.AutoDeleteInterval) {
		toSerialize["autoDeleteInterval"] = o.AutoDeleteInterval
	}
	if !IsNil(o.Volumes) {
		toSerialize["volumes"] = o.Volumes
	}
	if !IsNil(o.BuildInfo) {
		toSerialize["buildInfo"] = o.BuildInfo
	}
	if !IsNil(o.CreatedAt) {
		toSerialize["createdAt"] = o.CreatedAt
	}
	if !IsNil(o.UpdatedAt) {
		toSerialize["updatedAt"] = o.UpdatedAt
	}
	if !IsNil(o.LastActivityAt) {
		toSerialize["lastActivityAt"] = o.LastActivityAt
	}
	if !IsNil(o.Class) {
		toSerialize["class"] = o.Class
	}
	if !IsNil(o.DaemonVersion) {
		toSerialize["daemonVersion"] = o.DaemonVersion
	}
	if !IsNil(o.RunnerId) {
		toSerialize["runnerId"] = o.RunnerId
	}
	toSerialize["toolboxProxyUrl"] = o.ToolboxProxyUrl
	if !IsNil(o.Image) {
		toSerialize["image"] = o.Image
	}
	if !IsNil(o.SnapshotState) {
		toSerialize["snapshotState"] = o.SnapshotState
	}
	if !IsNil(o.SnapshotCreatedAt) {
		toSerialize["snapshotCreatedAt"] = o.SnapshotCreatedAt
	}
	if !IsNil(o.Info) {
		toSerialize["info"] = o.Info
	}

	for key, value := range o.AdditionalProperties {
		toSerialize[key] = value
	}

	return toSerialize, nil
}

func (o *Workspace) UnmarshalJSON(data []byte) (err error) {
	// This validates that all required properties are included in the JSON object
	// by unmarshalling the object into a generic map with string keys and checking
	// that every required field exists as a key in the generic map.
	requiredProperties := []string{
		"id",
		"organizationId",
		"name",
		"user",
		"env",
		"labels",
		"public",
		"networkBlockAll",
		"target",
		"cpu",
		"gpu",
		"memory",
		"disk",
		"toolboxProxyUrl",
	}

	allProperties := make(map[string]interface{})

	err = json.Unmarshal(data, &allProperties)

	if err != nil {
		return err;
	}

	for _, requiredProperty := range(requiredProperties) {
		if _, exists := allProperties[requiredProperty]; !exists {
			return fmt.Errorf("no value given for required property %v", requiredProperty)
		}
	}

	varWorkspace := _Workspace{}

	err = json.Unmarshal(data, &varWorkspace)

	if err != nil {
		return err
	}

	*o = Workspace(varWorkspace)

	additionalProperties := make(map[string]interface{})

	if err = json.Unmarshal(data, &additionalProperties); err == nil {
		delete(additionalProperties, "id")
		delete(additionalProperties, "organizationId")
		delete(additionalProperties, "name")
		delete(additionalProperties, "snapshot")
		delete(additionalProperties, "user")
		delete(additionalProperties, "env")
		delete(additionalProperties, "labels")
		delete(additionalProperties, "public")
		delete(additionalProperties, "networkBlockAll")
		delete(additionalProperties, "networkAllowList")
		delete(additionalProperties, "target")
		delete(additionalProperties, "cpu")
		delete(additionalProperties, "gpu")
		delete(additionalProperties, "memory")
		delete(additionalProperties, "disk")
		delete(additionalProperties, "state")
		delete(additionalProperties, "desiredState")
		delete(additionalProperties, "errorReason")
		delete(additionalProperties, "recoverable")
		delete(additionalProperties, "backupState")
		delete(additionalProperties, "backupCreatedAt")
		delete(additionalProperties, "autoStopInterval")
		delete(additionalProperties, "autoArchiveInterval")
		delete(additionalProperties, "autoDeleteInterval")
		delete(additionalProperties, "volumes")
		delete(additionalProperties, "buildInfo")
		delete(additionalProperties, "createdAt")
		delete(additionalProperties, "updatedAt")
		delete(additionalProperties, "lastActivityAt")
		delete(additionalProperties, "class")
		delete(additionalProperties, "daemonVersion")
		delete(additionalProperties, "runnerId")
		delete(additionalProperties, "toolboxProxyUrl")
		delete(additionalProperties, "image")
		delete(additionalProperties, "snapshotState")
		delete(additionalProperties, "snapshotCreatedAt")
		delete(additionalProperties, "info")
		o.AdditionalProperties = additionalProperties
	}

	return err
}

type NullableWorkspace struct {
	value *Workspace
	isSet bool
}

func (v NullableWorkspace) Get() *Workspace {
	return v.value
}

func (v *NullableWorkspace) Set(val *Workspace) {
	v.value = val
	v.isSet = true
}

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

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

func NewNullableWorkspace(val *Workspace) *NullableWorkspace {
	return &NullableWorkspace{value: val, isSet: true}
}

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

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


