| 180 | } |
| 181 | |
| 182 | func (e *Encoder) encodeMap(vp valueProvider, rv reflect.Value) error { |
| 183 | object := vp.GetValue().Object() |
| 184 | defer object.Close() |
| 185 | |
| 186 | rawKeys := rv.MapKeys() |
| 187 | keys := make([]*mapKey, 0, len(rawKeys)) |
| 188 | for _, raw := range rawKeys { |
| 189 | keys = append(keys, &mapKey{ |
| 190 | Value: raw, |
| 191 | Underlying: fmt.Sprint(raw.Interface()), |
| 192 | }) |
| 193 | } |
| 194 | |
| 195 | slices.SortFunc(keys, sortMapKeys) |
| 196 | for _, key := range keys { |
| 197 | if key.Underlying == "" { |
| 198 | return &document.InvalidMarshalError{Message: "map key cannot be empty"} |
| 199 | } |
| 200 | |
| 201 | ev := rv.MapIndex(key.Value) |
| 202 | err := e.encode(jsonObjectKeyProvider{ |
| 203 | Object: object, |
| 204 | Key: key.Underlying, |
| 205 | }, ev, serde.Tag{}) |
| 206 | if err != nil { |
| 207 | return err |
| 208 | } |
| 209 | } |
| 210 | |
| 211 | return nil |
| 212 | } |
| 213 | |
| 214 | func (e *Encoder) encodeSlice(value valueProvider, rv reflect.Value) error { |
| 215 | array := value.GetValue().Array() |