rustauth-diesel 0.3.1

Diesel database adapters for RustAuth.
Documentation
use rustauth_core::db::{DbField, DbFieldType, DbValue, IdGeneration, SqlParam, SqlSelectedField};
use rustauth_core::env::env_var;
use rustauth_core::error::RustAuthError;
use time::OffsetDateTime;

pub const DEFAULT_POSTGRES_URL: &str = "postgres://user:password@localhost:5432/rustauth";

#[cfg(feature = "mysql")]
pub const DEFAULT_MYSQL_URL: &str = "mysql://user:password@localhost:3306/rustauth";

#[cfg(feature = "postgres")]
pub fn postgres_database_url() -> String {
    env_var("TEST_POSTGRES_URL")
        .or_else(|| env_var("RUSTAUTH_TEST_POSTGRES_URL"))
        .unwrap_or_else(|| DEFAULT_POSTGRES_URL.to_owned())
}

#[cfg(feature = "mysql")]
pub fn mysql_database_url() -> String {
    env_var("TEST_MYSQL_URL")
        .or_else(|| env_var("RUSTAUTH_TEST_MYSQL_URL"))
        .unwrap_or_else(|| DEFAULT_MYSQL_URL.to_owned())
}

pub fn field(name: &str, field_type: DbFieldType) -> DbField {
    DbField {
        name: name.to_owned(),
        field_type,
        required: false,
        unique: false,
        index: false,
        returned: true,
        input: true,
        foreign_key: None,
        generated_id: None,
    }
}

#[cfg(feature = "postgres")]
pub fn uuid_field(name: &str) -> DbField {
    DbField {
        generated_id: Some(IdGeneration::Uuid),
        ..field(name, DbFieldType::String)
    }
}

pub fn selected(logical_name: &str, field: DbField, alias: &str) -> SqlSelectedField {
    SqlSelectedField {
        logical_name: logical_name.to_owned(),
        field,
        alias: alias.to_owned(),
    }
}

pub fn param(field: &DbField, value: DbValue) -> SqlParam {
    SqlParam::new(field, value)
}

pub fn sample_timestamp() -> OffsetDateTime {
    OffsetDateTime::UNIX_EPOCH
}

pub fn adapter_error(
    context: &str,
    database_url: &str,
    error: impl std::fmt::Display,
) -> RustAuthError {
    RustAuthError::Adapter(format!(
        "{context} test database preflight failed for `{database_url}`: {error}. \
         Start services with `./scripts/ensure-test-services.sh` and override with \
         TEST_POSTGRES_URL / TEST_MYSQL_URL when needed."
    ))
}