github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/catalog/v1alpha1/SubscriptionInvoice.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 SubscriptionInvoiceCtx log.ContextField = "subscriptionInvoice" 17 18 _SubscriptionInvoiceGVK = apiv1.GroupVersionKind{ 19 GroupKind: apiv1.GroupKind{ 20 Group: "catalog", 21 Kind: "SubscriptionInvoice", 22 }, 23 APIVersion: "v1alpha1", 24 } 25 26 SubscriptionInvoiceScopes = []string{"Subscription"} 27 ) 28 29 const ( 30 SubscriptionInvoiceResourceName = "subscriptioninvoices" 31 SubscriptionInvoiceBillingSubResourceName = "billing" 32 SubscriptionInvoiceMarketplaceSubResourceName = "marketplace" 33 SubscriptionInvoiceStateSubResourceName = "state" 34 SubscriptionInvoiceStatusSubResourceName = "status" 35 ) 36 37 func SubscriptionInvoiceGVK() apiv1.GroupVersionKind { 38 return _SubscriptionInvoiceGVK 39 } 40 41 func init() { 42 apiv1.RegisterGVK(_SubscriptionInvoiceGVK, SubscriptionInvoiceScopes[0], SubscriptionInvoiceResourceName) 43 log.RegisterContextField(SubscriptionInvoiceCtx) 44 } 45 46 // SubscriptionInvoice Resource 47 type SubscriptionInvoice struct { 48 apiv1.ResourceMeta 49 Billing SubscriptionInvoiceBilling `json:"billing"` 50 Marketplace SubscriptionInvoiceMarketplace `json:"marketplace"` 51 Owner *apiv1.Owner `json:"owner"` 52 Spec SubscriptionInvoiceSpec `json:"spec"` 53 State SubscriptionInvoiceState `json:"state"` 54 // Status SubscriptionInvoiceStatus `json:"status"` 55 Status *apiv1.ResourceStatus `json:"status"` 56 } 57 58 // NewSubscriptionInvoice creates an empty *SubscriptionInvoice 59 func NewSubscriptionInvoice(name, scopeName string) *SubscriptionInvoice { 60 return &SubscriptionInvoice{ 61 ResourceMeta: apiv1.ResourceMeta{ 62 Name: name, 63 GroupVersionKind: _SubscriptionInvoiceGVK, 64 Metadata: apiv1.Metadata{ 65 Scope: apiv1.MetadataScope{ 66 Name: scopeName, 67 Kind: SubscriptionInvoiceScopes[0], 68 }, 69 }, 70 }, 71 } 72 } 73 74 // SubscriptionInvoiceFromInstanceArray converts a []*ResourceInstance to a []*SubscriptionInvoice 75 func SubscriptionInvoiceFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*SubscriptionInvoice, error) { 76 newArray := make([]*SubscriptionInvoice, 0) 77 for _, item := range fromArray { 78 res := &SubscriptionInvoice{} 79 err := res.FromInstance(item) 80 if err != nil { 81 return make([]*SubscriptionInvoice, 0), err 82 } 83 newArray = append(newArray, res) 84 } 85 86 return newArray, nil 87 } 88 89 // AsInstance converts a SubscriptionInvoice to a ResourceInstance 90 func (res *SubscriptionInvoice) AsInstance() (*apiv1.ResourceInstance, error) { 91 meta := res.ResourceMeta 92 meta.GroupVersionKind = SubscriptionInvoiceGVK() 93 res.ResourceMeta = meta 94 95 m, err := json.Marshal(res) 96 if err != nil { 97 return nil, err 98 } 99 100 instance := apiv1.ResourceInstance{} 101 err = json.Unmarshal(m, &instance) 102 if err != nil { 103 return nil, err 104 } 105 106 return &instance, nil 107 } 108 109 // FromInstance converts a ResourceInstance to a SubscriptionInvoice 110 func (res *SubscriptionInvoice) FromInstance(ri *apiv1.ResourceInstance) error { 111 if ri == nil { 112 res = nil 113 return nil 114 } 115 var err error 116 rawResource := ri.GetRawResource() 117 if rawResource == nil { 118 rawResource, err = json.Marshal(ri) 119 if err != nil { 120 return err 121 } 122 } 123 err = json.Unmarshal(rawResource, res) 124 return err 125 } 126 127 // MarshalJSON custom marshaller to handle sub resources 128 func (res *SubscriptionInvoice) MarshalJSON() ([]byte, error) { 129 m, err := json.Marshal(&res.ResourceMeta) 130 if err != nil { 131 return nil, err 132 } 133 134 var out map[string]interface{} 135 err = json.Unmarshal(m, &out) 136 if err != nil { 137 return nil, err 138 } 139 140 out["billing"] = res.Billing 141 out["marketplace"] = res.Marketplace 142 out["owner"] = res.Owner 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 *SubscriptionInvoice) 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 Billing 176 if v, ok := aux.SubResources["billing"]; ok { 177 sr, err = json.Marshal(v) 178 if err != nil { 179 return err 180 } 181 182 delete(aux.SubResources, "billing") 183 err = json.Unmarshal(sr, &res.Billing) 184 if err != nil { 185 return err 186 } 187 } 188 189 // marshalling subresource Marketplace 190 if v, ok := aux.SubResources["marketplace"]; ok { 191 sr, err = json.Marshal(v) 192 if err != nil { 193 return err 194 } 195 196 delete(aux.SubResources, "marketplace") 197 err = json.Unmarshal(sr, &res.Marketplace) 198 if err != nil { 199 return err 200 } 201 } 202 203 // marshalling subresource State 204 if v, ok := aux.SubResources["state"]; ok { 205 sr, err = json.Marshal(v) 206 if err != nil { 207 return err 208 } 209 210 delete(aux.SubResources, "state") 211 err = json.Unmarshal(sr, &res.State) 212 if err != nil { 213 return err 214 } 215 } 216 217 // marshalling subresource Status 218 if v, ok := aux.SubResources["status"]; ok { 219 sr, err = json.Marshal(v) 220 if err != nil { 221 return err 222 } 223 224 delete(aux.SubResources, "status") 225 // err = json.Unmarshal(sr, &res.Status) 226 res.Status = &apiv1.ResourceStatus{} 227 err = json.Unmarshal(sr, res.Status) 228 if err != nil { 229 return err 230 } 231 } 232 233 return nil 234 } 235 236 // PluralName returns the plural name of the resource 237 func (res *SubscriptionInvoice) PluralName() string { 238 return SubscriptionInvoiceResourceName 239 }