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 }