mysql_common/packets/
caching_sha2_password.rs
1use std::io;
2
3use crate::{
4 io::ParseBuf,
5 proto::{MyDeserialize, MySerialize},
6};
7
8define_header!(
9 PublicKeyRequestHeader,
10 InvalidPublicKeyRequest("Invalid PublicKeyRequest header"),
11 0x02
12);
13
14#[derive(Debug, Clone, Eq, PartialEq)]
19pub struct PublicKeyRequest {
20 __header: PublicKeyRequestHeader,
21}
22
23impl PublicKeyRequest {
24 pub fn new() -> Self {
25 Self {
26 __header: PublicKeyRequestHeader::new(),
27 }
28 }
29}
30
31impl Default for PublicKeyRequest {
32 fn default() -> Self {
33 Self::new()
34 }
35}
36
37impl<'de> MyDeserialize<'de> for PublicKeyRequest {
38 const SIZE: Option<usize> = None;
39 type Ctx = ();
40
41 fn deserialize((): Self::Ctx, buf: &mut ParseBuf<'de>) -> io::Result<Self> {
42 Ok(Self {
43 __header: buf.parse(())?,
44 })
45 }
46}
47
48impl MySerialize for PublicKeyRequest {
49 fn serialize(&self, buf: &mut Vec<u8>) {
50 self.__header.serialize(&mut *buf);
51 }
52}
53
54#[cfg(test)]
55mod tests {
56 use crate::{
57 io::ParseBuf,
58 packets::caching_sha2_password::PublicKeyRequest,
59 proto::{MyDeserialize, MySerialize},
60 };
61
62 #[test]
63 fn should_parse_rsa_public_key_request_packet() {
64 const RSA_PUBLIC_KEY_REQUEST: &[u8] = b"\x02";
65
66 let public_rsa_key_request =
67 PublicKeyRequest::deserialize((), &mut ParseBuf(RSA_PUBLIC_KEY_REQUEST));
68
69 assert!(public_rsa_key_request.is_ok());
70 }
71
72 #[test]
73 fn should_build_rsa_public_key_request_packet() {
74 let rsa_public_key_request = PublicKeyRequest::new();
75
76 let mut actual = Vec::new();
77 rsa_public_key_request.serialize(&mut actual);
78
79 let expected: Vec<u8> = [0x02].to_vec();
80
81 assert_eq!(expected, actual);
82 }
83}