diff --git a/postgres/src/config.rs b/postgres/src/config.rs index d50bd024..f6b151a8 100644 --- a/postgres/src/config.rs +++ b/postgres/src/config.rs @@ -11,7 +11,7 @@ use std::str::FromStr; use std::time::Duration; use tokio::runtime; #[doc(inline)] -pub use tokio_postgres::config::{ChannelBinding, SslMode, TargetSessionAttrs}; +pub use tokio_postgres::config::{ChannelBinding, Host, SslMode, TargetSessionAttrs}; use tokio_postgres::tls::{MakeTlsConnect, TlsConnect}; use tokio_postgres::{Error, Socket}; @@ -123,6 +123,12 @@ impl Config { self } + /// Gets the user to authenticate with, if one has been configured with + /// the `user` method. + pub fn get_user(&self) -> Option<&str> { + self.config.get_user() + } + /// Sets the password to authenticate with. pub fn password(&mut self, password: T) -> &mut Config where @@ -132,6 +138,12 @@ impl Config { self } + /// Gets the password to authenticate with, if one has been configured with + /// the `password` method. + pub fn get_password(&self) -> Option<&[u8]> { + self.config.get_password() + } + /// Sets the name of the database to connect to. /// /// Defaults to the user. @@ -140,18 +152,36 @@ impl Config { self } + /// Gets the name of the database to connect to, if one has been configured + /// with the `dbname` method. + pub fn get_dbname(&self) -> Option<&str> { + self.config.get_dbname() + } + /// Sets command line options used to configure the server. pub fn options(&mut self, options: &str) -> &mut Config { self.config.options(options); self } + /// Gets the command line options used to configure the server, if the + /// options have been set with the `options` method. + pub fn get_options(&self) -> Option<&str> { + self.config.get_options() + } + /// Sets the value of the `application_name` runtime parameter. pub fn application_name(&mut self, application_name: &str) -> &mut Config { self.config.application_name(application_name); self } + /// Gets the value of the `application_name` runtime parameter, if it has + /// been set with the `application_name` method. + pub fn get_application_name(&self) -> Option<&str> { + self.config.get_application_name() + } + /// Sets the SSL configuration. /// /// Defaults to `prefer`. @@ -160,6 +190,11 @@ impl Config { self } + /// Gets the SSL configuration. + pub fn get_ssl_mode(&self) -> SslMode { + self.config.get_ssl_mode() + } + /// Adds a host to the configuration. /// /// Multiple hosts can be specified by calling this method multiple times, and each will be tried in order. On Unix @@ -169,6 +204,11 @@ impl Config { self } + /// Gets the hosts that have been added to the configuration with `host`. + pub fn get_hosts(&self) -> &[Host] { + self.config.get_hosts() + } + /// Adds a Unix socket host to the configuration. /// /// Unlike `host`, this method allows non-UTF8 paths. @@ -191,6 +231,11 @@ impl Config { self } + /// Gets the ports that have been added to the configuration with `port`. + pub fn get_ports(&self) -> &[u16] { + self.config.get_ports() + } + /// Sets the timeout applied to socket-level connection attempts. /// /// Note that hostnames can resolve to multiple IP addresses, and this timeout will apply to each address of each @@ -200,6 +245,12 @@ impl Config { self } + /// Gets the connection timeout, if one has been set with the + /// `connect_timeout` method. + pub fn get_connect_timeout(&self) -> Option<&Duration> { + self.config.get_connect_timeout() + } + /// Controls the use of TCP keepalive. /// /// This is ignored for Unix domain socket connections. Defaults to `true`. @@ -208,6 +259,11 @@ impl Config { self } + /// Reports whether TCP keepalives will be used. + pub fn get_keepalives(&self) -> bool { + self.config.get_keepalives() + } + /// Sets the amount of idle time before a keepalive packet is sent on the connection. /// /// This is ignored for Unix domain sockets, or if the `keepalives` option is disabled. Defaults to 2 hours. @@ -216,6 +272,12 @@ impl Config { self } + /// Gets the configured amount of idle time before a keepalive packet will + /// be sent on the connection. + pub fn get_keepalives_idle(&self) -> Duration { + self.config.get_keepalives_idle() + } + /// Sets the requirements of the session. /// /// This can be used to connect to the primary server in a clustered database rather than one of the read-only @@ -228,6 +290,11 @@ impl Config { self } + /// Gets the requirements of the session. + pub fn get_target_session_attrs(&self) -> TargetSessionAttrs { + self.config.get_target_session_attrs() + } + /// Sets the channel binding behavior. /// /// Defaults to `prefer`. @@ -236,6 +303,11 @@ impl Config { self } + /// Gets the channel binding behavior. + pub fn get_channel_binding(&self) -> ChannelBinding { + self.config.get_channel_binding() + } + /// Opens a connection to a PostgreSQL database. pub fn connect(&self, tls: T) -> Result where diff --git a/tokio-postgres/src/config.rs b/tokio-postgres/src/config.rs index 0cba8ec8..da171cc7 100644 --- a/tokio-postgres/src/config.rs +++ b/tokio-postgres/src/config.rs @@ -56,9 +56,14 @@ pub enum ChannelBinding { Require, } +/// A host specification. #[derive(Debug, Clone, PartialEq)] -pub(crate) enum Host { +pub enum Host { + /// A TCP hostname. Tcp(String), + /// A path to a directory containing the server's Unix socket. + /// + /// This variant is only available on Unix platforms. #[cfg(unix)] Unix(PathBuf), } @@ -190,6 +195,12 @@ impl Config { self } + /// Gets the user to authenticate with, if one has been configured with + /// the `user` method. + pub fn get_user(&self) -> Option<&str> { + self.user.as_deref() + } + /// Sets the password to authenticate with. pub fn password(&mut self, password: T) -> &mut Config where @@ -199,6 +210,12 @@ impl Config { self } + /// Gets the password to authenticate with, if one has been configured with + /// the `password` method. + pub fn get_password(&self) -> Option<&[u8]> { + self.password.as_deref() + } + /// Sets the name of the database to connect to. /// /// Defaults to the user. @@ -207,18 +224,36 @@ impl Config { self } + /// Gets the name of the database to connect to, if one has been configured + /// with the `dbname` method. + pub fn get_dbname(&self) -> Option<&str> { + self.dbname.as_deref() + } + /// Sets command line options used to configure the server. pub fn options(&mut self, options: &str) -> &mut Config { self.options = Some(options.to_string()); self } + /// Gets the command line options used to configure the server, if the + /// options have been set with the `options` method. + pub fn get_options(&self) -> Option<&str> { + self.options.as_deref() + } + /// Sets the value of the `application_name` runtime parameter. pub fn application_name(&mut self, application_name: &str) -> &mut Config { self.application_name = Some(application_name.to_string()); self } + /// Gets the value of the `application_name` runtime parameter, if it has + /// been set with the `application_name` method. + pub fn get_application_name(&self) -> Option<&str> { + self.application_name.as_deref() + } + /// Sets the SSL configuration. /// /// Defaults to `prefer`. @@ -227,6 +262,11 @@ impl Config { self } + /// Gets the SSL configuration. + pub fn get_ssl_mode(&self) -> SslMode { + self.ssl_mode + } + /// Adds a host to the configuration. /// /// Multiple hosts can be specified by calling this method multiple times, and each will be tried in order. On Unix @@ -243,6 +283,11 @@ impl Config { self } + /// Gets the hosts that have been added to the configuration with `host`. + pub fn get_hosts(&self) -> &[Host] { + &self.host + } + /// Adds a Unix socket host to the configuration. /// /// Unlike `host`, this method allows non-UTF8 paths. @@ -265,6 +310,11 @@ impl Config { self } + /// Gets the ports that have been added to the configuration with `port`. + pub fn get_ports(&self) -> &[u16] { + &self.port + } + /// Sets the timeout applied to socket-level connection attempts. /// /// Note that hostnames can resolve to multiple IP addresses, and this timeout will apply to each address of each @@ -274,6 +324,12 @@ impl Config { self } + /// Gets the connection timeout, if one has been set with the + /// `connect_timeout` method. + pub fn get_connect_timeout(&self) -> Option<&Duration> { + self.connect_timeout.as_ref() + } + /// Controls the use of TCP keepalive. /// /// This is ignored for Unix domain socket connections. Defaults to `true`. @@ -282,6 +338,11 @@ impl Config { self } + /// Reports whether TCP keepalives will be used. + pub fn get_keepalives(&self) -> bool { + self.keepalives + } + /// Sets the amount of idle time before a keepalive packet is sent on the connection. /// /// This is ignored for Unix domain sockets, or if the `keepalives` option is disabled. Defaults to 2 hours. @@ -290,6 +351,12 @@ impl Config { self } + /// Gets the configured amount of idle time before a keepalive packet will + /// be sent on the connection. + pub fn get_keepalives_idle(&self) -> Duration { + self.keepalives_idle + } + /// Sets the requirements of the session. /// /// This can be used to connect to the primary server in a clustered database rather than one of the read-only @@ -302,6 +369,11 @@ impl Config { self } + /// Gets the requirements of the session. + pub fn get_target_session_attrs(&self) -> TargetSessionAttrs { + self.target_session_attrs + } + /// Sets the channel binding behavior. /// /// Defaults to `prefer`. @@ -310,6 +382,11 @@ impl Config { self } + /// Gets the channel binding behavior. + pub fn get_channel_binding(&self) -> ChannelBinding { + self.channel_binding + } + fn param(&mut self, key: &str, value: &str) -> Result<(), Error> { match key { "user" => {