aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/aws/aws-sdk-go/private/protocol/payload.go
diff options
context:
space:
mode:
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.go81
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 @@
1package protocol
2
3import (
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.
15type 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.
22type 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.
29func (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.
47type 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.
54type 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.
61func (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}