code: func decodeNode(hash, buf []byte) (node, error) {
  	if len(buf) == 0 {
  		return nil, io.ErrUnexpectedEOF
  	}
  	elems, _, err := rlp.SplitList(buf)
  	if err != nil {
  		return nil, fmt.Errorf("decode error: %v", err)
  	}
  	switch c, _ := rlp.CountValues(elems); c {
  	case 2:
  		n, err := decodeShort(hash, elems)
  		return n, wrapError(err, "short")
  	case 17:
  		n, err := decodeFull(hash, elems)
  		return n, wrapError(err, "full")
  	default:
  		return nil, fmt.Errorf("invalid number of list elements: %v", c)
  	}
  }
docs: // decodeNode parses the RLP encoding of a trie node.