(w io.Writer, rv reflect.Value)
| 116 | } |
| 117 | |
| 118 | func encodeReflectList(w io.Writer, rv reflect.Value) error { |
| 119 | // Emit nil slices as null. |
| 120 | if rv.Kind() == reflect.Slice && rv.IsNil() { |
| 121 | return writeStr(w, "null") |
| 122 | } |
| 123 | |
| 124 | // Encode byte slices as base64 with the stdlib encoder. |
| 125 | if rv.Type().Elem().Kind() == reflect.Uint8 { |
| 126 | // Stdlib does not base64-encode byte arrays, only slices, so we copy to slice. |
| 127 | if rv.Type().Kind() == reflect.Array { |
| 128 | slice := reflect.MakeSlice(reflect.SliceOf(rv.Type().Elem()), rv.Len(), rv.Len()) |
| 129 | reflect.Copy(slice, rv) |
| 130 | rv = slice |
| 131 | } |
| 132 | return encodeStdlib(w, rv.Interface()) |
| 133 | } |
| 134 | |
| 135 | // Anything else we recursively encode ourselves. |
| 136 | length := rv.Len() |
| 137 | if err := writeStr(w, "["); err != nil { |
| 138 | return err |
| 139 | } |
| 140 | for i := 0; i < length; i++ { |
| 141 | if err := encodeReflect(w, rv.Index(i)); err != nil { |
| 142 | return err |
| 143 | } |
| 144 | if i < length-1 { |
| 145 | if err := writeStr(w, ","); err != nil { |
| 146 | return err |
| 147 | } |
| 148 | } |
| 149 | } |
| 150 | return writeStr(w, "]") |
| 151 | } |
| 152 | |
| 153 | func encodeReflectMap(w io.Writer, rv reflect.Value) error { |
| 154 | if rv.Type().Key().Kind() != reflect.String { |
no test coverage detected