mysql_connector/connection/packets/
auth_switch_request.rs

1use {
2    crate::{
3        connection::types::AuthPlugin, error::ProtocolError, Deserialize, ParseBuf, Serialize,
4    },
5    bytes::BufMut,
6};
7
8#[derive(Debug, Clone, Eq, PartialEq)]
9pub struct AuthSwitchRequest {
10    plugin: AuthPlugin,
11    data: Vec<u8>,
12}
13
14impl AuthSwitchRequest {
15    pub fn plugin(&self) -> AuthPlugin {
16        self.plugin
17    }
18
19    pub fn into_data(self) -> Vec<u8> {
20        self.data
21    }
22}
23
24impl<'de> Deserialize<'de> for AuthSwitchRequest {
25    const SIZE: Option<usize> = None;
26    type Ctx = ();
27
28    fn deserialize(buf: &mut ParseBuf<'de>, _ctx: Self::Ctx) -> Result<Self, ProtocolError> {
29        buf.skip(1);
30        Ok(Self {
31            plugin: buf.parse(())?,
32            data: match buf.eat_all() {
33                [head @ .., 0] => head.to_vec(),
34                all => all.to_vec(),
35            },
36        })
37    }
38}
39
40impl Serialize for AuthSwitchRequest {
41    fn serialize(&self, buf: &mut Vec<u8>) {
42        buf.put_u8(0x00);
43        self.plugin.serialize(buf);
44        buf.put_slice(&self.data);
45    }
46}