use ruststream::{DescribeServer, ServerSpec};
use ruststream_sqlx_dialect::Dialect;
#[cfg(feature = "any")]
use sqlx::Any;
#[cfg(feature = "mysql")]
use sqlx::MySql;
#[cfg(feature = "postgres")]
use sqlx::Postgres;
#[cfg(feature = "sqlite")]
use sqlx::Sqlite;
use super::SqlxBroker;
#[cfg(feature = "postgres")]
impl<D: Dialect + 'static> DescribeServer for SqlxBroker<Postgres, D> {
fn describe_server(&self) -> ServerSpec {
ServerSpec::from_url(&self.pool.url(), "postgres")
}
}
#[cfg(feature = "mysql")]
impl<D: Dialect + 'static> DescribeServer for SqlxBroker<MySql, D> {
fn describe_server(&self) -> ServerSpec {
ServerSpec::from_url(&self.pool.url(), "mysql")
}
}
#[cfg(feature = "sqlite")]
impl<D: Dialect + 'static> DescribeServer for SqlxBroker<Sqlite, D> {
fn describe_server(&self) -> ServerSpec {
ServerSpec::in_process("sqlite")
}
}
#[cfg(feature = "any")]
impl<D: Dialect + 'static> DescribeServer for SqlxBroker<Any, D> {
fn describe_server(&self) -> ServerSpec {
let url = self.pool.url();
let scheme = url.split_once(':').map_or(&*url, |(scheme, _)| scheme);
match scheme {
"sqlite" => ServerSpec::in_process("sqlite"),
"postgres" | "postgresql" => ServerSpec::from_url(&url, "postgres"),
"mysql" | "mariadb" => ServerSpec::from_url(&url, "mysql"),
scheme => ServerSpec::from_url(&url, scheme),
}
}
}