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  }