github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/catalog/v1alpha1/AssetRelease.go (about) 1 /* 2 * This file is automatically generated 3 */ 4 5 package catalog 6 7 import ( 8 "encoding/json" 9 10 apiv1 "github.com/Axway/agent-sdk/pkg/apic/apiserver/models/api/v1" 11 12 "github.com/Axway/agent-sdk/pkg/util/log" 13 ) 14 15 var ( 16 AssetReleaseCtx log.ContextField = "assetRelease" 17 18 _AssetReleaseGVK = apiv1.GroupVersionKind{ 19 GroupKind: apiv1.GroupKind{ 20 Group: "catalog", 21 Kind: "AssetRelease", 22 }, 23 APIVersion: "v1alpha1", 24 } 25 26 AssetReleaseScopes = []string{""} 27 ) 28 29 const ( 30 AssetReleaseResourceName = "assetreleases" 31 AssetReleaseIconSubResourceName = "icon" 32 AssetReleaseReferencesSubResourceName = "references" 33 AssetReleaseStatusSubResourceName = "status" 34 ) 35 36 func AssetReleaseGVK() apiv1.GroupVersionKind { 37 return _AssetReleaseGVK 38 } 39 40 func init() { 41 apiv1.RegisterGVK(_AssetReleaseGVK, AssetReleaseScopes[0], AssetReleaseResourceName) 42 log.RegisterContextField(AssetReleaseCtx) 43 } 44 45 // AssetRelease Resource 46 type AssetRelease struct { 47 apiv1.ResourceMeta 48 Icon interface{} `json:"icon"` 49 Owner *apiv1.Owner `json:"owner"` 50 References interface{} `json:"references"` 51 Spec AssetReleaseSpec `json:"spec"` 52 // Status AssetReleaseStatus `json:"status"` 53 Status *apiv1.ResourceStatus `json:"status"` 54 } 55 56 // NewAssetRelease creates an empty *AssetRelease 57 func NewAssetRelease(name string) *AssetRelease { 58 return &AssetRelease{ 59 ResourceMeta: apiv1.ResourceMeta{ 60 Name: name, 61 GroupVersionKind: _AssetReleaseGVK, 62 }, 63 } 64 } 65 66 // AssetReleaseFromInstanceArray converts a []*ResourceInstance to a []*AssetRelease 67 func AssetReleaseFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*AssetRelease, error) { 68 newArray := make([]*AssetRelease, 0) 69 for _, item := range fromArray { 70 res := &AssetRelease{} 71 err := res.FromInstance(item) 72 if err != nil { 73 return make([]*AssetRelease, 0), err 74 } 75 newArray = append(newArray, res) 76 } 77 78 return newArray, nil 79 } 80 81 // AsInstance converts a AssetRelease to a ResourceInstance 82 func (res *AssetRelease) AsInstance() (*apiv1.ResourceInstance, error) { 83 meta := res.ResourceMeta 84 meta.GroupVersionKind = AssetReleaseGVK() 85 res.ResourceMeta = meta 86 87 m, err := json.Marshal(res) 88 if err != nil { 89 return nil, err 90 } 91 92 instance := apiv1.ResourceInstance{} 93 err = json.Unmarshal(m, &instance) 94 if err != nil { 95 return nil, err 96 } 97 98 return &instance, nil 99 } 100 101 // FromInstance converts a ResourceInstance to a AssetRelease 102 func (res *AssetRelease) FromInstance(ri *apiv1.ResourceInstance) error { 103 if ri == nil { 104 res = nil 105 return nil 106 } 107 var err error 108 rawResource := ri.GetRawResource() 109 if rawResource == nil { 110 rawResource, err = json.Marshal(ri) 111 if err != nil { 112 return err 113 } 114 } 115 err = json.Unmarshal(rawResource, res) 116 return err 117 } 118 119 // MarshalJSON custom marshaller to handle sub resources 120 func (res *AssetRelease) MarshalJSON() ([]byte, error) { 121 m, err := json.Marshal(&res.ResourceMeta) 122 if err != nil { 123 return nil, err 124 } 125 126 var out map[string]interface{} 127 err = json.Unmarshal(m, &out) 128 if err != nil { 129 return nil, err 130 } 131 132 out["icon"] = res.Icon 133 out["owner"] = res.Owner 134 out["references"] = res.References 135 out["spec"] = res.Spec 136 out["status"] = res.Status 137 138 return json.Marshal(out) 139 } 140 141 // UnmarshalJSON custom unmarshaller to handle sub resources 142 func (res *AssetRelease) UnmarshalJSON(data []byte) error { 143 var err error 144 145 aux := &apiv1.ResourceInstance{} 146 err = json.Unmarshal(data, aux) 147 if err != nil { 148 return err 149 } 150 151 res.ResourceMeta = aux.ResourceMeta 152 res.Owner = aux.Owner 153 154 // ResourceInstance holds the spec as a map[string]interface{}. 155 // Convert it to bytes, then convert to the spec type for the resource. 156 sr, err := json.Marshal(aux.Spec) 157 if err != nil { 158 return err 159 } 160 161 err = json.Unmarshal(sr, &res.Spec) 162 if err != nil { 163 return err 164 } 165 166 // marshalling subresource Icon 167 if v, ok := aux.SubResources["icon"]; ok { 168 sr, err = json.Marshal(v) 169 if err != nil { 170 return err 171 } 172 173 delete(aux.SubResources, "icon") 174 err = json.Unmarshal(sr, &res.Icon) 175 if err != nil { 176 return err 177 } 178 } 179 180 // marshalling subresource References 181 if v, ok := aux.SubResources["references"]; ok { 182 sr, err = json.Marshal(v) 183 if err != nil { 184 return err 185 } 186 187 delete(aux.SubResources, "references") 188 err = json.Unmarshal(sr, &res.References) 189 if err != nil { 190 return err 191 } 192 } 193 194 // marshalling subresource Status 195 if v, ok := aux.SubResources["status"]; ok { 196 sr, err = json.Marshal(v) 197 if err != nil { 198 return err 199 } 200 201 delete(aux.SubResources, "status") 202 // err = json.Unmarshal(sr, &res.Status) 203 res.Status = &apiv1.ResourceStatus{} 204 err = json.Unmarshal(sr, res.Status) 205 if err != nil { 206 return err 207 } 208 } 209 210 return nil 211 } 212 213 // PluralName returns the plural name of the resource 214 func (res *AssetRelease) PluralName() string { 215 return AssetReleaseResourceName 216 }