1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
use tokio::runtime; use tokio_postgres::tls::MakeTlsConnect; use tokio_postgres::{Error, Socket}; /// The capability to request cancellation of in-progress queries on a /// connection. #[derive(Clone)] pub struct CancelToken(tokio_postgres::CancelToken); impl CancelToken { pub(crate) fn new(inner: tokio_postgres::CancelToken) -> CancelToken { CancelToken(inner) } /// Attempts to cancel the in-progress query on the connection associated /// with this `CancelToken`. /// /// The server provides no information about whether a cancellation attempt was successful or not. An error will /// only be returned if the client was unable to connect to the database. /// /// Cancellation is inherently racy. There is no guarantee that the /// cancellation request will reach the server before the query terminates /// normally, or that the connection associated with this token is still /// active. pub fn cancel_query<T>(&self, tls: T) -> Result<(), Error> where T: MakeTlsConnect<Socket>, { runtime::Builder::new() .enable_all() .basic_scheduler() .build() .unwrap() // FIXME don't unwrap .block_on(self.0.cancel_query(tls)) } }