github.com/pivotal-cf/go-pivnet/v6@v6.0.2/release_dependencies.go (about) 1 package pivnet 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "net/http" 8 ) 9 10 type ReleaseDependenciesService struct { 11 client Client 12 } 13 14 type ReleaseDependenciesResponse struct { 15 ReleaseDependencies []ReleaseDependency `json:"dependencies,omitempty"` 16 } 17 18 type ReleaseDependency struct { 19 Release DependentRelease `json:"release,omitempty" yaml:"release,omitempty"` 20 } 21 22 type DependentRelease struct { 23 ID int `json:"id,omitempty" yaml:"id,omitempty"` 24 Version string `json:"version,omitempty" yaml:"version,omitempty"` 25 Product Product `json:"product,omitempty" yaml:"product,omitempty"` 26 } 27 28 func (r ReleaseDependenciesService) List(productSlug string, releaseID int) ([]ReleaseDependency, error) { 29 url := fmt.Sprintf( 30 "/products/%s/releases/%d/dependencies", 31 productSlug, 32 releaseID, 33 ) 34 35 var response ReleaseDependenciesResponse 36 resp, err := r.client.MakeRequest( 37 "GET", 38 url, 39 http.StatusOK, 40 nil, 41 ) 42 if err != nil { 43 return nil, err 44 } 45 defer resp.Body.Close() 46 47 err = json.NewDecoder(resp.Body).Decode(&response) 48 if err != nil { 49 return nil, err 50 } 51 52 return response.ReleaseDependencies, nil 53 } 54 55 func (r ReleaseDependenciesService) Add( 56 productSlug string, 57 releaseID int, 58 dependentReleaseID int, 59 ) error { 60 url := fmt.Sprintf( 61 "/products/%s/releases/%d/add_dependency", 62 productSlug, 63 releaseID, 64 ) 65 66 body := addRemoveDependencyBody{ 67 Dependency: addRemoveDependencyBodyDependency{ 68 ReleaseID: dependentReleaseID, 69 }, 70 } 71 72 b, err := json.Marshal(body) 73 if err != nil { 74 // Untested as we cannot force an error because we are marshalling 75 // a known-good body 76 return err 77 } 78 79 resp, err := r.client.MakeRequest( 80 "PATCH", 81 url, 82 http.StatusNoContent, 83 bytes.NewReader(b), 84 ) 85 if err != nil { 86 return err 87 } 88 defer resp.Body.Close() 89 90 return nil 91 } 92 93 func (r ReleaseDependenciesService) Remove( 94 productSlug string, 95 releaseID int, 96 dependentReleaseID int, 97 ) error { 98 url := fmt.Sprintf( 99 "/products/%s/releases/%d/remove_dependency", 100 productSlug, 101 releaseID, 102 ) 103 104 body := addRemoveDependencyBody{ 105 Dependency: addRemoveDependencyBodyDependency{ 106 ReleaseID: dependentReleaseID, 107 }, 108 } 109 110 b, err := json.Marshal(body) 111 if err != nil { 112 // Untested as we cannot force an error because we are marshalling 113 // a known-good body 114 return err 115 } 116 117 resp, err := r.client.MakeRequest( 118 "PATCH", 119 url, 120 http.StatusNoContent, 121 bytes.NewReader(b), 122 ) 123 if err != nil { 124 return err 125 } 126 defer resp.Body.Close() 127 128 return nil 129 } 130 131 type addRemoveDependencyBody struct { 132 Dependency addRemoveDependencyBodyDependency `json:"dependency"` 133 } 134 135 type addRemoveDependencyBodyDependency struct { 136 ReleaseID int `json:"release_id"` 137 }