#[macro_export]
macro_rules! vec_box {
($elem:expr; $n:expr) => (vec![Box::new($elem); $n]);
($($x:expr),*) => (vec![$(Box::new($x)),*]);
($($x:expr,)*) => (vec![$(Box::new($x)),*]);
($($x:expr,)*) => (sqlx_migrator::vec_box![$($x),*]);
}
#[macro_export]
macro_rules! migration {
($db:ty, $state:ty, $op:ty, $app_name:expr, $parents:expr, $operations:expr) => {
#[async_trait::async_trait]
impl sqlx_migrator::migration::Migration<$db, $state> for $op {
fn app(&self) -> &str {
$app_name
}
fn name(&self) -> &str {
std::path::Path::new(file!())
.file_stem()
.map(|stem_os_str| stem_os_str.to_str().unwrap_or_default())
.unwrap_or_default()
}
fn parents(&self) -> Vec<Box<dyn sqlx_migrator::migration::Migration<$db, $state>>> {
$parents
}
fn operations(&self) -> Vec<Box<dyn sqlx_migrator::operation::Operation<$db, $state>>> {
$operations
}
}
};
($db:ty, $op:ty, $app_name:expr, $parents:expr, $operations:expr) => {
sqlx_migrator::migration!($db, (), $op, $app_name, $parents, $operations);
};
}
#[macro_export]
#[cfg(all(
any(feature = "postgres", feature = "mysql", feature = "sqlite"),
feature = "any"
))]
macro_rules! any_migration {
($state:ty, $op:ty, $app_name:expr, $parents:expr, $operations:expr) => {
sqlx_migrator::migration!(
sqlx_migrator::sqlx::Any,
$state,
$op,
$app_name,
$parents,
$operations
);
};
($op:ty, $app_name:expr, $parents:expr, $operations:expr) => {
sqlx_migrator::any_migration!((), $op, $app_name, $parents, $operations);
};
}
#[macro_export]
#[cfg(feature = "mysql")]
macro_rules! mysql_migration {
($state:ty, $op:ty, $app_name:expr, $parents:expr, $operations:expr) => {
sqlx_migrator::migration!(
sqlx_migrator::sqlx::MySql,
$state,
$op,
$app_name,
$parents,
$operations
);
};
($op:ty, $app_name:expr, $parents:expr, $operations:expr) => {
sqlx_migrator::mysql_migration!((), $op, $app_name, $parents, $operations);
};
}
#[macro_export]
#[cfg(feature = "postgres")]
macro_rules! postgres_migration {
($state:ty, $op:ty, $app_name:expr, $parents:expr, $operations:expr) => {
sqlx_migrator::migration!(
sqlx_migrator::sqlx::Postgres,
$state,
$op,
$app_name,
$parents,
$operations
);
};
($op:ty, $app_name:expr, $parents:expr, $operations:expr) => {
sqlx_migrator::postgres_migration!((), $op, $app_name, $parents, $operations);
};
}
#[macro_export]
#[cfg(feature = "sqlite")]
macro_rules! sqlite_migration {
($state:ty, $op:ty, $app_name:expr, $parents:expr, $operations:expr) => {
sqlx_migrator::migration!(
sqlx_migrator::sqlx::Sqlite,
$state,
$op,
$app_name,
$parents,
$operations
);
};
($op:ty, $app_name:expr, $parents:expr, $operations:expr) => {
sqlx_migrator::sqlite_migration!((), $op, $app_name, $parents, $operations);
};
}