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  }