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 }