| // +build !go1.8 |
| |
| package request |
| |
| import "io" |
| |
| // NoBody is an io.ReadCloser with no bytes. Read always returns EOF |
| // and Close always returns nil. It can be used in an outgoing client |
| // request to explicitly signal that a request has zero bytes. |
| // An alternative, however, is to simply set Request.Body to nil. |
| // |
| // Copy of Go 1.8 NoBody type from net/http/http.go |
| type noBody struct{} |
| |
| func (noBody) Read([]byte) (int, error) { return 0, io.EOF } |
| func (noBody) Close() error { return nil } |
| func (noBody) WriteTo(io.Writer) (int64, error) { return 0, nil } |
| |
| // NoBody is an empty reader that will trigger the Go HTTP client to not include |
| // and body in the HTTP request. |
| var NoBody = noBody{} |
| |
| // ResetBody rewinds the request body back to its starting position, and |
| // sets the HTTP Request body reference. When the body is read prior |
| // to being sent in the HTTP request it will need to be rewound. |
| // |
| // ResetBody will automatically be called by the SDK's build handler, but if |
| // the request is being used directly ResetBody must be called before the request |
| // is Sent. SetStringBody, SetBufferBody, and SetReaderBody will automatically |
| // call ResetBody. |
| func (r *Request) ResetBody() { |
| body, err := r.getNextRequestBody() |
| if err != nil { |
| r.Error = err |
| return |
| } |
| |
| r.HTTPRequest.Body = body |
| } |