use std::{fmt, future::Future};
use serde::de::DeserializeOwned;
use crate::{Coin, Error};
pub trait Database: DeserializeOwned + fmt::Debug {
#[must_use]
fn root_username(&self) -> Option<&str>;
#[inline]
#[must_use]
fn has_root(&self) -> bool {
self.root_username().is_some()
}
#[must_use]
fn requires_credentials(&self) -> bool;
fn init_schema(
&mut self,
creds: Option<Credentials>,
coins: &[Coin],
) -> impl Future<Output = Result<(), Error>>;
fn drop_schema(
&mut self,
creds: Option<Credentials>,
coins: Option<&[Coin]>,
) -> impl Future<Output = Result<(), Error>>;
}
mod credentials;
pub use credentials::Credentials;
mod dbtype;
pub use dbtype::DbType;
#[cfg(feature = "mysql")]
#[cfg_attr(docsrs, doc(cfg(feature = "mysql")))]
pub mod mysql;
#[cfg(feature = "postgres")]
#[cfg_attr(docsrs, doc(cfg(feature = "postgres")))]
pub mod postgres;
#[cfg(feature = "sqlite")]
#[cfg_attr(docsrs, doc(cfg(feature = "sqlite")))]
pub mod sqlite;