diff options
Diffstat (limited to 'vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go')
-rw-r--r-- | vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go new file mode 100644 index 0000000..e21614a --- /dev/null +++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go | |||
@@ -0,0 +1,81 @@ | |||
1 | package protocol | ||
2 | |||
3 | import ( | ||
4 | "io" | ||
5 | "io/ioutil" | ||
6 | "net/http" | ||
7 | |||
8 | "github.com/aws/aws-sdk-go/aws" | ||
9 | "github.com/aws/aws-sdk-go/aws/client/metadata" | ||
10 | "github.com/aws/aws-sdk-go/aws/request" | ||
11 | ) | ||
12 | |||
13 | // PayloadUnmarshaler provides the interface for unmarshaling a payload's | ||
14 | // reader into a SDK shape. | ||
15 | type PayloadUnmarshaler interface { | ||
16 | UnmarshalPayload(io.Reader, interface{}) error | ||
17 | } | ||
18 | |||
19 | // HandlerPayloadUnmarshal implements the PayloadUnmarshaler from a | ||
20 | // HandlerList. This provides the support for unmarshaling a payload reader to | ||
21 | // a shape without needing a SDK request first. | ||
22 | type HandlerPayloadUnmarshal struct { | ||
23 | Unmarshalers request.HandlerList | ||
24 | } | ||
25 | |||
26 | // UnmarshalPayload unmarshals the io.Reader payload into the SDK shape using | ||
27 | // the Unmarshalers HandlerList provided. Returns an error if unable | ||
28 | // unmarshaling fails. | ||
29 | func (h HandlerPayloadUnmarshal) UnmarshalPayload(r io.Reader, v interface{}) error { | ||
30 | req := &request.Request{ | ||
31 | HTTPRequest: &http.Request{}, | ||
32 | HTTPResponse: &http.Response{ | ||
33 | StatusCode: 200, | ||
34 | Header: http.Header{}, | ||
35 | Body: ioutil.NopCloser(r), | ||
36 | }, | ||
37 | Data: v, | ||
38 | } | ||
39 | |||
40 | h.Unmarshalers.Run(req) | ||
41 | |||
42 | return req.Error | ||
43 | } | ||
44 | |||
45 | // PayloadMarshaler provides the interface for marshaling a SDK shape into and | ||
46 | // io.Writer. | ||
47 | type PayloadMarshaler interface { | ||
48 | MarshalPayload(io.Writer, interface{}) error | ||
49 | } | ||
50 | |||
51 | // HandlerPayloadMarshal implements the PayloadMarshaler from a HandlerList. | ||
52 | // This provides support for marshaling a SDK shape into an io.Writer without | ||
53 | // needing a SDK request first. | ||
54 | type HandlerPayloadMarshal struct { | ||
55 | Marshalers request.HandlerList | ||
56 | } | ||
57 | |||
58 | // MarshalPayload marshals the SDK shape into the io.Writer using the | ||
59 | // Marshalers HandlerList provided. Returns an error if unable if marshal | ||
60 | // fails. | ||
61 | func (h HandlerPayloadMarshal) MarshalPayload(w io.Writer, v interface{}) error { | ||
62 | req := request.New( | ||
63 | aws.Config{}, | ||
64 | metadata.ClientInfo{}, | ||
65 | request.Handlers{}, | ||
66 | nil, | ||
67 | &request.Operation{HTTPMethod: "GET"}, | ||
68 | v, | ||
69 | nil, | ||
70 | ) | ||
71 | |||
72 | h.Marshalers.Run(req) | ||
73 | |||
74 | if req.Error != nil { | ||
75 | return req.Error | ||
76 | } | ||
77 | |||
78 | io.Copy(w, req.GetBody()) | ||
79 | |||
80 | return nil | ||
81 | } | ||