database_migration/
error.rs

1use 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}