github.com/filecoin-project/specs-actors/v4@v4.0.2/support/ipld/cbor.go (about)

     1  package ipld
     2  
     3  import (
     4  	"bytes"
     5  
     6  	"github.com/filecoin-project/go-state-types/abi"
     7  	"github.com/filecoin-project/go-state-types/cbor"
     8  	"github.com/ipfs/go-cid"
     9  )
    10  
    11  // Marshals an object to bytes for storing in state.
    12  func MarshalCBOR(o cbor.Marshaler) (cid.Cid, []byte, error) {
    13  	r := bytes.Buffer{}
    14  	err := o.MarshalCBOR(&r)
    15  	if err != nil {
    16  		return cid.Undef, nil, err
    17  	}
    18  	data := r.Bytes()
    19  	key, err := abi.CidBuilder.Sum(data)
    20  	if err != nil {
    21  		return cid.Undef, nil, err
    22  	}
    23  	return key, data, nil
    24  }