in processor/lsmintervalprocessor/internal/merger/key.go [67:114]
func (k *Key) Unmarshal(d []byte) error {
if len(d) < 10 {
return errors.New("failed to unmarshal key, invalid sized buffer provided")
}
k.Interval = time.Duration(binary.BigEndian.Uint16(d[:2])) * time.Second
k.ProcessingTime = time.Unix(int64(binary.BigEndian.Uint64(d[2:10])), 0)
d = d[10:]
if len(d) > 0 {
numKeys, n := binary.Uvarint(d)
if n <= 0 {
return fmt.Errorf("error reading number of metadata keys (n=%d)", n)
}
d = d[n:]
k.Metadata = make([]KeyValues, numKeys)
for i := range numKeys {
mklen, n := binary.Uvarint(d)
if n <= 0 {
return fmt.Errorf("error reading metadata key length (n=%d)", n)
}
d = d[n:]
mk := string(d[:mklen])
d = d[mklen:]
numValues, n := binary.Uvarint(d)
if n <= 0 {
return fmt.Errorf("error reading number of metadata values for %q (n=%d)", mk, n)
}
d = d[n:]
mvs := make([]string, numValues)
for i := range numValues {
mvlen, n := binary.Uvarint(d)
if n <= 0 {
return fmt.Errorf("error reading metadata value length for %q (n=%d)", mk, n)
}
d = d[n:]
mv := string(d[:mvlen])
d = d[mvlen:]
mvs[i] = mv
}
k.Metadata[i] = KeyValues{Key: mk, Values: mvs}
}
}
return nil
}