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