// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

import "encoding/json"

type BackupVaultsBackupPolicy_STATUS struct {
	// Id: Resource Id represents the complete path to the resource.
	Id *string `json:"id,omitempty"`

	// Name: Resource name associated with the resource.
	Name *string `json:"name,omitempty"`

	// Properties: BaseBackupPolicyResource properties
	Properties *BaseBackupPolicy_STATUS `json:"properties,omitempty"`

	// SystemData: Metadata pertaining to creation and last modification of the resource.
	SystemData *SystemData_STATUS `json:"systemData,omitempty"`

	// Type: Resource type represents the complete path of the form Namespace/ResourceType/ResourceType/...
	Type *string `json:"type,omitempty"`
}

type BaseBackupPolicy_STATUS struct {
	// BackupPolicy: Mutually exclusive with all other properties
	BackupPolicy *BackupPolicy_STATUS `json:"backupPolicy,omitempty"`
}

// MarshalJSON defers JSON marshaling to the first non-nil property, because BaseBackupPolicy_STATUS represents a discriminated union (JSON OneOf)
func (policy BaseBackupPolicy_STATUS) MarshalJSON() ([]byte, error) {
	if policy.BackupPolicy != nil {
		return json.Marshal(policy.BackupPolicy)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the BaseBackupPolicy_STATUS
func (policy *BaseBackupPolicy_STATUS) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["objectType"]
	if discriminator == "BackupPolicy" {
		policy.BackupPolicy = &BackupPolicy_STATUS{}
		return json.Unmarshal(data, policy.BackupPolicy)
	}

	// No error
	return nil
}

type BackupPolicy_STATUS struct {
	// DatasourceTypes: Type of datasource for the backup management
	DatasourceTypes []string                       `json:"datasourceTypes,omitempty"`
	ObjectType      BackupPolicy_ObjectType_STATUS `json:"objectType,omitempty"`

	// PolicyRules: Policy rule dictionary that contains rules for each backuptype i.e Full/Incremental/Logs etc
	PolicyRules []BasePolicyRule_STATUS `json:"policyRules,omitempty"`
}

type BackupPolicy_ObjectType_STATUS string

const BackupPolicy_ObjectType_STATUS_BackupPolicy = BackupPolicy_ObjectType_STATUS("BackupPolicy")

// Mapping from string to BackupPolicy_ObjectType_STATUS
var backupPolicy_ObjectType_STATUS_Values = map[string]BackupPolicy_ObjectType_STATUS{
	"backuppolicy": BackupPolicy_ObjectType_STATUS_BackupPolicy,
}

type BasePolicyRule_STATUS struct {
	// AzureBackup: Mutually exclusive with all other properties
	AzureBackup *AzureBackupRule_STATUS `json:"azureBackupRule,omitempty"`

	// AzureRetention: Mutually exclusive with all other properties
	AzureRetention *AzureRetentionRule_STATUS `json:"azureRetentionRule,omitempty"`
}

// MarshalJSON defers JSON marshaling to the first non-nil property, because BasePolicyRule_STATUS represents a discriminated union (JSON OneOf)
func (rule BasePolicyRule_STATUS) MarshalJSON() ([]byte, error) {
	if rule.AzureBackup != nil {
		return json.Marshal(rule.AzureBackup)
	}

	if rule.AzureRetention != nil {
		return json.Marshal(rule.AzureRetention)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the BasePolicyRule_STATUS
func (rule *BasePolicyRule_STATUS) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["objectType"]
	if discriminator == "AzureBackupRule" {
		rule.AzureBackup = &AzureBackupRule_STATUS{}
		return json.Unmarshal(data, rule.AzureBackup)
	}
	if discriminator == "AzureRetentionRule" {
		rule.AzureRetention = &AzureRetentionRule_STATUS{}
		return json.Unmarshal(data, rule.AzureRetention)
	}

	// No error
	return nil
}

type AzureBackupRule_STATUS struct {
	BackupParameters *BackupParameters_STATUS `json:"backupParameters,omitempty"`

	// DataStore: DataStoreInfo base
	DataStore  *DataStoreInfoBase_STATUS         `json:"dataStore,omitempty"`
	Name       *string                           `json:"name,omitempty"`
	ObjectType AzureBackupRule_ObjectType_STATUS `json:"objectType,omitempty"`
	Trigger    *TriggerContext_STATUS            `json:"trigger,omitempty"`
}

type AzureRetentionRule_STATUS struct {
	IsDefault  *bool                                `json:"isDefault,omitempty"`
	Lifecycles []SourceLifeCycle_STATUS             `json:"lifecycles,omitempty"`
	Name       *string                              `json:"name,omitempty"`
	ObjectType AzureRetentionRule_ObjectType_STATUS `json:"objectType,omitempty"`
}

type AzureBackupRule_ObjectType_STATUS string

const AzureBackupRule_ObjectType_STATUS_AzureBackupRule = AzureBackupRule_ObjectType_STATUS("AzureBackupRule")

// Mapping from string to AzureBackupRule_ObjectType_STATUS
var azureBackupRule_ObjectType_STATUS_Values = map[string]AzureBackupRule_ObjectType_STATUS{
	"azurebackuprule": AzureBackupRule_ObjectType_STATUS_AzureBackupRule,
}

type AzureRetentionRule_ObjectType_STATUS string

const AzureRetentionRule_ObjectType_STATUS_AzureRetentionRule = AzureRetentionRule_ObjectType_STATUS("AzureRetentionRule")

// Mapping from string to AzureRetentionRule_ObjectType_STATUS
var azureRetentionRule_ObjectType_STATUS_Values = map[string]AzureRetentionRule_ObjectType_STATUS{
	"azureretentionrule": AzureRetentionRule_ObjectType_STATUS_AzureRetentionRule,
}

type BackupParameters_STATUS struct {
	// AzureBackupParams: Mutually exclusive with all other properties
	AzureBackupParams *AzureBackupParams_STATUS `json:"azureBackupParams,omitempty"`
}

// MarshalJSON defers JSON marshaling to the first non-nil property, because BackupParameters_STATUS represents a discriminated union (JSON OneOf)
func (parameters BackupParameters_STATUS) MarshalJSON() ([]byte, error) {
	if parameters.AzureBackupParams != nil {
		return json.Marshal(parameters.AzureBackupParams)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the BackupParameters_STATUS
func (parameters *BackupParameters_STATUS) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["objectType"]
	if discriminator == "AzureBackupParams" {
		parameters.AzureBackupParams = &AzureBackupParams_STATUS{}
		return json.Unmarshal(data, parameters.AzureBackupParams)
	}

	// No error
	return nil
}

// DataStoreInfo base
type DataStoreInfoBase_STATUS struct {
	// DataStoreType: type of datastore; Operational/Vault/Archive
	DataStoreType *DataStoreInfoBase_DataStoreType_STATUS `json:"dataStoreType,omitempty"`

	// ObjectType: Type of Datasource object, used to initialize the right inherited type
	ObjectType *string `json:"objectType,omitempty"`
}

// Source LifeCycle
type SourceLifeCycle_STATUS struct {
	DeleteAfter *DeleteOption_STATUS `json:"deleteAfter,omitempty"`

	// SourceDataStore: DataStoreInfo base
	SourceDataStore             *DataStoreInfoBase_STATUS  `json:"sourceDataStore,omitempty"`
	TargetDataStoreCopySettings []TargetCopySetting_STATUS `json:"targetDataStoreCopySettings,omitempty"`
}

type TriggerContext_STATUS struct {
	// Adhoc: Mutually exclusive with all other properties
	Adhoc *AdhocBasedTriggerContext_STATUS `json:"adhocBasedTriggerContext,omitempty"`

	// Schedule: Mutually exclusive with all other properties
	Schedule *ScheduleBasedTriggerContext_STATUS `json:"scheduleBasedTriggerContext,omitempty"`
}

// MarshalJSON defers JSON marshaling to the first non-nil property, because TriggerContext_STATUS represents a discriminated union (JSON OneOf)
func (context TriggerContext_STATUS) MarshalJSON() ([]byte, error) {
	if context.Adhoc != nil {
		return json.Marshal(context.Adhoc)
	}

	if context.Schedule != nil {
		return json.Marshal(context.Schedule)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the TriggerContext_STATUS
func (context *TriggerContext_STATUS) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["objectType"]
	if discriminator == "AdhocBasedTriggerContext" {
		context.Adhoc = &AdhocBasedTriggerContext_STATUS{}
		return json.Unmarshal(data, context.Adhoc)
	}
	if discriminator == "ScheduleBasedTriggerContext" {
		context.Schedule = &ScheduleBasedTriggerContext_STATUS{}
		return json.Unmarshal(data, context.Schedule)
	}

	// No error
	return nil
}

type AdhocBasedTriggerContext_STATUS struct {
	// ObjectType: Type of the specific object - used for deserializing
	ObjectType AdhocBasedTriggerContext_ObjectType_STATUS `json:"objectType,omitempty"`

	// TaggingCriteria: Tagging Criteria containing retention tag for adhoc backup.
	TaggingCriteria *AdhocBasedTaggingCriteria_STATUS `json:"taggingCriteria,omitempty"`
}

type AzureBackupParams_STATUS struct {
	// BackupType: BackupType ; Full/Incremental etc
	BackupType *string `json:"backupType,omitempty"`

	// ObjectType: Type of the specific object - used for deserializing
	ObjectType AzureBackupParams_ObjectType_STATUS `json:"objectType,omitempty"`
}

type DataStoreInfoBase_DataStoreType_STATUS string

const (
	DataStoreInfoBase_DataStoreType_STATUS_ArchiveStore     = DataStoreInfoBase_DataStoreType_STATUS("ArchiveStore")
	DataStoreInfoBase_DataStoreType_STATUS_OperationalStore = DataStoreInfoBase_DataStoreType_STATUS("OperationalStore")
	DataStoreInfoBase_DataStoreType_STATUS_VaultStore       = DataStoreInfoBase_DataStoreType_STATUS("VaultStore")
)

// Mapping from string to DataStoreInfoBase_DataStoreType_STATUS
var dataStoreInfoBase_DataStoreType_STATUS_Values = map[string]DataStoreInfoBase_DataStoreType_STATUS{
	"archivestore":     DataStoreInfoBase_DataStoreType_STATUS_ArchiveStore,
	"operationalstore": DataStoreInfoBase_DataStoreType_STATUS_OperationalStore,
	"vaultstore":       DataStoreInfoBase_DataStoreType_STATUS_VaultStore,
}

type DeleteOption_STATUS struct {
	// AbsoluteDeleteOption: Mutually exclusive with all other properties
	AbsoluteDeleteOption *AbsoluteDeleteOption_STATUS `json:"absoluteDeleteOption,omitempty"`
}

// MarshalJSON defers JSON marshaling to the first non-nil property, because DeleteOption_STATUS represents a discriminated union (JSON OneOf)
func (option DeleteOption_STATUS) MarshalJSON() ([]byte, error) {
	if option.AbsoluteDeleteOption != nil {
		return json.Marshal(option.AbsoluteDeleteOption)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the DeleteOption_STATUS
func (option *DeleteOption_STATUS) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["objectType"]
	if discriminator == "AbsoluteDeleteOption" {
		option.AbsoluteDeleteOption = &AbsoluteDeleteOption_STATUS{}
		return json.Unmarshal(data, option.AbsoluteDeleteOption)
	}

	// No error
	return nil
}

type ScheduleBasedTriggerContext_STATUS struct {
	// ObjectType: Type of the specific object - used for deserializing
	ObjectType ScheduleBasedTriggerContext_ObjectType_STATUS `json:"objectType,omitempty"`

	// Schedule: Schedule for this backup
	Schedule *BackupSchedule_STATUS `json:"schedule,omitempty"`

	// TaggingCriteria: List of tags that can be applicable for given schedule.
	TaggingCriteria []TaggingCriteria_STATUS `json:"taggingCriteria,omitempty"`
}

// Target copy settings
type TargetCopySetting_STATUS struct {
	// CopyAfter: It can be CustomCopyOption or ImmediateCopyOption.
	CopyAfter *CopyOption_STATUS `json:"copyAfter,omitempty"`

	// DataStore: Info of target datastore
	DataStore *DataStoreInfoBase_STATUS `json:"dataStore,omitempty"`
}

type AbsoluteDeleteOption_STATUS struct {
	// Duration: Duration of deletion after given timespan
	Duration *string `json:"duration,omitempty"`

	// ObjectType: Type of the specific object - used for deserializing
	ObjectType AbsoluteDeleteOption_ObjectType_STATUS `json:"objectType,omitempty"`
}

// Adhoc backup tagging criteria
type AdhocBasedTaggingCriteria_STATUS struct {
	// TagInfo: Retention tag information
	TagInfo *RetentionTag_STATUS `json:"tagInfo,omitempty"`
}

type AdhocBasedTriggerContext_ObjectType_STATUS string

const AdhocBasedTriggerContext_ObjectType_STATUS_AdhocBasedTriggerContext = AdhocBasedTriggerContext_ObjectType_STATUS("AdhocBasedTriggerContext")

// Mapping from string to AdhocBasedTriggerContext_ObjectType_STATUS
var adhocBasedTriggerContext_ObjectType_STATUS_Values = map[string]AdhocBasedTriggerContext_ObjectType_STATUS{
	"adhocbasedtriggercontext": AdhocBasedTriggerContext_ObjectType_STATUS_AdhocBasedTriggerContext,
}

type AzureBackupParams_ObjectType_STATUS string

const AzureBackupParams_ObjectType_STATUS_AzureBackupParams = AzureBackupParams_ObjectType_STATUS("AzureBackupParams")

// Mapping from string to AzureBackupParams_ObjectType_STATUS
var azureBackupParams_ObjectType_STATUS_Values = map[string]AzureBackupParams_ObjectType_STATUS{
	"azurebackupparams": AzureBackupParams_ObjectType_STATUS_AzureBackupParams,
}

// Schedule for backup
type BackupSchedule_STATUS struct {
	// RepeatingTimeIntervals: Repeating time interval which only support the following ISO 8601 format
	// [R/startDateTime/Duration]. Example: R/2007-03-01T13:00:00Z/P1Y2M10DT2H30M
	RepeatingTimeIntervals []string `json:"repeatingTimeIntervals,omitempty"`

	// TimeZone: Time zone for a schedule. Example: Pacific Standard Time
	TimeZone *string `json:"timeZone,omitempty"`
}

type CopyOption_STATUS struct {
	// CopyOnExpiry: Mutually exclusive with all other properties
	CopyOnExpiry *CopyOnExpiryOption_STATUS `json:"copyOnExpiryOption,omitempty"`

	// CustomCopy: Mutually exclusive with all other properties
	CustomCopy *CustomCopyOption_STATUS `json:"customCopyOption,omitempty"`

	// ImmediateCopy: Mutually exclusive with all other properties
	ImmediateCopy *ImmediateCopyOption_STATUS `json:"immediateCopyOption,omitempty"`
}

// MarshalJSON defers JSON marshaling to the first non-nil property, because CopyOption_STATUS represents a discriminated union (JSON OneOf)
func (option CopyOption_STATUS) MarshalJSON() ([]byte, error) {
	if option.CopyOnExpiry != nil {
		return json.Marshal(option.CopyOnExpiry)
	}

	if option.CustomCopy != nil {
		return json.Marshal(option.CustomCopy)
	}

	if option.ImmediateCopy != nil {
		return json.Marshal(option.ImmediateCopy)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the CopyOption_STATUS
func (option *CopyOption_STATUS) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["objectType"]
	if discriminator == "CopyOnExpiryOption" {
		option.CopyOnExpiry = &CopyOnExpiryOption_STATUS{}
		return json.Unmarshal(data, option.CopyOnExpiry)
	}
	if discriminator == "CustomCopyOption" {
		option.CustomCopy = &CustomCopyOption_STATUS{}
		return json.Unmarshal(data, option.CustomCopy)
	}
	if discriminator == "ImmediateCopyOption" {
		option.ImmediateCopy = &ImmediateCopyOption_STATUS{}
		return json.Unmarshal(data, option.ImmediateCopy)
	}

	// No error
	return nil
}

type ScheduleBasedTriggerContext_ObjectType_STATUS string

const ScheduleBasedTriggerContext_ObjectType_STATUS_ScheduleBasedTriggerContext = ScheduleBasedTriggerContext_ObjectType_STATUS("ScheduleBasedTriggerContext")

// Mapping from string to ScheduleBasedTriggerContext_ObjectType_STATUS
var scheduleBasedTriggerContext_ObjectType_STATUS_Values = map[string]ScheduleBasedTriggerContext_ObjectType_STATUS{
	"schedulebasedtriggercontext": ScheduleBasedTriggerContext_ObjectType_STATUS_ScheduleBasedTriggerContext,
}

// Tagging criteria
type TaggingCriteria_STATUS struct {
	// Criteria: Criteria which decides whether the tag can be applied to a triggered backup.
	Criteria []BackupCriteria_STATUS `json:"criteria,omitempty"`

	// IsDefault: Specifies if tag is default.
	IsDefault *bool `json:"isDefault,omitempty"`

	// TagInfo: Retention tag information
	TagInfo *RetentionTag_STATUS `json:"tagInfo,omitempty"`

	// TaggingPriority: Retention Tag priority.
	TaggingPriority *int `json:"taggingPriority,omitempty"`
}

type AbsoluteDeleteOption_ObjectType_STATUS string

const AbsoluteDeleteOption_ObjectType_STATUS_AbsoluteDeleteOption = AbsoluteDeleteOption_ObjectType_STATUS("AbsoluteDeleteOption")

// Mapping from string to AbsoluteDeleteOption_ObjectType_STATUS
var absoluteDeleteOption_ObjectType_STATUS_Values = map[string]AbsoluteDeleteOption_ObjectType_STATUS{
	"absolutedeleteoption": AbsoluteDeleteOption_ObjectType_STATUS_AbsoluteDeleteOption,
}

type BackupCriteria_STATUS struct {
	// ScheduleBasedBackupCriteria: Mutually exclusive with all other properties
	ScheduleBasedBackupCriteria *ScheduleBasedBackupCriteria_STATUS `json:"scheduleBasedBackupCriteria,omitempty"`
}

// MarshalJSON defers JSON marshaling to the first non-nil property, because BackupCriteria_STATUS represents a discriminated union (JSON OneOf)
func (criteria BackupCriteria_STATUS) MarshalJSON() ([]byte, error) {
	if criteria.ScheduleBasedBackupCriteria != nil {
		return json.Marshal(criteria.ScheduleBasedBackupCriteria)
	}

	return nil, nil
}

// UnmarshalJSON unmarshals the BackupCriteria_STATUS
func (criteria *BackupCriteria_STATUS) UnmarshalJSON(data []byte) error {
	var rawJson map[string]interface{}
	err := json.Unmarshal(data, &rawJson)
	if err != nil {
		return err
	}
	discriminator := rawJson["objectType"]
	if discriminator == "ScheduleBasedBackupCriteria" {
		criteria.ScheduleBasedBackupCriteria = &ScheduleBasedBackupCriteria_STATUS{}
		return json.Unmarshal(data, criteria.ScheduleBasedBackupCriteria)
	}

	// No error
	return nil
}

type CopyOnExpiryOption_STATUS struct {
	// ObjectType: Type of the specific object - used for deserializing
	ObjectType CopyOnExpiryOption_ObjectType_STATUS `json:"objectType,omitempty"`
}

type CustomCopyOption_STATUS struct {
	// Duration: Data copied after given timespan
	Duration *string `json:"duration,omitempty"`

	// ObjectType: Type of the specific object - used for deserializing
	ObjectType CustomCopyOption_ObjectType_STATUS `json:"objectType,omitempty"`
}

type ImmediateCopyOption_STATUS struct {
	// ObjectType: Type of the specific object - used for deserializing
	ObjectType ImmediateCopyOption_ObjectType_STATUS `json:"objectType,omitempty"`
}

// Retention tag
type RetentionTag_STATUS struct {
	// ETag: Retention Tag version.
	ETag *string `json:"eTag,omitempty"`

	// Id: Retention Tag version.
	Id *string `json:"id,omitempty"`

	// TagName: Retention Tag Name to relate it to retention rule.
	TagName *string `json:"tagName,omitempty"`
}

type CopyOnExpiryOption_ObjectType_STATUS string

const CopyOnExpiryOption_ObjectType_STATUS_CopyOnExpiryOption = CopyOnExpiryOption_ObjectType_STATUS("CopyOnExpiryOption")

// Mapping from string to CopyOnExpiryOption_ObjectType_STATUS
var copyOnExpiryOption_ObjectType_STATUS_Values = map[string]CopyOnExpiryOption_ObjectType_STATUS{
	"copyonexpiryoption": CopyOnExpiryOption_ObjectType_STATUS_CopyOnExpiryOption,
}

type CustomCopyOption_ObjectType_STATUS string

const CustomCopyOption_ObjectType_STATUS_CustomCopyOption = CustomCopyOption_ObjectType_STATUS("CustomCopyOption")

// Mapping from string to CustomCopyOption_ObjectType_STATUS
var customCopyOption_ObjectType_STATUS_Values = map[string]CustomCopyOption_ObjectType_STATUS{
	"customcopyoption": CustomCopyOption_ObjectType_STATUS_CustomCopyOption,
}

type ImmediateCopyOption_ObjectType_STATUS string

const ImmediateCopyOption_ObjectType_STATUS_ImmediateCopyOption = ImmediateCopyOption_ObjectType_STATUS("ImmediateCopyOption")

// Mapping from string to ImmediateCopyOption_ObjectType_STATUS
var immediateCopyOption_ObjectType_STATUS_Values = map[string]ImmediateCopyOption_ObjectType_STATUS{
	"immediatecopyoption": ImmediateCopyOption_ObjectType_STATUS_ImmediateCopyOption,
}

type ScheduleBasedBackupCriteria_STATUS struct {
	// AbsoluteCriteria: it contains absolute values like "AllBackup" / "FirstOfDay" / "FirstOfWeek" / "FirstOfMonth"
	// and should be part of AbsoluteMarker enum
	AbsoluteCriteria []ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS `json:"absoluteCriteria,omitempty"`

	// DaysOfMonth: This is day of the month from 1 to 28 other wise last of month
	DaysOfMonth []Day_STATUS `json:"daysOfMonth,omitempty"`

	// DaysOfTheWeek: It should be Sunday/Monday/T..../Saturday
	DaysOfTheWeek []ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS `json:"daysOfTheWeek,omitempty"`

	// MonthsOfYear: It should be January/February/....../December
	MonthsOfYear []ScheduleBasedBackupCriteria_MonthsOfYear_STATUS `json:"monthsOfYear,omitempty"`

	// ObjectType: Type of the specific object - used for deserializing
	ObjectType ScheduleBasedBackupCriteria_ObjectType_STATUS `json:"objectType,omitempty"`

	// ScheduleTimes: List of schedule times for backup
	ScheduleTimes []string `json:"scheduleTimes,omitempty"`

	// WeeksOfTheMonth: It should be First/Second/Third/Fourth/Last
	WeeksOfTheMonth []ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS `json:"weeksOfTheMonth,omitempty"`
}

// Day of the week
type Day_STATUS struct {
	// Date: Date of the month
	Date *int `json:"date,omitempty"`

	// IsLast: Whether Date is last date of month
	IsLast *bool `json:"isLast,omitempty"`
}

type ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS string

const (
	ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_AllBackup    = ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS("AllBackup")
	ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_FirstOfDay   = ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS("FirstOfDay")
	ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_FirstOfMonth = ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS("FirstOfMonth")
	ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_FirstOfWeek  = ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS("FirstOfWeek")
	ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_FirstOfYear  = ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS("FirstOfYear")
)

// Mapping from string to ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS
var scheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_Values = map[string]ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS{
	"allbackup":    ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_AllBackup,
	"firstofday":   ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_FirstOfDay,
	"firstofmonth": ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_FirstOfMonth,
	"firstofweek":  ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_FirstOfWeek,
	"firstofyear":  ScheduleBasedBackupCriteria_AbsoluteCriteria_STATUS_FirstOfYear,
}

type ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS string

const (
	ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Friday    = ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS("Friday")
	ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Monday    = ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS("Monday")
	ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Saturday  = ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS("Saturday")
	ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Sunday    = ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS("Sunday")
	ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Thursday  = ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS("Thursday")
	ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Tuesday   = ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS("Tuesday")
	ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Wednesday = ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS("Wednesday")
)

// Mapping from string to ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS
var scheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Values = map[string]ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS{
	"friday":    ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Friday,
	"monday":    ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Monday,
	"saturday":  ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Saturday,
	"sunday":    ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Sunday,
	"thursday":  ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Thursday,
	"tuesday":   ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Tuesday,
	"wednesday": ScheduleBasedBackupCriteria_DaysOfTheWeek_STATUS_Wednesday,
}

type ScheduleBasedBackupCriteria_MonthsOfYear_STATUS string

const (
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_April     = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("April")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_August    = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("August")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_December  = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("December")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_February  = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("February")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_January   = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("January")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_July      = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("July")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_June      = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("June")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_March     = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("March")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_May       = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("May")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_November  = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("November")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_October   = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("October")
	ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_September = ScheduleBasedBackupCriteria_MonthsOfYear_STATUS("September")
)

// Mapping from string to ScheduleBasedBackupCriteria_MonthsOfYear_STATUS
var scheduleBasedBackupCriteria_MonthsOfYear_STATUS_Values = map[string]ScheduleBasedBackupCriteria_MonthsOfYear_STATUS{
	"april":     ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_April,
	"august":    ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_August,
	"december":  ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_December,
	"february":  ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_February,
	"january":   ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_January,
	"july":      ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_July,
	"june":      ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_June,
	"march":     ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_March,
	"may":       ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_May,
	"november":  ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_November,
	"october":   ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_October,
	"september": ScheduleBasedBackupCriteria_MonthsOfYear_STATUS_September,
}

type ScheduleBasedBackupCriteria_ObjectType_STATUS string

const ScheduleBasedBackupCriteria_ObjectType_STATUS_ScheduleBasedBackupCriteria = ScheduleBasedBackupCriteria_ObjectType_STATUS("ScheduleBasedBackupCriteria")

// Mapping from string to ScheduleBasedBackupCriteria_ObjectType_STATUS
var scheduleBasedBackupCriteria_ObjectType_STATUS_Values = map[string]ScheduleBasedBackupCriteria_ObjectType_STATUS{
	"schedulebasedbackupcriteria": ScheduleBasedBackupCriteria_ObjectType_STATUS_ScheduleBasedBackupCriteria,
}

type ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS string

const (
	ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_First  = ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS("First")
	ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_Fourth = ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS("Fourth")
	ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_Last   = ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS("Last")
	ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_Second = ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS("Second")
	ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_Third  = ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS("Third")
)

// Mapping from string to ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS
var scheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_Values = map[string]ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS{
	"first":  ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_First,
	"fourth": ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_Fourth,
	"last":   ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_Last,
	"second": ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_Second,
	"third":  ScheduleBasedBackupCriteria_WeeksOfTheMonth_STATUS_Third,
}
