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  }