mirror of
https://github.com/launchbadge/sqlx.git
synced 2025-10-02 15:25:32 +00:00
Add connection to serialization
This commit is contained in:
parent
a203177c90
commit
b20c120d87
@ -5,7 +5,7 @@ use crate::protocol::{
|
|||||||
deserialize::Deserialize,
|
deserialize::Deserialize,
|
||||||
encode::Encoder,
|
encode::Encoder,
|
||||||
packets::{com_ping::ComPing, com_quit::ComQuit, ok::OkPacket},
|
packets::{com_ping::ComPing, com_quit::ComQuit, ok::OkPacket},
|
||||||
serialize::{Serialize, Serializer},
|
serialize::Serialize,
|
||||||
server::Message as ServerMessage,
|
server::Message as ServerMessage,
|
||||||
types::{Capabilities, ServerStatusFlag},
|
types::{Capabilities, ServerStatusFlag},
|
||||||
};
|
};
|
||||||
@ -100,7 +100,7 @@ impl Connection {
|
|||||||
self.encoder.clear();
|
self.encoder.clear();
|
||||||
self.encoder.alloc_packet_header();
|
self.encoder.alloc_packet_header();
|
||||||
self.encoder.seq_no(self.seq_no);
|
self.encoder.seq_no(self.seq_no);
|
||||||
Serializer::new(self).serialize(message)?;
|
message.serialize(self)?;
|
||||||
self.encoder.encode_length();
|
self.encoder.encode_length();
|
||||||
|
|
||||||
self.stream.inner.write_all(&self.encoder.buf).await?;
|
self.stream.inner.write_all(&self.encoder.buf).await?;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use super::super::{encode::Encoder, serialize::Serialize, types::Capabilities};
|
use super::super::serialize::Serialize;
|
||||||
|
use crate::connection::Connection;
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
@ -9,14 +10,10 @@ pub struct AuthenticationSwitchRequestPacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for AuthenticationSwitchRequestPacket {
|
impl Serialize for AuthenticationSwitchRequestPacket {
|
||||||
fn serialize(
|
fn serialize(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(0xFE);
|
||||||
encoder: &mut Encoder,
|
conn.encoder.encode_string_null(&self.auth_plugin_name);
|
||||||
_server_capabilities: &Capabilities,
|
conn.encoder.encode_byte_eof(&self.auth_plugin_data);
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(0xFE);
|
|
||||||
encoder.encode_string_null(&self.auth_plugin_name);
|
|
||||||
encoder.encode_byte_eof(&self.auth_plugin_data);
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,12 @@
|
|||||||
use super::super::{
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
client::TextProtocol, encode::Encoder, serialize::Serialize, types::Capabilities,
|
use crate::connection::Connection;
|
||||||
};
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
pub struct ComDebug();
|
pub struct ComDebug();
|
||||||
|
|
||||||
impl Serialize for ComDebug {
|
impl Serialize for ComDebug {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComDebug.into());
|
||||||
encoder: &mut Encoder,
|
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComDebug.into());
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
use super::super::{
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
client::TextProtocol, encode::Encoder, serialize::Serialize, types::Capabilities,
|
use crate::connection::Connection;
|
||||||
};
|
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
@ -9,13 +8,9 @@ pub struct ComInitDb {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for ComInitDb {
|
impl Serialize for ComInitDb {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComInitDb.into());
|
||||||
encoder: &mut Encoder,
|
conn.encoder.encode_string_null(&self.schema_name);
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComInitDb.into());
|
|
||||||
encoder.encode_string_null(&self.schema_name);
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,12 @@
|
|||||||
use super::super::{
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
client::TextProtocol, encode::Encoder, serialize::Serialize, types::Capabilities,
|
use crate::connection::Connection;
|
||||||
};
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
pub struct ComPing();
|
pub struct ComPing();
|
||||||
|
|
||||||
impl Serialize for ComPing {
|
impl Serialize for ComPing {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComPing.into());
|
||||||
encoder: &mut Encoder,
|
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComPing.into());
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
use super::super::{
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
client::TextProtocol, encode::Encoder, serialize::Serialize, types::Capabilities,
|
use crate::connection::Connection;
|
||||||
};
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
pub struct ComProcessKill {
|
pub struct ComProcessKill {
|
||||||
@ -8,13 +7,9 @@ pub struct ComProcessKill {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for ComProcessKill {
|
impl Serialize for ComProcessKill {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComProcessKill.into());
|
||||||
encoder: &mut Encoder,
|
conn.encoder.encode_int_4(self.process_id);
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComProcessKill.into());
|
|
||||||
encoder.encode_int_4(self.process_id);
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
use super::super::{
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
client::TextProtocol, encode::Encoder, serialize::Serialize, types::Capabilities,
|
use crate::connection::Connection;
|
||||||
};
|
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
@ -9,13 +8,9 @@ pub struct ComQuery {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for ComQuery {
|
impl Serialize for ComQuery {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComQuery.into());
|
||||||
encoder: &mut Encoder,
|
conn.encoder.encode_string_eof(&self.sql_statement);
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComQuery.into());
|
|
||||||
encoder.encode_string_eof(&self.sql_statement);
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,12 @@
|
|||||||
use super::super::{
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
client::TextProtocol, encode::Encoder, serialize::Serialize, types::Capabilities,
|
use crate::connection::Connection;
|
||||||
};
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
pub struct ComQuit();
|
pub struct ComQuit();
|
||||||
|
|
||||||
impl Serialize for ComQuit {
|
impl Serialize for ComQuit {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComQuit.into());
|
||||||
encoder: &mut Encoder,
|
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComQuit.into());
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,12 @@
|
|||||||
use super::super::{
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
client::TextProtocol, encode::Encoder, serialize::Serialize, types::Capabilities,
|
use crate::connection::Connection;
|
||||||
};
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
pub struct ComResetConnection();
|
pub struct ComResetConnection();
|
||||||
|
|
||||||
impl Serialize for ComResetConnection {
|
impl Serialize for ComResetConnection {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComResetConnection.into());
|
||||||
encoder: &mut Encoder,
|
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComResetConnection.into());
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
use super::super::{
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
client::TextProtocol, encode::Encoder, serialize::Serialize, types::Capabilities,
|
use crate::connection::Connection;
|
||||||
};
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
@ -14,13 +13,9 @@ pub struct ComSetOption {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for ComSetOption {
|
impl Serialize for ComSetOption {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComSetOption.into());
|
||||||
encoder: &mut Encoder,
|
conn.encoder.encode_int_2(self.option.into());
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComSetOption.into());
|
|
||||||
encoder.encode_int_2(self.option.into());
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use super::super::{client::TextProtocol, encode::*, serialize::Serialize, types::Capabilities};
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
|
use crate::connection::Connection;
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
#[derive(Clone, Copy)]
|
#[derive(Clone, Copy)]
|
||||||
@ -11,13 +12,9 @@ pub struct ComShutdown {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for ComShutdown {
|
impl Serialize for ComShutdown {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComShutdown.into());
|
||||||
encoder: &mut Encoder,
|
conn.encoder.encode_int_1(self.option.into());
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComShutdown.into());
|
|
||||||
encoder.encode_int_1(self.option.into());
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,12 @@
|
|||||||
use super::super::{
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
client::TextProtocol, encode::Encoder, serialize::Serialize, types::Capabilities,
|
use crate::connection::Connection;
|
||||||
};
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
pub struct ComSleep();
|
pub struct ComSleep();
|
||||||
|
|
||||||
impl Serialize for ComSleep {
|
impl Serialize for ComSleep {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComSleep.into());
|
||||||
encoder: &mut Encoder,
|
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComSleep.into());
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,12 @@
|
|||||||
use super::super::{
|
use super::super::{client::TextProtocol, serialize::Serialize};
|
||||||
client::TextProtocol, encode::Encoder, serialize::Serialize, types::Capabilities,
|
use crate::connection::Connection;
|
||||||
};
|
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
pub struct ComStatistics();
|
pub struct ComStatistics();
|
||||||
|
|
||||||
impl Serialize for ComStatistics {
|
impl Serialize for ComStatistics {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_1(TextProtocol::ComStatistics.into());
|
||||||
encoder: &mut Encoder,
|
|
||||||
_server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_1(TextProtocol::ComStatistics.into());
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use super::super::{encode::Encoder, serialize::Serialize, types::Capabilities};
|
use super::super::{serialize::Serialize, types::Capabilities};
|
||||||
|
use crate::connection::Connection;
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
@ -19,66 +20,63 @@ pub struct HandshakeResponsePacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for HandshakeResponsePacket {
|
impl Serialize for HandshakeResponsePacket {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_4(self.capabilities.bits() as u32);
|
||||||
encoder: &mut Encoder,
|
conn.encoder.encode_int_4(self.max_packet_size);
|
||||||
server_capabilities: &Capabilities,
|
conn.encoder.encode_int_1(self.collation);
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_4(self.capabilities.bits() as u32);
|
|
||||||
encoder.encode_int_4(self.max_packet_size);
|
|
||||||
encoder.encode_int_1(self.collation);
|
|
||||||
|
|
||||||
// Filler
|
// Filler
|
||||||
encoder.encode_byte_fix(&Bytes::from_static(&[0u8; 19]), 19);
|
conn.encoder.encode_byte_fix(&Bytes::from_static(&[0u8; 19]), 19);
|
||||||
|
|
||||||
if !(*server_capabilities & Capabilities::CLIENT_MYSQL).is_empty()
|
if !(conn.capabilities & Capabilities::CLIENT_MYSQL).is_empty()
|
||||||
&& !(self.capabilities & Capabilities::CLIENT_MYSQL).is_empty()
|
&& !(self.capabilities & Capabilities::CLIENT_MYSQL).is_empty()
|
||||||
{
|
{
|
||||||
if let Some(capabilities) = self.extended_capabilities {
|
if let Some(capabilities) = self.extended_capabilities {
|
||||||
encoder.encode_int_4(capabilities.bits() as u32);
|
conn.encoder.encode_int_4(capabilities.bits() as u32);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
encoder.encode_byte_fix(&Bytes::from_static(&[0u8; 4]), 4);
|
conn.encoder.encode_byte_fix(&Bytes::from_static(&[0u8; 4]), 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
encoder.encode_string_null(&self.username);
|
conn.encoder.encode_string_null(&self.username);
|
||||||
|
|
||||||
if !(*server_capabilities & Capabilities::PLUGIN_AUTH_LENENC_CLIENT_DATA).is_empty() {
|
if !(conn.capabilities & Capabilities::PLUGIN_AUTH_LENENC_CLIENT_DATA).is_empty() {
|
||||||
if let Some(auth_data) = &self.auth_data {
|
if let Some(auth_data) = &self.auth_data {
|
||||||
encoder.encode_string_lenenc(&auth_data);
|
conn.encoder.encode_string_lenenc(&auth_data);
|
||||||
}
|
}
|
||||||
} else if !(*server_capabilities & Capabilities::SECURE_CONNECTION).is_empty() {
|
} else if !(conn.capabilities & Capabilities::SECURE_CONNECTION).is_empty() {
|
||||||
if let Some(auth_response) = &self.auth_response {
|
if let Some(auth_response) = &self.auth_response {
|
||||||
encoder.encode_int_1(self.auth_response_len.unwrap());
|
conn.encoder.encode_int_1(self.auth_response_len.unwrap());
|
||||||
encoder.encode_string_fix(&auth_response, self.auth_response_len.unwrap() as usize);
|
conn.encoder
|
||||||
|
.encode_string_fix(&auth_response, self.auth_response_len.unwrap() as usize);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
encoder.encode_int_1(0);
|
conn.encoder.encode_int_1(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if !(*server_capabilities & Capabilities::CONNECT_WITH_DB).is_empty() {
|
if !(conn.capabilities & Capabilities::CONNECT_WITH_DB).is_empty() {
|
||||||
if let Some(database) = &self.database {
|
if let Some(database) = &self.database {
|
||||||
// string<NUL>
|
// string<NUL>
|
||||||
encoder.encode_string_null(&database);
|
conn.encoder.encode_string_null(&database);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !(*server_capabilities & Capabilities::PLUGIN_AUTH).is_empty() {
|
if !(conn.capabilities & Capabilities::PLUGIN_AUTH).is_empty() {
|
||||||
if let Some(auth_plugin_name) = &self.auth_plugin_name {
|
if let Some(auth_plugin_name) = &self.auth_plugin_name {
|
||||||
// string<NUL>
|
// string<NUL>
|
||||||
encoder.encode_string_null(&auth_plugin_name);
|
conn.encoder.encode_string_null(&auth_plugin_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !(*server_capabilities & Capabilities::CONNECT_ATTRS).is_empty() {
|
if !(conn.capabilities & Capabilities::CONNECT_ATTRS).is_empty() {
|
||||||
if let (Some(conn_attr_len), Some(conn_attr)) = (&self.conn_attr_len, &self.conn_attr) {
|
if let (Some(conn_attr_len), Some(conn_attr)) = (&self.conn_attr_len, &self.conn_attr) {
|
||||||
// int<lenenc>
|
// int<lenenc>
|
||||||
encoder.encode_int_lenenc(Some(conn_attr_len));
|
conn.encoder.encode_int_lenenc(Some(conn_attr_len));
|
||||||
|
|
||||||
// Loop
|
// Loop
|
||||||
for (key, value) in conn_attr {
|
for (key, value) in conn_attr {
|
||||||
encoder.encode_string_lenenc(&key);
|
conn.encoder.encode_string_lenenc(&key);
|
||||||
encoder.encode_string_lenenc(&value);
|
conn.encoder.encode_string_lenenc(&value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
use super::super::{encode::Encoder, serialize::Serialize, types::Capabilities};
|
use super::super::{serialize::Serialize, types::Capabilities};
|
||||||
|
use crate::connection::Connection;
|
||||||
use bytes::Bytes;
|
use bytes::Bytes;
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
@ -11,26 +12,22 @@ pub struct SSLRequestPacket {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Serialize for SSLRequestPacket {
|
impl Serialize for SSLRequestPacket {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error> {
|
||||||
&self,
|
conn.encoder.encode_int_4(self.capabilities.bits() as u32);
|
||||||
encoder: &mut Encoder,
|
conn.encoder.encode_int_4(self.max_packet_size);
|
||||||
server_capabilities: &Capabilities,
|
conn.encoder.encode_int_1(self.collation);
|
||||||
) -> Result<(), Error> {
|
|
||||||
encoder.encode_int_4(self.capabilities.bits() as u32);
|
|
||||||
encoder.encode_int_4(self.max_packet_size);
|
|
||||||
encoder.encode_int_1(self.collation);
|
|
||||||
|
|
||||||
// Filler
|
// Filler
|
||||||
encoder.encode_byte_fix(&Bytes::from_static(&[0u8; 19]), 19);
|
conn.encoder.encode_byte_fix(&Bytes::from_static(&[0u8; 19]), 19);
|
||||||
|
|
||||||
if !(*server_capabilities & Capabilities::CLIENT_MYSQL).is_empty()
|
if !(conn.capabilities & Capabilities::CLIENT_MYSQL).is_empty()
|
||||||
&& !(self.capabilities & Capabilities::CLIENT_MYSQL).is_empty()
|
&& !(self.capabilities & Capabilities::CLIENT_MYSQL).is_empty()
|
||||||
{
|
{
|
||||||
if let Some(capabilities) = self.extended_capabilities {
|
if let Some(capabilities) = self.extended_capabilities {
|
||||||
encoder.encode_int_4(capabilities.bits() as u32);
|
conn.encoder.encode_int_4(capabilities.bits() as u32);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
encoder.encode_byte_fix(&Bytes::from_static(&[0u8; 4]), 4);
|
conn.encoder.encode_byte_fix(&Bytes::from_static(&[0u8; 4]), 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -1,28 +1,6 @@
|
|||||||
use super::{super::connection::Connection, encode::Encoder, types::Capabilities};
|
use super::super::connection::Connection;
|
||||||
use failure::Error;
|
use failure::Error;
|
||||||
|
|
||||||
pub trait Serialize {
|
pub trait Serialize {
|
||||||
fn serialize<'a, 'b>(
|
fn serialize<'a, 'b>(&self, conn: &mut Connection) -> Result<(), Error>;
|
||||||
&self,
|
|
||||||
encoder: &'b mut Encoder,
|
|
||||||
server_capabilities: &Capabilities,
|
|
||||||
) -> Result<(), Error>;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct Serializer<'a> {
|
|
||||||
pub conn: &'a mut Connection,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> Serializer<'a> {
|
|
||||||
#[inline]
|
|
||||||
pub fn new(conn: &'a mut Connection) -> Self {
|
|
||||||
Serializer {
|
|
||||||
conn,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
pub fn serialize<S: Serialize>(&mut self, message: S) -> Result<(), Error> {
|
|
||||||
message.serialize(&mut self.conn.encoder, &self.conn.capabilities)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user