github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/catalog/v1alpha1/Subscription.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 SubscriptionCtx log.ContextField = "subscription" 17 18 _SubscriptionGVK = apiv1.GroupVersionKind{ 19 GroupKind: apiv1.GroupKind{ 20 Group: "catalog", 21 Kind: "Subscription", 22 }, 23 APIVersion: "v1alpha1", 24 } 25 26 SubscriptionScopes = []string{""} 27 ) 28 29 const ( 30 SubscriptionResourceName = "subscriptions" 31 SubscriptionApprovalSubResourceName = "approval" 32 SubscriptionBillingSubResourceName = "billing" 33 SubscriptionMarketplaceSubResourceName = "marketplace" 34 SubscriptionReferencesSubResourceName = "references" 35 SubscriptionStateSubResourceName = "state" 36 SubscriptionStatusSubResourceName = "status" 37 ) 38 39 func SubscriptionGVK() apiv1.GroupVersionKind { 40 return _SubscriptionGVK 41 } 42 43 func init() { 44 apiv1.RegisterGVK(_SubscriptionGVK, SubscriptionScopes[0], SubscriptionResourceName) 45 log.RegisterContextField(SubscriptionCtx) 46 } 47 48 // Subscription Resource 49 type Subscription struct { 50 apiv1.ResourceMeta 51 Approval SubscriptionApproval `json:"approval"` 52 Billing SubscriptionBilling `json:"billing"` 53 Marketplace SubscriptionMarketplace `json:"marketplace"` 54 Owner *apiv1.Owner `json:"owner"` 55 References SubscriptionReferences `json:"references"` 56 Spec SubscriptionSpec `json:"spec"` 57 State SubscriptionState `json:"state"` 58 // Status SubscriptionStatus `json:"status"` 59 Status *apiv1.ResourceStatus `json:"status"` 60 } 61 62 // NewSubscription creates an empty *Subscription 63 func NewSubscription(name string) *Subscription { 64 return &Subscription{ 65 ResourceMeta: apiv1.ResourceMeta{ 66 Name: name, 67 GroupVersionKind: _SubscriptionGVK, 68 }, 69 } 70 } 71 72 // SubscriptionFromInstanceArray converts a []*ResourceInstance to a []*Subscription 73 func SubscriptionFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*Subscription, error) { 74 newArray := make([]*Subscription, 0) 75 for _, item := range fromArray { 76 res := &Subscription{} 77 err := res.FromInstance(item) 78 if err != nil { 79 return make([]*Subscription, 0), err 80 } 81 newArray = append(newArray, res) 82 } 83 84 return newArray, nil 85 } 86 87 // AsInstance converts a Subscription to a ResourceInstance 88 func (res *Subscription) AsInstance() (*apiv1.ResourceInstance, error) { 89 meta := res.ResourceMeta 90 meta.GroupVersionKind = SubscriptionGVK() 91 res.ResourceMeta = meta 92 93 m, err := json.Marshal(res) 94 if err != nil { 95 return nil, err 96 } 97 98 instance := apiv1.ResourceInstance{} 99 err = json.Unmarshal(m, &instance) 100 if err != nil { 101 return nil, err 102 } 103 104 return &instance, nil 105 } 106 107 // FromInstance converts a ResourceInstance to a Subscription 108 func (res *Subscription) FromInstance(ri *apiv1.ResourceInstance) error { 109 if ri == nil { 110 res = nil 111 return nil 112 } 113 var err error 114 rawResource := ri.GetRawResource() 115 if rawResource == nil { 116 rawResource, err = json.Marshal(ri) 117 if err != nil { 118 return err 119 } 120 } 121 err = json.Unmarshal(rawResource, res) 122 return err 123 } 124 125 // MarshalJSON custom marshaller to handle sub resources 126 func (res *Subscription) MarshalJSON() ([]byte, error) { 127 m, err := json.Marshal(&res.ResourceMeta) 128 if err != nil { 129 return nil, err 130 } 131 132 var out map[string]interface{} 133 err = json.Unmarshal(m, &out) 134 if err != nil { 135 return nil, err 136 } 137 138 out["approval"] = res.Approval 139 out["billing"] = res.Billing 140 out["marketplace"] = res.Marketplace 141 out["owner"] = res.Owner 142 out["references"] = res.References 143 out["spec"] = res.Spec 144 out["state"] = res.State 145 out["status"] = res.Status 146 147 return json.Marshal(out) 148 } 149 150 // UnmarshalJSON custom unmarshaller to handle sub resources 151 func (res *Subscription) UnmarshalJSON(data []byte) error { 152 var err error 153 154 aux := &apiv1.ResourceInstance{} 155 err = json.Unmarshal(data, aux) 156 if err != nil { 157 return err 158 } 159 160 res.ResourceMeta = aux.ResourceMeta 161 res.Owner = aux.Owner 162 163 // ResourceInstance holds the spec as a map[string]interface{}. 164 // Convert it to bytes, then convert to the spec type for the resource. 165 sr, err := json.Marshal(aux.Spec) 166 if err != nil { 167 return err 168 } 169 170 err = json.Unmarshal(sr, &res.Spec) 171 if err != nil { 172 return err 173 } 174 175 // marshalling subresource Approval 176 if v, ok := aux.SubResources["approval"]; ok { 177 sr, err = json.Marshal(v) 178 if err != nil { 179 return err 180 } 181 182 delete(aux.SubResources, "approval") 183 err = json.Unmarshal(sr, &res.Approval) 184 if err != nil { 185 return err 186 } 187 } 188 189 // marshalling subresource Billing 190 if v, ok := aux.SubResources["billing"]; ok { 191 sr, err = json.Marshal(v) 192 if err != nil { 193 return err 194 } 195 196 delete(aux.SubResources, "billing") 197 err = json.Unmarshal(sr, &res.Billing) 198 if err != nil { 199 return err 200 } 201 } 202 203 // marshalling subresource Marketplace 204 if v, ok := aux.SubResources["marketplace"]; ok { 205 sr, err = json.Marshal(v) 206 if err != nil { 207 return err 208 } 209 210 delete(aux.SubResources, "marketplace") 211 err = json.Unmarshal(sr, &res.Marketplace) 212 if err != nil { 213 return err 214 } 215 } 216 217 // marshalling subresource References 218 if v, ok := aux.SubResources["references"]; ok { 219 sr, err = json.Marshal(v) 220 if err != nil { 221 return err 222 } 223 224 delete(aux.SubResources, "references") 225 err = json.Unmarshal(sr, &res.References) 226 if err != nil { 227 return err 228 } 229 } 230 231 // marshalling subresource State 232 if v, ok := aux.SubResources["state"]; ok { 233 sr, err = json.Marshal(v) 234 if err != nil { 235 return err 236 } 237 238 delete(aux.SubResources, "state") 239 err = json.Unmarshal(sr, &res.State) 240 if err != nil { 241 return err 242 } 243 } 244 245 // marshalling subresource Status 246 if v, ok := aux.SubResources["status"]; ok { 247 sr, err = json.Marshal(v) 248 if err != nil { 249 return err 250 } 251 252 delete(aux.SubResources, "status") 253 // err = json.Unmarshal(sr, &res.Status) 254 res.Status = &apiv1.ResourceStatus{} 255 err = json.Unmarshal(sr, res.Status) 256 if err != nil { 257 return err 258 } 259 } 260 261 return nil 262 } 263 264 // PluralName returns the plural name of the resource 265 func (res *Subscription) PluralName() string { 266 return SubscriptionResourceName 267 }