github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/facades/client/charms/conversions.go (about)

     1  // Copyright 2020 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package charms
     5  
     6  import (
     7  	"github.com/juju/charm/v12"
     8  	"github.com/juju/errors"
     9  
    10  	corebase "github.com/juju/juju/core/base"
    11  	corecharm "github.com/juju/juju/core/charm"
    12  	"github.com/juju/juju/rpc/params"
    13  )
    14  
    15  func convertOrigin(origin corecharm.Origin) (params.CharmOrigin, error) {
    16  	var track *string
    17  	if origin.Channel != nil && origin.Channel.Track != "" {
    18  		track = &origin.Channel.Track
    19  	}
    20  	var branch *string
    21  	if origin.Channel != nil && origin.Channel.Branch != "" {
    22  		branch = &origin.Channel.Branch
    23  	}
    24  	var risk string
    25  	if origin.Channel != nil {
    26  		risk = string(origin.Channel.Risk)
    27  	}
    28  	var base corebase.Base
    29  	if origin.Platform.Channel != "" {
    30  		var err error
    31  		base, err = corebase.ParseBase(origin.Platform.OS, origin.Platform.Channel)
    32  		if err != nil {
    33  			return params.CharmOrigin{}, errors.Trace(err)
    34  		}
    35  	}
    36  	return params.CharmOrigin{
    37  		Source:       string(origin.Source),
    38  		Type:         origin.Type,
    39  		ID:           origin.ID,
    40  		Hash:         origin.Hash,
    41  		Risk:         risk,
    42  		Revision:     origin.Revision,
    43  		Track:        track,
    44  		Branch:       branch,
    45  		Architecture: origin.Platform.Architecture,
    46  		Base:         params.Base{Name: base.OS, Channel: base.Channel.String()},
    47  		InstanceKey:  origin.InstanceKey,
    48  	}, nil
    49  }
    50  
    51  // ConvertParamsOrigin converts a params struct to a core charm origin.
    52  func ConvertParamsOrigin(origin params.CharmOrigin) (corecharm.Origin, error) {
    53  	var track string
    54  	if origin.Track != nil {
    55  		track = *origin.Track
    56  	}
    57  	var branch string
    58  	if origin.Branch != nil {
    59  		branch = *origin.Branch
    60  	}
    61  
    62  	base, err := corebase.ParseBase(origin.Base.Name, origin.Base.Channel)
    63  	if err != nil {
    64  		return corecharm.Origin{}, errors.Trace(err)
    65  	}
    66  	return corecharm.Origin{
    67  		Source:   corecharm.Source(origin.Source),
    68  		Type:     origin.Type,
    69  		ID:       origin.ID,
    70  		Hash:     origin.Hash,
    71  		Revision: origin.Revision,
    72  		Channel: &charm.Channel{
    73  			Track:  track,
    74  			Risk:   charm.Risk(origin.Risk),
    75  			Branch: branch,
    76  		},
    77  		Platform: corecharm.Platform{
    78  			Architecture: origin.Architecture,
    79  			OS:           base.OS,
    80  			Channel:      base.Channel.Track,
    81  		},
    82  		InstanceKey: origin.InstanceKey,
    83  	}, nil
    84  }