tokio_postgres/
cancel_query_raw.rs
1use crate::config::SslMode;
2use crate::tls::TlsConnect;
3use crate::{connect_tls, Error};
4use bytes::BytesMut;
5use postgres_protocol::message::frontend;
6use tokio::io::{AsyncRead, AsyncWrite, AsyncWriteExt};
7
8pub async fn cancel_query_raw<S, T>(
9 stream: S,
10 mode: SslMode,
11 tls: T,
12 has_hostname: bool,
13 process_id: i32,
14 secret_key: i32,
15) -> Result<(), Error>
16where
17 S: AsyncRead + AsyncWrite + Unpin,
18 T: TlsConnect<S>,
19{
20 let mut stream = connect_tls::connect_tls(stream, mode, tls, has_hostname).await?;
21
22 let mut buf = BytesMut::new();
23 frontend::cancel_request(process_id, secret_key, &mut buf);
24
25 stream.write_all(&buf).await.map_err(Error::io)?;
26 stream.flush().await.map_err(Error::io)?;
27 stream.shutdown().await.map_err(Error::io)?;
28
29 Ok(())
30}