From e27e6c78711ac67c662954b9fbd4d5b59909bcd9 Mon Sep 17 00:00:00 2001 From: sophia Date: Fri, 11 Mar 2022 12:45:59 -0600 Subject: [PATCH] Map box metadata --- internal/core/box.go | 4 +--- internal/core/box_metadata.go | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/internal/core/box.go b/internal/core/box.go index 4d3492156..b41695529 100644 --- a/internal/core/box.go +++ b/internal/core/box.go @@ -265,9 +265,7 @@ func (b *Box) UpdateInfo(version string) (updateAvailable bool, meta core.BoxMet if result == nil { return false, nil, "", "", nil } - var metadataMap core.BoxMetadataMap - mapstructure.Decode(metadata, &metadataMap) - return true, metadataMap, result.Version, b.box.Provider, nil + return true, metadata.ToMap(), result.Version, b.box.Provider, nil } // Checks if this box is in use according to the given machine diff --git a/internal/core/box_metadata.go b/internal/core/box_metadata.go index 8d71febe3..dff723923 100644 --- a/internal/core/box_metadata.go +++ b/internal/core/box_metadata.go @@ -18,6 +18,15 @@ type BoxVersionProvider struct { ChecksumType string } +func (b *BoxVersionProvider) ToMap() map[string]interface{} { + m := make(map[string]interface{}) + m["Name"] = b.Name + m["Url"] = b.Url + m["Checksum"] = b.Checksum + m["ChecksumType"] = b.ChecksumType + return m +} + func (b *BoxVersionProvider) MatchesAny(p ...*BoxVersionProvider) (matches bool) { for _, provider := range p { if b.Matches(provider) { @@ -53,6 +62,19 @@ type BoxVersion struct { Providers []*BoxVersionProvider } +func (b *BoxVersion) ToMap() map[string]interface{} { + m := make(map[string]interface{}) + m["Version"] = b.Version + m["Status"] = b.Status + m["Description"] = b.Description + providers := []interface{}{} + for _, p := range b.Providers { + providers = append(providers, p.ToMap()) + } + m["Providers"] = providers + return m +} + func (b *BoxVersion) Provider(name string) (p *BoxVersionProvider, err error) { for _, provider := range b.Providers { if provider.Name == name { @@ -76,6 +98,18 @@ type BoxMetadata struct { Versions []*BoxVersion } +func (b *BoxMetadata) ToMap() map[string]interface{} { + m := make(map[string]interface{}) + m["Name"] = b.Name + m["Description"] = b.Description + versions := []interface{}{} + for _, v := range b.Versions { + versions = append(versions, v.ToMap()) + } + m["Versions"] = versions + return m +} + func LoadBoxMetadata(data []byte) (*BoxMetadata, error) { var metadata map[string]interface{} if err := json.Unmarshal(data, &metadata); err != nil {