database_migration/
error.rs1use crate::migration::ProblematicMigration;
2use indexmap::IndexMap;
3
4#[derive(thiserror::Error, Debug, Clone, PartialEq, Eq)]
5pub enum Error {
6 #[error("migrations changed after execution: {0:?}")]
7 ChangedAfterExecution(Vec<ProblematicMigration>),
8 #[error("failed to load settings: {0}")]
9 Configuration(String),
10 #[error("failed to create migrations folder: {0}")]
11 CreatingMigrationsFolder(String),
12 #[error("failed to create script file: {0}")]
13 CreatingScriptFile(String),
14 #[error("database query failed: {0}")]
15 DbQuery(String),
16 #[error("db script execution failed: {0:?}")]
17 DbScript(IndexMap<usize, String>),
18 #[error(transparent)]
19 Definition(#[from] DefinitionError),
20 #[error("failed to insert the migration execution for key={0} into the migrations table")]
21 ExecutionNotInserted(String),
22 #[error("failed to delete the migration execution for key={0} from the migrations table")]
23 ExecutionNotDeleted(String),
24 #[error("failed to query table definitions: {0}")]
25 FetchingTableDefinitions(String),
26 #[error("migrations out of order: {0:?}")]
27 OutOfOrder(Vec<ProblematicMigration>),
28 #[error("failed reading migration files: {0}")]
29 ReadingMigrationFile(String),
30 #[error("failed scanning migration directory: {0}")]
31 ScanningMigrationDirectory(String),
32}
33
34#[derive(thiserror::Error, Debug, Clone, PartialEq, Eq)]
35pub enum DefinitionError {
36 #[error("direction is ambiguous")]
37 AmbiguousDirection,
38 #[error("invalid date: {0}")]
39 InvalidDate(String),
40 #[error("invalid time: {0}")]
41 InvalidTime(String),
42 #[error("definition contains an invalid utf-8 character")]
43 InvalidUtf8Character,
44 #[error("definition does not contain a date")]
45 MissingDate,
46 #[error("definition does not contain a time")]
47 MissingTime,
48 #[error("filename of definition is invalid")]
49 InvalidFilename,
50}
51
52#[derive(thiserror::Error, Debug, Clone, PartialEq, Eq)]
53pub enum FilePatternError {
54 #[error("invalid characters '{0:?}' in filename pattern")]
55 InvalidCharacter(Vec<char>),
56 #[error("invalid pattern: {0}")]
57 InvalidPattern(String),
58 #[error("an empty pattern together with OR ('|') is not allowed")]
59 EmptySubPatternNotAllowed,
60}
61
62impl From<FilePatternError> for Error {
63 fn from(value: FilePatternError) -> Self {
64 Self::Configuration(value.to_string())
65 }
66}