5 // PayloadMember returns the payload field member of i if there is one, or nil.
6 func PayloadMember(i interface{}) interface{} {
11 v := reflect.ValueOf(i).Elem()
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" {
22 payload := v.FieldByName(payloadName)
23 if payload.IsValid() || (payload.Kind() == reflect.Ptr && !payload.IsNil()) {
24 return payload.Interface()
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))
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")