(t reflect.Type)
| 212 | var paramUnionType = reflect.TypeOf((*param.APIUnion)(nil)).Elem() |
| 213 | |
| 214 | func (e *encoder) newStructUnionTypeEncoder(t reflect.Type) encoderFunc { |
| 215 | var fieldEncoders []encoderFunc |
| 216 | for i := 0; i < t.NumField(); i++ { |
| 217 | field := t.Field(i) |
| 218 | if field.Type == paramUnionType && field.Anonymous { |
| 219 | fieldEncoders = append(fieldEncoders, nil) |
| 220 | continue |
| 221 | } |
| 222 | fieldEncoders = append(fieldEncoders, e.typeEncoder(field.Type)) |
| 223 | } |
| 224 | |
| 225 | return func(key string, value reflect.Value) (pairs []Pair, err error) { |
| 226 | for i := 0; i < t.NumField(); i++ { |
| 227 | if value.Field(i).Type() == paramUnionType { |
| 228 | continue |
| 229 | } |
| 230 | if !value.Field(i).IsZero() { |
| 231 | return fieldEncoders[i](key, value.Field(i)) |
| 232 | } |
| 233 | } |
| 234 | return nil, fmt.Errorf("apiquery: union %s has no field set", t.String()) |
| 235 | } |
| 236 | } |
| 237 | |
| 238 | func (e *encoder) newMapEncoder(t reflect.Type) encoderFunc { |
| 239 | keyEncoder := e.typeEncoder(t.Key()) |
no test coverage detected