github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/api/resources/service_offerings.go (about)

     1  package resources
     2  
     3  import (
     4  	"encoding/json"
     5  	"strconv"
     6  
     7  	"github.com/cloudfoundry/cli/cf/models"
     8  )
     9  
    10  type PaginatedServiceOfferingResources struct {
    11  	Resources []ServiceOfferingResource
    12  }
    13  
    14  type ServiceOfferingResource struct {
    15  	Resource
    16  	Entity ServiceOfferingEntity
    17  }
    18  
    19  type ServiceOfferingEntity struct {
    20  	Label        string                `json:"label"`
    21  	Version      string                `json:"version"`
    22  	Description  string                `json:"description"`
    23  	Provider     string                `json:"provider"`
    24  	BrokerGuid   string                `json:"service_broker_guid"`
    25  	ServicePlans []ServicePlanResource `json:"service_plans"`
    26  	Extra        ServiceOfferingExtra
    27  }
    28  
    29  type ServiceOfferingExtra struct {
    30  	DocumentationURL string `json:"documentationUrl"`
    31  }
    32  
    33  func (resource ServiceOfferingResource) ToFields() (fields models.ServiceOfferingFields) {
    34  	fields.Label = resource.Entity.Label
    35  	fields.Version = resource.Entity.Version
    36  	fields.Provider = resource.Entity.Provider
    37  	fields.Description = resource.Entity.Description
    38  	fields.BrokerGuid = resource.Entity.BrokerGuid
    39  	fields.Guid = resource.Metadata.Guid
    40  	fields.DocumentationUrl = resource.Entity.Extra.DocumentationURL
    41  
    42  	return
    43  }
    44  
    45  func (resource ServiceOfferingResource) ToModel() (offering models.ServiceOffering) {
    46  	offering.ServiceOfferingFields = resource.ToFields()
    47  	for _, p := range resource.Entity.ServicePlans {
    48  		servicePlan := models.ServicePlanFields{}
    49  		servicePlan.Name = p.Entity.Name
    50  		servicePlan.Guid = p.Metadata.Guid
    51  		offering.Plans = append(offering.Plans, servicePlan)
    52  	}
    53  	return offering
    54  }
    55  
    56  type serviceOfferingExtra ServiceOfferingExtra
    57  
    58  func (resource *ServiceOfferingExtra) UnmarshalJSON(rawData []byte) error {
    59  	if string(rawData) == "null" {
    60  		return nil
    61  	}
    62  
    63  	extra := serviceOfferingExtra{}
    64  
    65  	unquoted, err := strconv.Unquote(string(rawData))
    66  	if err != nil {
    67  		return err
    68  	}
    69  
    70  	err = json.Unmarshal([]byte(unquoted), &extra)
    71  	if err != nil {
    72  		return err
    73  	}
    74  
    75  	*resource = ServiceOfferingExtra(extra)
    76  
    77  	return nil
    78  }