#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Dialect {
Sqlite,
Postgres { url: String },
}
impl Dialect {
#[must_use]
pub fn name(&self) -> &'static str {
match self {
Dialect::Sqlite => "sqlite",
Dialect::Postgres { .. } => "postgres",
}
}
#[must_use]
pub fn postgres_url() -> Option<String> {
std::env::var("FZ_TEST_POSTGRES_URL")
.ok()
.map(|url| url.trim().to_owned())
.filter(|url| !url.is_empty())
}
#[must_use]
pub fn available() -> Vec<Self> {
static NOTICED: std::sync::Once = std::sync::Once::new();
let mut dialects = vec![Dialect::Sqlite];
match Self::postgres_url() {
Some(url) => dialects.push(Dialect::Postgres { url }),
None => NOTICED.call_once(|| {
eprintln!(
"NOTE: FZ_TEST_POSTGRES_URL is not set — the Postgres parity leg is \
skipped ({}); CI runs it against a postgres:16 service container",
crate::POSTGRES_SKIP_REASON
);
}),
}
dialects
}
}