use crate::MigrationContext;
use crate::migration::fields::FieldDescriptor;
use crate::store::StaticPath;
use std::sync::OnceLock;
#[derive(Clone)]
#[doc(hidden)]
pub struct MigrationStepEntry {
pub prefix: StaticPath,
pub id: Option<&'static str>,
pub target_version: u32,
pub description: &'static str,
pub struct_name: &'static str,
pub fields: &'static [FieldDescriptor],
pub run: fn(&mut MigrationContext) -> crate::migration::StepResult<()>,
}
inventory::collect!(MigrationStepEntry);
pub fn compiled_steps() -> &'static [&'static MigrationStepEntry] {
static COMPILED: OnceLock<Vec<&'static MigrationStepEntry>> = OnceLock::new();
COMPILED.get_or_init(|| inventory::iter::<MigrationStepEntry>.into_iter().collect())
}