Skip to content

Commit

Permalink
Allow converting AnyConnectOptions to a specific ConnectOptions
Browse files Browse the repository at this point in the history
  • Loading branch information
05storm26 committed Jan 5, 2022
1 parent d901694 commit d37aed2
Showing 1 changed file with 63 additions and 2 deletions.
65 changes: 63 additions & 2 deletions sqlx-core/src/any/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use crate::connection::ConnectOptions;
use crate::error::Error;
use futures_core::future::BoxFuture;
use log::LevelFilter;
use std::convert::TryFrom;
use std::str::FromStr;
use std::time::Duration;

Expand All @@ -26,7 +27,7 @@ use crate::mssql::MssqlConnectOptions;
/// postgres://postgres:password@localhost/database
/// mysql://root:password@localhost/database
/// ```
#[derive(Debug)]
#[derive(Debug, Clone)]
pub struct AnyConnectOptions(pub(crate) AnyConnectOptionsKind);

impl AnyConnectOptions {
Expand All @@ -47,7 +48,67 @@ impl AnyConnectOptions {
}
}

#[derive(Debug)]
#[cfg(feature = "postgres")]
impl TryFrom<AnyConnectOptions> for PgConnectOptions {
type Error = Error;

fn try_from(value: AnyConnectOptions) -> Result<Self, Self::Error> {
if let AnyConnectOptionsKind::Postgres(connect_options) = value.0 {
Ok(connect_options)
} else {
Err(Error::Configuration(
"Not postgres typed AnyConnectOptions".into(),
))
}
}
}

#[cfg(feature = "mysql")]
impl TryFrom<AnyConnectOptions> for MySqlConnectOptions {
type Error = Error;

fn try_from(value: AnyConnectOptions) -> Result<Self, Self::Error> {
if let AnyConnectOptionsKind::MySql(connect_options) = value.0 {
Ok(connect_options)
} else {
Err(Error::Configuration(
"Not mysql typed AnyConnectOptions".into(),
))
}
}
}

#[cfg(feature = "sqlite")]
impl TryFrom<AnyConnectOptions> for SqliteConnectOptions {
type Error = Error;

fn try_from(value: AnyConnectOptions) -> Result<Self, Self::Error> {
if let AnyConnectOptionsKind::Sqlite(connect_options) = value.0 {
Ok(connect_options)
} else {
Err(Error::Configuration(
"Not sqlite typed AnyConnectOptions".into(),
))
}
}
}

#[cfg(feature = "mssql")]
impl TryFrom<AnyConnectOptions> for MssqlConnectOptions {
type Error = Error;

fn try_from(value: AnyConnectOptions) -> Result<Self, Self::Error> {
if let AnyConnectOptionsKind::Mssql(connect_options) = value {
Ok(connect_options)
} else {
Err(Error::Configuration(
"Not mssql typed AnyConnectOptions".into(),
))
}
}
}

#[derive(Debug, Clone)]
pub(crate) enum AnyConnectOptionsKind {
#[cfg(feature = "postgres")]
Postgres(PgConnectOptions),
Expand Down

0 comments on commit d37aed2

Please sign in to comment.