#![doc(html_root_url = "https://docs.rs/kpgres")]
#![warn(rust_2018_idioms, clippy::all, missing_docs)]
pub use crate::client::Client;
pub use crate::config::Config;
pub use crate::connection::Connection;
pub use crate::copy_in::CopyInSink;
pub use crate::copy_out::CopyOutStream;
use crate::error::DbError;
pub use crate::error::Error;
pub use crate::portal::Portal;
pub use crate::query::RowStream;
pub use crate::row::{Row, SimpleQueryRow};
pub use crate::simple_query::SimpleQueryStream;
pub use crate::socket::Socket;
pub use crate::statement::{Column, Statement};
use crate::tls::MakeTlsConnect;
pub use crate::tls::NoTls;
pub use crate::to_statement::ToStatement;
pub use crate::transaction::Transaction;
use crate::types::ToSql;
pub mod binary_copy;
mod bind;
mod cancel_query;
mod cancel_query_raw;
mod client;
mod codec;
pub mod config;
mod connect;
mod connect_raw;
mod connect_socket;
mod connect_tls;
mod connection;
mod copy_in;
mod copy_out;
pub mod error;
mod maybe_tls_stream;
mod portal;
mod prepare;
mod query;
pub mod row;
mod simple_query;
mod socket;
mod statement;
pub mod tls;
mod to_statement;
mod transaction;
pub mod types;
pub async fn connect<T>(
config: &str,
tls: T,
) -> Result<(Client, Connection<Socket, T::Stream>), Error>
where
T: MakeTlsConnect<Socket>,
{
let config = config.parse::<Config>()?;
config.connect(tls).await
}
#[derive(Clone, Debug)]
pub struct Notification {
process_id: i32,
channel: String,
payload: String,
}
impl Notification {
pub fn process_id(&self) -> i32 {
self.process_id
}
pub fn channel(&self) -> &str {
&self.channel
}
pub fn payload(&self) -> &str {
&self.payload
}
}
#[allow(clippy::large_enum_variant)]
#[non_exhaustive]
pub enum AsyncMessage {
Notice(DbError),
Notification(Notification),
}
#[non_exhaustive]
pub enum SimpleQueryMessage {
Row(SimpleQueryRow),
CommandComplete(u64),
}
fn slice_iter<'a>(s: &'a [&'a (dyn ToSql + Sync)]) -> impl ExactSizeIterator<Item = &'a dyn ToSql> {
s.iter().map(|s| *s as _)
}