sqlx_postgres/message/
query.rs

1use crate::io::BufMutExt;
2use crate::message::{FrontendMessage, FrontendMessageFormat};
3use sqlx_core::Error;
4use std::num::Saturating;
5
6#[derive(Debug)]
7pub struct Query<'a>(pub &'a str);
8
9impl FrontendMessage for Query<'_> {
10    const FORMAT: FrontendMessageFormat = FrontendMessageFormat::Query;
11
12    fn body_size_hint(&self) -> Saturating<usize> {
13        let mut size = Saturating(0);
14
15        size += self.0.len();
16        size += 1; // NUL terminator
17
18        size
19    }
20
21    fn encode_body(&self, buf: &mut Vec<u8>) -> Result<(), Error> {
22        buf.put_str_nul(self.0);
23        Ok(())
24    }
25}
26
27#[test]
28fn test_encode_query() {
29    const EXPECTED: &[u8] = b"Q\0\0\0\x0DSELECT 1\0";
30
31    let mut buf = Vec::new();
32    let m = Query("SELECT 1");
33
34    m.encode_msg(&mut buf).unwrap();
35
36    assert_eq!(buf, EXPECTED);
37}