From 8e005c9ee12e425ed3017712e8c24ad1d8012256 Mon Sep 17 00:00:00 2001 From: sophia Date: Thu, 4 Nov 2021 12:37:02 -0500 Subject: [PATCH] Setup box metadata --- internal/core/box_metadata.go | 87 ++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/internal/core/box_metadata.go b/internal/core/box_metadata.go index e20ebf6f3..b1a5e2153 100644 --- a/internal/core/box_metadata.go +++ b/internal/core/box_metadata.go @@ -1,50 +1,73 @@ package core -import "github.com/hashicorp/vagrant/internal/server/proto/vagrant_server" +import ( + "encoding/json" -type BoxMetadata struct { - metadata *vagrant_server.BoxMetadata -} + "github.com/mitchellh/mapstructure" +) -func LoadBoxMetadata() (*BoxMetadata, error) { - // TODO - return &BoxMetadata{}, nil -} - -func (b *BoxMetadata) Version(version string) (v *BoxVersion, err error) { - v, err = LoadBoxVersion() - return -} - -func (b *BoxMetadata) Versions() ([]string, error) { - // TODO - return []string{}, nil +type BoxVersionProvider struct { + // provider *vagrant_server.BoxMetadata_Version_Provider + Name string + Url string + Checksum string + ChecksumType string } type BoxVersion struct { - version *vagrant_server.BoxMetadata_Version -} - -func LoadBoxVersion() (*BoxVersion, error) { - // TODO - return &BoxVersion{}, nil + // version *vagrant_server.BoxMetadata_Version + Version string + State string + Description string + Providers []*BoxVersionProvider } func (b *BoxVersion) Provider(name string) (p *BoxVersionProvider, err error) { - p, err = LoadBoxVersionProvider() + for _, provider := range b.Providers { + if provider.Name == name { + return provider, nil + } + } return } -func (b *BoxVersion) Providers() ([]string, error) { - // TODO - return []string{}, nil +func (b *BoxVersion) ListProviders() ([]string, error) { + p := []string{} + for _, provider := range b.Providers { + p = append(p, provider.Name) + } + return p, nil } -type BoxVersionProvider struct { - provider *vagrant_server.BoxMetadata_Version_Provider +type BoxMetadata struct { + Name string + Description string + Versions []*BoxVersion + // metadata *vagrant_server.BoxMetadata } -func LoadBoxVersionProvider() (*BoxVersionProvider, error) { - // TODO - return &BoxVersionProvider{}, nil +func LoadBoxMetadata(data []byte) (*BoxMetadata, error) { + var metadata map[string]interface{} + if err := json.Unmarshal(data, &metadata); err != nil { + return nil, err + } + var result BoxMetadata + return &result, mapstructure.Decode(metadata, &result) +} + +func (b *BoxMetadata) Version(version string) (v *BoxVersion, err error) { + for _, ver := range b.Versions { + if ver.Version == version { + return ver, nil + } + } + return +} + +func (b *BoxMetadata) ListVersions() ([]string, error) { + v := []string{} + for _, version := range b.Versions { + v = append(v, version.Version) + } + return v, nil }