code: func (hn *hashOrNumber) DecodeRLP(s *rlp.Stream) error {
  	_, size, _ := s.Kind()
  	origin, err := s.Raw()
  	if err == nil {
  		switch {
  		case size == 32:
  			err = rlp.DecodeBytes(origin, &hn.Hash)
  		case size <= 8:
  			err = rlp.DecodeBytes(origin, &hn.Number)
  		default:
  			err = fmt.Errorf("invalid input size %d for origin", size)
  		}
  	}
  	return err
  }
docs: // DecodeRLP is a specialized decoder for hashOrNumber to decode the contents
  // into either a block hash or a block number.