func()

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
}