github.com/pivotal-cf/go-pivnet/v6@v6.0.2/dependency_specifiers.go (about)

     1  package pivnet
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"fmt"
     7  	"net/http"
     8  )
     9  
    10  type DependencySpecifiersService struct {
    11  	client Client
    12  }
    13  
    14  type DependencySpecifiersResponse struct {
    15  	DependencySpecifiers []DependencySpecifier `json:"dependency_specifiers,omitempty"`
    16  }
    17  
    18  type DependencySpecifierResponse struct {
    19  	DependencySpecifier DependencySpecifier `json:"dependency_specifier,omitempty"`
    20  }
    21  
    22  type DependencySpecifier struct {
    23  	ID        int     `json:"id,omitempty" yaml:"id,omitempty"`
    24  	Product   Product `json:"product,omitempty" yaml:"product,omitempty"`
    25  	Specifier string  `json:"specifier,omitempty" yaml:"specifier,omitempty"`
    26  }
    27  
    28  func (r DependencySpecifiersService) List(productSlug string, releaseID int) ([]DependencySpecifier, error) {
    29  	url := fmt.Sprintf(
    30  		"/products/%s/releases/%d/dependency_specifiers",
    31  		productSlug,
    32  		releaseID,
    33  	)
    34  
    35  	var response DependencySpecifiersResponse
    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.DependencySpecifiers, nil
    53  }
    54  
    55  func (r DependencySpecifiersService) Get(productSlug string, releaseID int, dependencySpecifierID int) (DependencySpecifier, error) {
    56  	url := fmt.Sprintf(
    57  		"/products/%s/releases/%d/dependency_specifiers/%d",
    58  		productSlug,
    59  		releaseID,
    60  		dependencySpecifierID,
    61  	)
    62  
    63  	resp, err := r.client.MakeRequest(
    64  		"GET",
    65  		url,
    66  		http.StatusOK,
    67  		nil,
    68  	)
    69  	if err != nil {
    70  		return DependencySpecifier{}, err
    71  	}
    72  	defer resp.Body.Close()
    73  
    74  	var response DependencySpecifierResponse
    75  	err = json.NewDecoder(resp.Body).Decode(&response)
    76  	if err != nil {
    77  		return DependencySpecifier{}, err
    78  	}
    79  
    80  	return response.DependencySpecifier, nil
    81  }
    82  
    83  func (r DependencySpecifiersService) Create(
    84  	productSlug string,
    85  	releaseID int,
    86  	dependentProductSlug string,
    87  	specifier string,
    88  ) (DependencySpecifier, error) {
    89  	url := fmt.Sprintf(
    90  		"/products/%s/releases/%d/dependency_specifiers",
    91  		productSlug,
    92  		releaseID,
    93  	)
    94  
    95  	body := createDependencySpecifierBody{
    96  		createDependencySpecifierBodyDependencySpecifier{
    97  			ProductSlug: dependentProductSlug,
    98  			Specifier:   specifier,
    99  		},
   100  	}
   101  
   102  	b, err := json.Marshal(body)
   103  	if err != nil {
   104  		// Untested as we cannot force an error because we are marshalling
   105  		// a known-good body
   106  		return DependencySpecifier{}, err
   107  	}
   108  
   109  	resp, err := r.client.MakeRequest(
   110  		"POST",
   111  		url,
   112  		http.StatusCreated,
   113  		bytes.NewReader(b),
   114  	)
   115  	if err != nil {
   116  		return DependencySpecifier{}, err
   117  	}
   118  	defer resp.Body.Close()
   119  
   120  	var response DependencySpecifierResponse
   121  	err = json.NewDecoder(resp.Body).Decode(&response)
   122  	if err != nil {
   123  		return DependencySpecifier{}, err
   124  	}
   125  
   126  	return response.DependencySpecifier, nil
   127  }
   128  
   129  func (r DependencySpecifiersService) Delete(
   130  	productSlug string,
   131  	releaseID int,
   132  	dependencySpecifierID int,
   133  ) error {
   134  	url := fmt.Sprintf(
   135  		"/products/%s/releases/%d/dependency_specifiers/%d",
   136  		productSlug,
   137  		releaseID,
   138  		dependencySpecifierID,
   139  	)
   140  
   141  	resp, err := r.client.MakeRequest(
   142  		"DELETE",
   143  		url,
   144  		http.StatusNoContent,
   145  		nil,
   146  	)
   147  	if err != nil {
   148  		return err
   149  	}
   150  	defer resp.Body.Close()
   151  
   152  	return nil
   153  }
   154  
   155  type createDependencySpecifierBody struct {
   156  	DependencySpecifier createDependencySpecifierBodyDependencySpecifier `json:"dependency_specifier"`
   157  }
   158  
   159  type createDependencySpecifierBodyDependencySpecifier struct {
   160  	ProductSlug string `json:"product_slug"`
   161  	Specifier   string `json:"specifier"`
   162  }