| package diffstore |
| |
| import ( |
| "encoding/json" |
| |
| "go.skia.org/infra/golden/go/diff" |
| "go.skia.org/infra/golden/go/types" |
| ) |
| |
| // MetricMapCodec implements the util.LRUCodec interface by serializing and |
| // deserializing generic diff result structs, instances of map[string]interface{} |
| type MetricMapCodec struct{} |
| |
| // See util.LRUCodec interface |
| func (m MetricMapCodec) Encode(data interface{}) ([]byte, error) { |
| return json.Marshal(data) |
| } |
| |
| // See util.LRUCodec interface |
| func (m MetricMapCodec) Decode(byteData []byte) (interface{}, error) { |
| dm := map[types.Digest]*diff.DiffMetrics{} |
| err := json.Unmarshal(byteData, &dm) |
| if err != nil { |
| return nil, err |
| } |
| |
| // Must make result of deserialization generic in order to propagate |
| ret := make(map[types.Digest]interface{}, len(dm)) |
| for k, metric := range dm { |
| ret[k] = metric |
| } |
| return ret, nil |
| } |