package payload

import (
	"errors"

	"git.marketally.com/tutus-one/tutus-chain/pkg/io"
)

// MPTData represents a set of serialized MPT nodes.
type MPTData struct {
	Nodes [][]byte
}

// EncodeBinary implements io.Serializable.
func (d *MPTData) EncodeBinary(w *io.BinWriter) {
	w.WriteVarUint(uint64(len(d.Nodes)))
	for _, n := range d.Nodes {
		w.WriteVarBytes(n)
	}
}

// DecodeBinary implements io.Serializable.
func (d *MPTData) DecodeBinary(r *io.BinReader) {
	sz := r.ReadVarUint()
	if sz == 0 {
		r.Err = errors.New("empty MPT nodes list")
		return
	}
	for range sz {
		d.Nodes = append(d.Nodes, r.ReadVarBytes())
		if r.Err != nil {
			return
		}
	}
}
