2023-06-05 14:18:06 -07:00

87 lines
1.9 KiB
Go

package state
import (
"github.com/hashicorp/vagrant-plugin-sdk/proto/vagrant_plugin_sdk"
"github.com/hashicorp/vagrant/internal/server/proto/vagrant_server"
"gorm.io/gorm"
)
type VagrantfileFormat uint8
const (
JSON VagrantfileFormat = VagrantfileFormat(vagrant_server.Vagrantfile_JSON)
HCL = VagrantfileFormat(vagrant_server.Vagrantfile_HCL)
RUBY = VagrantfileFormat(vagrant_server.Vagrantfile_RUBY)
)
type Vagrantfile struct {
gorm.Model
Format VagrantfileFormat
Unfinalized *ProtoValue
Finalized *ProtoValue
Raw []byte
Path string
}
func init() {
models = append(models, &Vagrantfile{})
}
func (v *Vagrantfile) ToProto() *vagrant_server.Vagrantfile {
if v == nil {
return nil
}
vf := &vagrant_server.Vagrantfile{
Format: vagrant_server.Vagrantfile_Format(v.Format),
Raw: v.Raw,
}
if len(v.Path) > 0 {
vf.Path = &vagrant_plugin_sdk.Args_Path{
Path: v.Path,
}
}
if v.Unfinalized != nil {
vf.Unfinalized = v.Unfinalized.Message.(*vagrant_plugin_sdk.Args_Hash)
}
if v.Finalized != nil {
vf.Finalized = v.Finalized.Message.(*vagrant_plugin_sdk.Args_Hash)
}
return vf
}
func (v *Vagrantfile) UpdateFromProto(vf *vagrant_server.Vagrantfile) *Vagrantfile {
v.Format = VagrantfileFormat(vf.Format)
v.Raw = vf.Raw
if vf.Unfinalized != nil {
v.Unfinalized = &ProtoValue{Message: vf.Unfinalized}
}
if vf.Finalized != nil {
v.Finalized = &ProtoValue{Message: vf.Finalized}
}
if vf.Path != nil {
v.Path = vf.Path.Path
}
return v
}
func (s *State) VagrantfileFromProto(v *vagrant_server.Vagrantfile) *Vagrantfile {
file := &Vagrantfile{
Format: VagrantfileFormat(v.Format),
Raw: v.Raw,
}
if v.Unfinalized != nil {
file.Unfinalized = &ProtoValue{Message: v.Unfinalized}
}
if v.Finalized != nil {
file.Finalized = &ProtoValue{Message: v.Finalized}
}
if v.Path != nil {
file.Path = v.Path.Path
}
return file
}