wtx 0.43.1

A collection of different transport implementations and related tools focused primarily on web technologies.
Documentation
use crate::{
  codec::Encode,
  database::client::mysql::{
    capability::Capability,
    collation::Collation,
    protocol::{Protocol, encode_wrapper_protocol::EncodeWrapperProtocol},
  },
};

#[derive(Debug)]
pub(crate) struct InitialReq {
  pub(crate) collation: Collation,
  pub(crate) max_packet_size: u32,
}

impl<E> Encode<Protocol<(), E>> for InitialReq
where
  E: From<crate::Error>,
{
  #[inline]
  fn encode(&self, ew: &mut EncodeWrapperProtocol<'_>) -> Result<(), E> {
    let capability_lhs = (*ew.capabilities >> 32) as u32;
    let capability_rhs = *ew.capabilities as u32;
    let _ = ew.encode_buffer.extend_from_copyable_slices([
      capability_rhs.to_le_bytes().as_slice(),
      self.max_packet_size.to_le_bytes().as_slice(),
      &[self.collation.into()],
      &[0; 19],
    ])?;
    let mysql_n = u64::from(Capability::Mysql);
    ew.encode_buffer.extend_from_copyable_slice(&if *ew.capabilities & mysql_n == mysql_n {
      [0; 4]
    } else {
      capability_lhs.to_le_bytes()
    })?;
    Ok(())
  }
}