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