in internal/apiquery/encoder.go [330:378]
func (e *encoder) newPrimitiveTypeEncoder(t reflect.Type) encoderFunc {
switch t.Kind() {
case reflect.Pointer:
inner := t.Elem()
innerEncoder := e.newPrimitiveTypeEncoder(inner)
return func(key string, v reflect.Value) ([]Pair, error) {
if !v.IsValid() || v.IsNil() {
return nil, nil
}
return innerEncoder(key, v.Elem())
}
case reflect.String:
return func(key string, v reflect.Value) ([]Pair, error) {
return []Pair{{key, v.String()}}, nil
}
case reflect.Bool:
return func(key string, v reflect.Value) ([]Pair, error) {
if v.Bool() {
return []Pair{{key, "true"}}, nil
}
return []Pair{{key, "false"}}, nil
}
case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64:
return func(key string, v reflect.Value) ([]Pair, error) {
return []Pair{{key, strconv.FormatInt(v.Int(), 10)}}, nil
}
case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64:
return func(key string, v reflect.Value) ([]Pair, error) {
return []Pair{{key, strconv.FormatUint(v.Uint(), 10)}}, nil
}
case reflect.Float32, reflect.Float64:
return func(key string, v reflect.Value) ([]Pair, error) {
return []Pair{{key, strconv.FormatFloat(v.Float(), 'f', -1, 64)}}, nil
}
case reflect.Complex64, reflect.Complex128:
bitSize := 64
if t.Kind() == reflect.Complex128 {
bitSize = 128
}
return func(key string, v reflect.Value) ([]Pair, error) {
return []Pair{{key, strconv.FormatComplex(v.Complex(), 'f', -1, bitSize)}}, nil
}
default:
return func(key string, v reflect.Value) ([]Pair, error) {
return nil, nil
}
}
}