code: func MarshalBinary(fields ...interface{}) ([]byte, error) {
  	buf := new(bytes.Buffer)
  
  	for _, p := range fields {
  		switch m := p.(type) {
  		case encoding.BinaryMarshaler:
  			data, err := m.MarshalBinary()
  			if err != nil {
  				return nil, ProtocolError(err)
  			}
  
  			_, _ = buf.Write(data)
  		case []byte:
  			_, _ = buf.Write(m)
  		case string:
  			_, _ = buf.WriteString(m)
  		default:
  			err := binary.Write(buf, binary.LittleEndian, p)
  			if err != nil {
  				return nil, ProtocolError(err)
  			}
  		}
  	}
  
  	return buf.Bytes(), nil
  }
docs: // MarshalBinary is a wrapper around binary.Write