github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/api/cloudcontroller/ccv3/feature_flag.go (about)

     1  package ccv3
     2  
     3  import (
     4  	"bytes"
     5  
     6  	"encoding/json"
     7  
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/internal"
    11  )
    12  
    13  // FeatureFlag represents a Cloud Controller V3 Feature Flag.
    14  type FeatureFlag struct {
    15  	Name    string `json:"name"`
    16  	Enabled bool   `json:"enabled"`
    17  }
    18  
    19  func (f FeatureFlag) MarshalJSON() ([]byte, error) {
    20  	var ccBodyFlag struct {
    21  		Enabled bool `json:"enabled"`
    22  	}
    23  
    24  	ccBodyFlag.Enabled = f.Enabled
    25  
    26  	return json.Marshal(ccBodyFlag)
    27  }
    28  
    29  func (client *Client) GetFeatureFlag(flagName string) (FeatureFlag, Warnings, error) {
    30  	request, err := client.newHTTPRequest(requestOptions{
    31  		RequestName: internal.GetFeatureFlagRequest,
    32  		URIParams:   map[string]string{"name": flagName},
    33  	})
    34  	if err != nil {
    35  		return FeatureFlag{}, nil, err
    36  	}
    37  	var ccFlag FeatureFlag
    38  	response := cloudcontroller.Response{
    39  		DecodeJSONResponseInto: &ccFlag,
    40  	}
    41  
    42  	err = client.connection.Make(request, &response)
    43  
    44  	if err != nil {
    45  		return FeatureFlag{}, response.Warnings, err
    46  	}
    47  	return ccFlag, response.Warnings, nil
    48  }
    49  
    50  // GetFeatureFlags lists feature flags.
    51  func (client *Client) GetFeatureFlags() ([]FeatureFlag, Warnings, error) {
    52  	request, err := client.newHTTPRequest(requestOptions{
    53  		RequestName: internal.GetFeatureFlagsRequest,
    54  	})
    55  
    56  	if err != nil {
    57  		return nil, nil, err
    58  	}
    59  
    60  	var fullFeatureFlagList []FeatureFlag
    61  	warnings, err := client.paginate(request, FeatureFlag{}, func(item interface{}) error {
    62  		if featureFlag, ok := item.(FeatureFlag); ok {
    63  			fullFeatureFlagList = append(fullFeatureFlagList, featureFlag)
    64  		} else {
    65  			return ccerror.UnknownObjectInListError{
    66  				Expected:   FeatureFlag{},
    67  				Unexpected: item,
    68  			}
    69  		}
    70  		return nil
    71  	})
    72  
    73  	return fullFeatureFlagList, warnings, err
    74  
    75  }
    76  
    77  func (client *Client) UpdateFeatureFlag(flag FeatureFlag) (FeatureFlag, Warnings, error) {
    78  	bodyBytes, err := json.Marshal(flag)
    79  	if err != nil {
    80  		return FeatureFlag{}, nil, err
    81  	}
    82  
    83  	request, err := client.newHTTPRequest(requestOptions{
    84  		RequestName: internal.PatchFeatureFlagRequest,
    85  		URIParams:   map[string]string{"name": flag.Name},
    86  		Body:        bytes.NewReader(bodyBytes),
    87  	})
    88  
    89  	if err != nil {
    90  		return FeatureFlag{}, nil, err
    91  	}
    92  
    93  	var ccFlag FeatureFlag
    94  	response := cloudcontroller.Response{
    95  		DecodeJSONResponseInto: &ccFlag,
    96  	}
    97  
    98  	err = client.connection.Make(request, &response)
    99  
   100  	return ccFlag, response.Warnings, err
   101  }