github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/api/cloudcontroller/ccv2/domain.go (about)

     1  package ccv2
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"github.com/liamawhite/cli-with-i18n/api/cloudcontroller"
     7  	"github.com/liamawhite/cli-with-i18n/api/cloudcontroller/ccerror"
     8  	"github.com/liamawhite/cli-with-i18n/api/cloudcontroller/ccv2/constant"
     9  	"github.com/liamawhite/cli-with-i18n/api/cloudcontroller/ccv2/internal"
    10  )
    11  
    12  // Domain represents a Cloud Controller Domain.
    13  type Domain struct {
    14  	GUID            string
    15  	Name            string
    16  	RouterGroupGUID string
    17  	RouterGroupType constant.RouterGroupType
    18  }
    19  
    20  // UnmarshalJSON helps unmarshal a Cloud Controller Domain response.
    21  func (domain *Domain) UnmarshalJSON(data []byte) error {
    22  	var ccDomain struct {
    23  		Metadata internal.Metadata `json:"metadata"`
    24  		Entity   struct {
    25  			Name            string `json:"name"`
    26  			RouterGroupGUID string `json:"router_group_guid"`
    27  			RouterGroupType string `json:"router_group_type"`
    28  		} `json:"entity"`
    29  	}
    30  	if err := json.Unmarshal(data, &ccDomain); err != nil {
    31  		return err
    32  	}
    33  
    34  	domain.GUID = ccDomain.Metadata.GUID
    35  	domain.Name = ccDomain.Entity.Name
    36  	domain.RouterGroupGUID = ccDomain.Entity.RouterGroupGUID
    37  	domain.RouterGroupType = constant.RouterGroupType(ccDomain.Entity.RouterGroupType)
    38  	return nil
    39  }
    40  
    41  // GetSharedDomain returns the Shared Domain associated with the provided
    42  // Domain GUID.
    43  func (client *Client) GetSharedDomain(domainGUID string) (Domain, Warnings, error) {
    44  	request, err := client.newHTTPRequest(requestOptions{
    45  		RequestName: internal.GetSharedDomainRequest,
    46  		URIParams:   map[string]string{"shared_domain_guid": domainGUID},
    47  	})
    48  	if err != nil {
    49  		return Domain{}, nil, err
    50  	}
    51  
    52  	var domain Domain
    53  	response := cloudcontroller.Response{
    54  		Result: &domain,
    55  	}
    56  
    57  	err = client.connection.Make(request, &response)
    58  	if err != nil {
    59  		return Domain{}, response.Warnings, err
    60  	}
    61  
    62  	return domain, response.Warnings, nil
    63  }
    64  
    65  // GetPrivateDomain returns the Private Domain associated with the provided
    66  // Domain GUID.
    67  func (client *Client) GetPrivateDomain(domainGUID string) (Domain, Warnings, error) {
    68  	request, err := client.newHTTPRequest(requestOptions{
    69  		RequestName: internal.GetPrivateDomainRequest,
    70  		URIParams:   map[string]string{"private_domain_guid": domainGUID},
    71  	})
    72  	if err != nil {
    73  		return Domain{}, nil, err
    74  	}
    75  
    76  	var domain Domain
    77  	response := cloudcontroller.Response{
    78  		Result: &domain,
    79  	}
    80  
    81  	err = client.connection.Make(request, &response)
    82  	if err != nil {
    83  		return Domain{}, response.Warnings, err
    84  	}
    85  
    86  	return domain, response.Warnings, nil
    87  }
    88  
    89  // GetSharedDomains returns the global shared domains.
    90  func (client *Client) GetSharedDomains(queries ...Query) ([]Domain, Warnings, error) {
    91  	request, err := client.newHTTPRequest(requestOptions{
    92  		RequestName: internal.GetSharedDomainsRequest,
    93  		Query:       FormatQueryParameters(queries),
    94  	})
    95  	if err != nil {
    96  		return []Domain{}, nil, err
    97  	}
    98  
    99  	fullDomainsList := []Domain{}
   100  	warnings, err := client.paginate(request, Domain{}, func(item interface{}) error {
   101  		if domain, ok := item.(Domain); ok {
   102  			fullDomainsList = append(fullDomainsList, domain)
   103  		} else {
   104  			return ccerror.UnknownObjectInListError{
   105  				Expected:   Domain{},
   106  				Unexpected: item,
   107  			}
   108  		}
   109  		return nil
   110  	})
   111  
   112  	return fullDomainsList, warnings, err
   113  }
   114  
   115  // GetOrganizationPrivateDomains returns the private domains associated with an organization.
   116  func (client *Client) GetOrganizationPrivateDomains(orgGUID string, queries ...Query) ([]Domain, Warnings, error) {
   117  	request, err := client.newHTTPRequest(requestOptions{
   118  		RequestName: internal.GetOrganizationPrivateDomainsRequest,
   119  		Query:       FormatQueryParameters(queries),
   120  		URIParams:   map[string]string{"organization_guid": orgGUID},
   121  	})
   122  	if err != nil {
   123  		return []Domain{}, nil, err
   124  	}
   125  
   126  	fullDomainsList := []Domain{}
   127  	warnings, err := client.paginate(request, Domain{}, func(item interface{}) error {
   128  		if domain, ok := item.(Domain); ok {
   129  			fullDomainsList = append(fullDomainsList, domain)
   130  		} else {
   131  			return ccerror.UnknownObjectInListError{
   132  				Expected:   Domain{},
   133  				Unexpected: item,
   134  			}
   135  		}
   136  		return nil
   137  	})
   138  
   139  	return fullDomainsList, warnings, err
   140  }