github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/api/cloudcontroller/ccv3/build.go (about)

     1  package ccv3
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/internal"
     9  )
    10  
    11  type BuildState string
    12  
    13  const (
    14  	BuildStateFailed  BuildState = "FAILED"
    15  	BuildStateStaged  BuildState = "STAGED"
    16  	BuildStateStaging BuildState = "STAGING"
    17  )
    18  
    19  type Build struct {
    20  	CreatedAt   string
    21  	GUID        string
    22  	Error       string
    23  	PackageGUID string
    24  	State       BuildState
    25  	DropletGUID string
    26  }
    27  
    28  func (b Build) MarshalJSON() ([]byte, error) {
    29  	var ccBuild struct {
    30  		Package struct {
    31  			GUID string `json:"guid"`
    32  		} `json:"package"`
    33  	}
    34  
    35  	ccBuild.Package.GUID = b.PackageGUID
    36  
    37  	return json.Marshal(ccBuild)
    38  }
    39  
    40  func (b *Build) UnmarshalJSON(data []byte) error {
    41  	var ccBuild struct {
    42  		CreatedAt string `json:"created_at,omitempty"`
    43  		GUID      string `json:"guid,omitempty"`
    44  		Error     string `json:"error"`
    45  		Package   struct {
    46  			GUID string `json:"guid"`
    47  		} `json:"package"`
    48  		State   BuildState `json:"state,omitempty"`
    49  		Droplet struct {
    50  			GUID string `json:"guid"`
    51  		} `json:"droplet"`
    52  	}
    53  
    54  	if err := json.Unmarshal(data, &ccBuild); err != nil {
    55  		return err
    56  	}
    57  
    58  	b.GUID = ccBuild.GUID
    59  	b.CreatedAt = ccBuild.CreatedAt
    60  	b.Error = ccBuild.Error
    61  	b.PackageGUID = ccBuild.Package.GUID
    62  	b.State = ccBuild.State
    63  	b.DropletGUID = ccBuild.Droplet.GUID
    64  
    65  	return nil
    66  }
    67  
    68  // CreateBuild creates the given build, requires Package GUID to be set on the
    69  // build.
    70  func (client *Client) CreateBuild(build Build) (Build, Warnings, error) {
    71  	bodyBytes, err := json.Marshal(build)
    72  	if err != nil {
    73  		return Build{}, nil, err
    74  	}
    75  
    76  	request, err := client.newHTTPRequest(requestOptions{
    77  		RequestName: internal.PostBuildRequest,
    78  		Body:        bytes.NewReader(bodyBytes),
    79  	})
    80  	if err != nil {
    81  		return Build{}, nil, err
    82  	}
    83  
    84  	var responseBuild Build
    85  	response := cloudcontroller.Response{
    86  		Result: &responseBuild,
    87  	}
    88  	err = client.connection.Make(request, &response)
    89  
    90  	return responseBuild, response.Warnings, err
    91  }
    92  
    93  // GetBuild gets the build with the given GUID.
    94  func (client *Client) GetBuild(guid string) (Build, Warnings, error) {
    95  	request, err := client.newHTTPRequest(requestOptions{
    96  		RequestName: internal.GetBuildRequest,
    97  		URIParams:   internal.Params{"build_guid": guid},
    98  	})
    99  	if err != nil {
   100  		return Build{}, nil, err
   101  	}
   102  
   103  	var responseBuild Build
   104  	response := cloudcontroller.Response{
   105  		Result: &responseBuild,
   106  	}
   107  	err = client.connection.Make(request, &response)
   108  
   109  	return responseBuild, response.Warnings, err
   110  }