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 }