github.com/Axway/agent-sdk@v1.1.101/pkg/apic/apiserver/models/catalog/v1alpha1/Marketplace.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 MarketplaceCtx log.ContextField = "marketplace" 17 18 _MarketplaceGVK = apiv1.GroupVersionKind{ 19 GroupKind: apiv1.GroupKind{ 20 Group: "catalog", 21 Kind: "Marketplace", 22 }, 23 APIVersion: "v1alpha1", 24 } 25 26 MarketplaceScopes = []string{""} 27 ) 28 29 const ( 30 MarketplaceResourceName = "marketplaces" 31 MarketplaceBillingSubResourceName = "billing" 32 ) 33 34 func MarketplaceGVK() apiv1.GroupVersionKind { 35 return _MarketplaceGVK 36 } 37 38 func init() { 39 apiv1.RegisterGVK(_MarketplaceGVK, MarketplaceScopes[0], MarketplaceResourceName) 40 log.RegisterContextField(MarketplaceCtx) 41 } 42 43 // Marketplace Resource 44 type Marketplace struct { 45 apiv1.ResourceMeta 46 Billing MarketplaceBilling `json:"billing"` 47 Owner *apiv1.Owner `json:"owner"` 48 Spec MarketplaceSpec `json:"spec"` 49 } 50 51 // NewMarketplace creates an empty *Marketplace 52 func NewMarketplace(name string) *Marketplace { 53 return &Marketplace{ 54 ResourceMeta: apiv1.ResourceMeta{ 55 Name: name, 56 GroupVersionKind: _MarketplaceGVK, 57 }, 58 } 59 } 60 61 // MarketplaceFromInstanceArray converts a []*ResourceInstance to a []*Marketplace 62 func MarketplaceFromInstanceArray(fromArray []*apiv1.ResourceInstance) ([]*Marketplace, error) { 63 newArray := make([]*Marketplace, 0) 64 for _, item := range fromArray { 65 res := &Marketplace{} 66 err := res.FromInstance(item) 67 if err != nil { 68 return make([]*Marketplace, 0), err 69 } 70 newArray = append(newArray, res) 71 } 72 73 return newArray, nil 74 } 75 76 // AsInstance converts a Marketplace to a ResourceInstance 77 func (res *Marketplace) AsInstance() (*apiv1.ResourceInstance, error) { 78 meta := res.ResourceMeta 79 meta.GroupVersionKind = MarketplaceGVK() 80 res.ResourceMeta = meta 81 82 m, err := json.Marshal(res) 83 if err != nil { 84 return nil, err 85 } 86 87 instance := apiv1.ResourceInstance{} 88 err = json.Unmarshal(m, &instance) 89 if err != nil { 90 return nil, err 91 } 92 93 return &instance, nil 94 } 95 96 // FromInstance converts a ResourceInstance to a Marketplace 97 func (res *Marketplace) FromInstance(ri *apiv1.ResourceInstance) error { 98 if ri == nil { 99 res = nil 100 return nil 101 } 102 var err error 103 rawResource := ri.GetRawResource() 104 if rawResource == nil { 105 rawResource, err = json.Marshal(ri) 106 if err != nil { 107 return err 108 } 109 } 110 err = json.Unmarshal(rawResource, res) 111 return err 112 } 113 114 // MarshalJSON custom marshaller to handle sub resources 115 func (res *Marketplace) MarshalJSON() ([]byte, error) { 116 m, err := json.Marshal(&res.ResourceMeta) 117 if err != nil { 118 return nil, err 119 } 120 121 var out map[string]interface{} 122 err = json.Unmarshal(m, &out) 123 if err != nil { 124 return nil, err 125 } 126 127 out["billing"] = res.Billing 128 out["owner"] = res.Owner 129 out["spec"] = res.Spec 130 131 return json.Marshal(out) 132 } 133 134 // UnmarshalJSON custom unmarshaller to handle sub resources 135 func (res *Marketplace) UnmarshalJSON(data []byte) error { 136 var err error 137 138 aux := &apiv1.ResourceInstance{} 139 err = json.Unmarshal(data, aux) 140 if err != nil { 141 return err 142 } 143 144 res.ResourceMeta = aux.ResourceMeta 145 res.Owner = aux.Owner 146 147 // ResourceInstance holds the spec as a map[string]interface{}. 148 // Convert it to bytes, then convert to the spec type for the resource. 149 sr, err := json.Marshal(aux.Spec) 150 if err != nil { 151 return err 152 } 153 154 err = json.Unmarshal(sr, &res.Spec) 155 if err != nil { 156 return err 157 } 158 159 // marshalling subresource Billing 160 if v, ok := aux.SubResources["billing"]; ok { 161 sr, err = json.Marshal(v) 162 if err != nil { 163 return err 164 } 165 166 delete(aux.SubResources, "billing") 167 err = json.Unmarshal(sr, &res.Billing) 168 if err != nil { 169 return err 170 } 171 } 172 173 return nil 174 } 175 176 // PluralName returns the plural name of the resource 177 func (res *Marketplace) PluralName() string { 178 return MarketplaceResourceName 179 }