// Code generated by "mapstructure-to-hcl2 -type HardwareConfig"; DO NOT EDIT.
package common

import (
	"github.com/hashicorp/hcl/v2/hcldec"
	"github.com/zclconf/go-cty/cty"
)

// FlatHardwareConfig is an auto-generated flat version of HardwareConfig.
// Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
type FlatHardwareConfig struct {
	CPUs                *int32  `mapstructure:"CPUs" cty:"CPUs" hcl:"CPUs"`
	CpuCores            *int32  `mapstructure:"cpu_cores" cty:"cpu_cores" hcl:"cpu_cores"`
	CPUReservation      *int64  `mapstructure:"CPU_reservation" cty:"CPU_reservation" hcl:"CPU_reservation"`
	CPULimit            *int64  `mapstructure:"CPU_limit" cty:"CPU_limit" hcl:"CPU_limit"`
	CpuHotAddEnabled    *bool   `mapstructure:"CPU_hot_plug" cty:"CPU_hot_plug" hcl:"CPU_hot_plug"`
	RAM                 *int64  `mapstructure:"RAM" cty:"RAM" hcl:"RAM"`
	RAMReservation      *int64  `mapstructure:"RAM_reservation" cty:"RAM_reservation" hcl:"RAM_reservation"`
	RAMReserveAll       *bool   `mapstructure:"RAM_reserve_all" cty:"RAM_reserve_all" hcl:"RAM_reserve_all"`
	MemoryHotAddEnabled *bool   `mapstructure:"RAM_hot_plug" cty:"RAM_hot_plug" hcl:"RAM_hot_plug"`
	VideoRAM            *int64  `mapstructure:"video_ram" cty:"video_ram" hcl:"video_ram"`
	VGPUProfile         *string `mapstructure:"vgpu_profile" cty:"vgpu_profile" hcl:"vgpu_profile"`
	NestedHV            *bool   `mapstructure:"NestedHV" cty:"NestedHV" hcl:"NestedHV"`
	Firmware            *string `mapstructure:"firmware" cty:"firmware" hcl:"firmware"`
}

// FlatMapstructure returns a new FlatHardwareConfig.
// FlatHardwareConfig is an auto-generated flat version of HardwareConfig.
// Where the contents a fields with a `mapstructure:,squash` tag are bubbled up.
func (*HardwareConfig) FlatMapstructure() interface{ HCL2Spec() map[string]hcldec.Spec } {
	return new(FlatHardwareConfig)
}

// HCL2Spec returns the hcl spec of a HardwareConfig.
// This spec is used by HCL to read the fields of HardwareConfig.
// The decoded values from this spec will then be applied to a FlatHardwareConfig.
func (*FlatHardwareConfig) HCL2Spec() map[string]hcldec.Spec {
	s := map[string]hcldec.Spec{
		"CPUs":            &hcldec.AttrSpec{Name: "CPUs", Type: cty.Number, Required: false},
		"cpu_cores":       &hcldec.AttrSpec{Name: "cpu_cores", Type: cty.Number, Required: false},
		"CPU_reservation": &hcldec.AttrSpec{Name: "CPU_reservation", Type: cty.Number, Required: false},
		"CPU_limit":       &hcldec.AttrSpec{Name: "CPU_limit", Type: cty.Number, Required: false},
		"CPU_hot_plug":    &hcldec.AttrSpec{Name: "CPU_hot_plug", Type: cty.Bool, Required: false},
		"RAM":             &hcldec.AttrSpec{Name: "RAM", Type: cty.Number, Required: false},
		"RAM_reservation": &hcldec.AttrSpec{Name: "RAM_reservation", Type: cty.Number, Required: false},
		"RAM_reserve_all": &hcldec.AttrSpec{Name: "RAM_reserve_all", Type: cty.Bool, Required: false},
		"RAM_hot_plug":    &hcldec.AttrSpec{Name: "RAM_hot_plug", Type: cty.Bool, Required: false},
		"video_ram":       &hcldec.AttrSpec{Name: "video_ram", Type: cty.Number, Required: false},
		"vgpu_profile":    &hcldec.AttrSpec{Name: "vgpu_profile", Type: cty.String, Required: false},
		"NestedHV":        &hcldec.AttrSpec{Name: "NestedHV", Type: cty.Bool, Required: false},
		"firmware":        &hcldec.AttrSpec{Name: "firmware", Type: cty.String, Required: false},
	}
	return s
}
