]>
Commit | Line | Data |
---|---|---|
bae9f6d2 JC |
1 | package s3 |
2 | ||
3 | import ( | |
4 | "bytes" | |
5 | "io/ioutil" | |
6 | "net/http" | |
7 | ||
8 | "github.com/aws/aws-sdk-go/aws/awserr" | |
9 | "github.com/aws/aws-sdk-go/aws/request" | |
15c0b25d | 10 | "github.com/aws/aws-sdk-go/internal/sdkio" |
bae9f6d2 JC |
11 | ) |
12 | ||
13 | func copyMultipartStatusOKUnmarhsalError(r *request.Request) { | |
14 | b, err := ioutil.ReadAll(r.HTTPResponse.Body) | |
15 | if err != nil { | |
107c1cdb ND |
16 | r.Error = awserr.NewRequestFailure( |
17 | awserr.New("SerializationError", "unable to read response body", err), | |
18 | r.HTTPResponse.StatusCode, | |
19 | r.RequestID, | |
20 | ) | |
bae9f6d2 JC |
21 | return |
22 | } | |
23 | body := bytes.NewReader(b) | |
24 | r.HTTPResponse.Body = ioutil.NopCloser(body) | |
15c0b25d | 25 | defer body.Seek(0, sdkio.SeekStart) |
bae9f6d2 JC |
26 | |
27 | if body.Len() == 0 { | |
28 | // If there is no body don't attempt to parse the body. | |
29 | return | |
30 | } | |
31 | ||
32 | unmarshalError(r) | |
33 | if err, ok := r.Error.(awserr.Error); ok && err != nil { | |
34 | if err.Code() == "SerializationError" { | |
35 | r.Error = nil | |
36 | return | |
37 | } | |
38 | r.HTTPResponse.StatusCode = http.StatusServiceUnavailable | |
39 | } | |
40 | } |