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

     1  package ccv3
     2  
     3  import (
     4  	"io"
     5  	"net/http"
     6  	"net/url"
     7  
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/internal"
    10  )
    11  
    12  // requestOptions contains all the options to create an HTTP request.
    13  type requestOptions struct {
    14  	// URIParams are the list URI route parameters
    15  	URIParams internal.Params
    16  
    17  	// Query is a list of HTTP query parameters. Query will overwrite any
    18  	// existing query string in the URI. If you want to preserve the query
    19  	// string in URI make sure Query is nil.
    20  	Query url.Values
    21  
    22  	// RequestName is the name of the request (see routes)
    23  	RequestName string
    24  
    25  	// Method is the HTTP method.
    26  	Method string
    27  	// URL is the request path.
    28  	URL string
    29  	// Body is the content of the request.
    30  	Body io.ReadSeeker
    31  }
    32  
    33  // newHTTPRequest returns a constructed HTTP.Request with some defaults.
    34  // Defaults are applied when Request options are not filled in.
    35  func (client *Client) newHTTPRequest(passedRequest requestOptions) (*cloudcontroller.Request, error) {
    36  	var request *http.Request
    37  	var err error
    38  
    39  	if passedRequest.URL != "" {
    40  		request, err = http.NewRequest(
    41  			passedRequest.Method,
    42  			passedRequest.URL,
    43  			passedRequest.Body,
    44  		)
    45  	} else {
    46  		request, err = client.router.CreateRequest(
    47  			passedRequest.RequestName,
    48  			map[string]string(passedRequest.URIParams),
    49  			passedRequest.Body,
    50  		)
    51  	}
    52  	if err != nil {
    53  		return nil, err
    54  	}
    55  
    56  	if passedRequest.Query != nil {
    57  		request.URL.RawQuery = passedRequest.Query.Encode()
    58  	}
    59  
    60  	request.Header = http.Header{}
    61  	request.Header.Set("Accept", "application/json")
    62  	request.Header.Set("User-Agent", client.userAgent)
    63  
    64  	if passedRequest.Body != nil {
    65  		request.Header.Set("Content-Type", "application/json")
    66  	}
    67  
    68  	return cloudcontroller.NewRequest(request, passedRequest.Body), nil
    69  }