diff options
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.go | 45 |
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 @@ | |||
1 | package rest | ||
2 | |||
3 | import "reflect" | ||
4 | |||
5 | // PayloadMember returns the payload field member of i if there is one, or nil. | ||
6 | func 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 "". | ||
32 | func 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 | } | ||