github.com/juju/charmrepo/v7@v7.0.1/csclient/params/helpers.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the LGPLv3, see LICENCE file for details. 3 4 package params // import "github.com/juju/charmrepo/v7/csclient/params" 5 6 import ( 7 "github.com/juju/charm/v9/resource" 8 "gopkg.in/errgo.v1" 9 ) 10 11 // Resource2API converts a charm resource into an API Resource struct. 12 func Resource2API(res resource.Resource) Resource { 13 return Resource{ 14 Name: res.Name, 15 Type: res.Type.String(), 16 Path: res.Path, 17 Description: res.Description, 18 Revision: res.Revision, 19 Fingerprint: res.Fingerprint.Bytes(), 20 Size: res.Size, 21 } 22 } 23 24 // API2Resource converts an API Resource struct into 25 // a charm resource. 26 func API2Resource(apiInfo Resource) (resource.Resource, error) { 27 var res resource.Resource 28 29 rtype, err := resource.ParseType(apiInfo.Type) 30 if err != nil { 31 return res, errgo.Mask(err, errgo.Any) 32 } 33 34 fp, err := deserializeFingerprint(apiInfo.Fingerprint) 35 if err != nil { 36 return res, errgo.Mask(err, errgo.Any) 37 } 38 39 // Charmstore doesn't set Origin, so we just default it to OriginStore. 40 41 res = resource.Resource{ 42 Meta: resource.Meta{ 43 Name: apiInfo.Name, 44 Type: rtype, 45 Path: apiInfo.Path, 46 Description: apiInfo.Description, 47 }, 48 Origin: resource.OriginStore, 49 Revision: apiInfo.Revision, 50 Fingerprint: fp, 51 Size: apiInfo.Size, 52 } 53 54 if err := res.Validate(); err != nil { 55 return res, errgo.Mask(err, errgo.Any) 56 } 57 return res, nil 58 } 59 60 // deserializeFingerprint converts the serialized fingerprint back into 61 // a Fingerprint. "zero" values are treated appropriately. 62 func deserializeFingerprint(fpSum []byte) (resource.Fingerprint, error) { 63 if len(fpSum) == 0 { 64 return resource.Fingerprint{}, nil 65 } 66 fp, err := resource.NewFingerprint(fpSum) 67 if err != nil { 68 return fp, errgo.Mask(err, errgo.Any) 69 } 70 return fp, nil 71 }