use crate::db::errors::{DataError, MigrationError}; use crate::db::variables::migrations::*; use crate::db::Database; use phf::phf_map; pub(super) type DataMigration = (fn(&Database) -> Result<(), DataError>, &'static str); static MIGRATIONS: phf::Map = phf_map! { 1u32 => (add_room_user_variable_count::migrate, "add_room_user_variable_count"), 2u32 => (delete_v0_schema, "delete_v0_schema"), 3u32 => (delete_variable_count, "delete_variable_count"), 4u32 => (change_delineator_delimiter::migrate, "change_delineator_delimiter"), 5u32 => (change_tree_structure::migrate, "change_tree_structure"), }; pub fn get_migrations(versions: &[u32]) -> Result, MigrationError> { let mut migrations: Vec = vec![]; for version in versions { match MIGRATIONS.get(version) { Some(func) => migrations.push(*func), None => return Err(MigrationError::MigrationNotFound(*version)), } } Ok(migrations) }