code: func UnmarshalBinary(data []byte, fields ...interface{}) error {
  	buf := bytes.NewBuffer(data)
  
  	for _, p := range fields {
  		switch m := p.(type) {
  		case encoding.BinaryUnmarshaler:
  			return m.UnmarshalBinary(buf.Bytes())
  		case *[]byte:
  			*m = buf.Bytes()
  			return nil
  		default:
  			err := binary.Read(buf, binary.LittleEndian, p)
  			if err != nil {
  				return ProtocolError(err)
  			}
  		}
  	}
  
  	return nil
  }
docs: // UnmarshalBinary is a wrapper around binary.Read