aboutsummaryrefslogtreecommitdiffhomepage
path: root/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go')
-rw-r--r--vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go45
1 files changed, 45 insertions, 0 deletions
diff --git a/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go
new file mode 100644
index 0000000..4366de2
--- /dev/null
+++ b/vendor/github.com/aws/aws-sdk-go/private/protocol/rest/payload.go
@@ -0,0 +1,45 @@
1package rest
2
3import "reflect"
4
5// PayloadMember returns the payload field member of i if there is one, or nil.
6func PayloadMember(i interface{}) interface{} {
7 if i == nil {
8 return nil
9 }
10
11 v := reflect.ValueOf(i).Elem()
12 if !v.IsValid() {
13 return nil
14 }
15 if field, ok := v.Type().FieldByName("_"); ok {
16 if payloadName := field.Tag.Get("payload"); payloadName != "" {
17 field, _ := v.Type().FieldByName(payloadName)
18 if field.Tag.Get("type") != "structure" {
19 return nil
20 }
21
22 payload := v.FieldByName(payloadName)
23 if payload.IsValid() || (payload.Kind() == reflect.Ptr && !payload.IsNil()) {
24 return payload.Interface()
25 }
26 }
27 }
28 return nil
29}
30
31// PayloadType returns the type of a payload field member of i if there is one, or "".
32func PayloadType(i interface{}) string {
33 v := reflect.Indirect(reflect.ValueOf(i))
34 if !v.IsValid() {
35 return ""
36 }
37 if field, ok := v.Type().FieldByName("_"); ok {
38 if payloadName := field.Tag.Get("payload"); payloadName != "" {
39 if member, ok := v.Type().FieldByName(payloadName); ok {
40 return member.Tag.Get("type")
41 }
42 }
43 }
44 return ""
45}