github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/payload/api/private/helpers.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package private 5 6 // TODO(ericsnow) Eliminate the apiserver/common import if possible. 7 // TODO(ericsnow) Eliminate the params import if possible. 8 9 import ( 10 "github.com/juju/errors" 11 "github.com/juju/names" 12 13 "github.com/juju/juju/apiserver/common" 14 "github.com/juju/juju/apiserver/params" 15 "github.com/juju/juju/payload" 16 "github.com/juju/juju/payload/api" 17 ) 18 19 // NewPayloadResult builds a new PayloadResult from the provided tag 20 // and error. NotFound is also set based on the error. 21 func NewPayloadResult(id string, err error) PayloadResult { 22 result := payload.Result{ 23 ID: id, 24 Payload: nil, 25 NotFound: errors.IsNotFound(err), 26 Error: err, 27 } 28 return Result2api(result) 29 } 30 31 // API2Result converts the API result to a payload.Result. 32 func API2Result(r PayloadResult) (payload.Result, error) { 33 result := payload.Result{ 34 NotFound: r.NotFound, 35 } 36 37 id, err := API2ID(r.Tag) 38 if err != nil { 39 return result, errors.Trace(err) 40 } 41 result.ID = id 42 43 if r.Payload != nil { 44 pl, err := api.API2Payload(*r.Payload) 45 if err != nil { 46 return result, errors.Trace(err) 47 } 48 result.Payload = &pl 49 } 50 51 if r.Error != nil { 52 result.Error = common.RestoreError(r.Error) 53 } 54 55 return result, nil 56 } 57 58 // Result2api converts the payload.Result into a PayloadResult. 59 func Result2api(result payload.Result) PayloadResult { 60 res := PayloadResult{ 61 NotFound: result.NotFound, 62 } 63 64 if result.ID != "" { 65 res.Tag = names.NewPayloadTag(result.ID).String() 66 } 67 68 if result.Payload != nil { 69 pl := api.Payload2api(*result.Payload) 70 res.Payload = &pl 71 } 72 73 if result.Error != nil { 74 res.Error = common.ServerError(result.Error) 75 } 76 77 return res 78 } 79 80 // API2ID converts the given tag string into a payload ID. 81 func API2ID(tagStr string) (string, error) { 82 if tagStr == "" { 83 return tagStr, nil 84 } 85 tag, err := names.ParsePayloadTag(tagStr) 86 if err != nil { 87 return "", errors.Trace(err) 88 } 89 return tag.Id(), nil 90 } 91 92 // Payloads2TrackArgs converts the provided payload info into arguments 93 // for the Track API endpoint. 94 func Payloads2TrackArgs(payloads []payload.Payload) TrackArgs { 95 var args TrackArgs 96 for _, pl := range payloads { 97 fullPayload := payload.FullPayloadInfo{Payload: pl} 98 arg := api.Payload2api(fullPayload) 99 args.Payloads = append(args.Payloads, arg) 100 } 101 return args 102 } 103 104 // IDs2ListArgs converts the provided payload IDs into arguments 105 // for the List API endpoint. 106 func IDs2ListArgs(ids []string) params.Entities { 107 return ids2args(ids) 108 } 109 110 // FullIDs2LookUpArgs converts the provided payload "full" IDs into arguments 111 // for the LookUp API endpoint. 112 func FullIDs2LookUpArgs(fullIDs []string) LookUpArgs { 113 var args LookUpArgs 114 for _, fullID := range fullIDs { 115 name, rawID := payload.ParseID(fullID) 116 args.Args = append(args.Args, LookUpArg{ 117 Name: name, 118 ID: rawID, 119 }) 120 } 121 return args 122 } 123 124 // IDs2SetStatusArgs converts the provided payload IDs into arguments 125 // for the SetStatus API endpoint. 126 func IDs2SetStatusArgs(ids []string, status string) SetStatusArgs { 127 var args SetStatusArgs 128 for _, id := range ids { 129 arg := SetStatusArg{ 130 Status: status, 131 } 132 arg.Tag = names.NewPayloadTag(id).String() 133 args.Args = append(args.Args, arg) 134 } 135 return args 136 } 137 138 // IDs2UntrackArgs converts the provided payload IDs into arguments 139 // for the Untrack API endpoint. 140 func IDs2UntrackArgs(ids []string) params.Entities { 141 return ids2args(ids) 142 } 143 144 func ids2args(ids []string) params.Entities { 145 var args params.Entities 146 for _, id := range ids { 147 tag := names.NewPayloadTag(id).String() 148 args.Entities = append(args.Entities, params.Entity{ 149 Tag: tag, 150 }) 151 } 152 return args 153 }