code: func WrapObject(m interface{}, mhType uint64, mhLen int) (*Node, error) {
  	data, err := marshaller.Marshal(m)
  	if err != nil {
  		return nil, err
  	}
  
  	var obj interface{}
  	err = cloner.Clone(m, &obj)
  	if err != nil {
  		return nil, err
  	}
  
  	if mhType == math.MaxUint64 {
  		mhType = mh.SHA2_256
  	}
  
  	hash, err := mh.Sum(data, mhType, mhLen)
  	if err != nil {
  		return nil, err
  	}
  	c := cid.NewCidV1(cid.DagCBOR, hash)
  
  	block, err := blocks.NewBlockWithCid(data, c)
  	if err != nil {
  		// TODO: Shouldn't this just panic?
  		return nil, err
  	}
  	// No need to deserialize. We can just deep copy.
  	return newObject(block, obj)
  }
docs: // WrapObject converts an arbitrary object into a Node.