database_migration/migration/
mod.rs1use crate::checksum::Checksum;
2use chrono::{DateTime, NaiveDateTime, Utc};
3use serde::{Deserialize, Serialize};
4use std::fmt::{Display, Formatter};
5use std::path::PathBuf;
6use std::time::Duration;
7
8#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq)]
9pub enum MigrationKind {
10 Baseline,
11 Up,
12 Down,
13}
14
15impl MigrationKind {
16 pub const fn as_str(&self) -> &'static str {
17 match self {
18 Self::Baseline => "baseline",
19 Self::Up => "up",
20 Self::Down => "down",
21 }
22 }
23
24 pub fn is_backward(&self) -> bool {
25 *self == Self::Down
26 }
27
28 pub fn is_forward(&self) -> bool {
29 !self.is_backward()
30 }
31
32 pub const fn is_any(&self) -> bool {
33 true
34 }
35}
36
37impl Display for MigrationKind {
38 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
39 write!(f, "{}", self.as_str())
40 }
41}
42
43#[derive(Debug, Clone, PartialEq, Eq)]
44pub struct NewMigration {
45 pub key: NaiveDateTime,
46 pub title: String,
47 pub kind: MigrationKind,
48}
49
50#[derive(Debug, Clone, PartialEq, Eq)]
51pub struct Migration {
52 pub key: NaiveDateTime,
53 pub title: String,
54 pub kind: MigrationKind,
55 pub script_path: PathBuf,
56}
57
58#[derive(Debug, Clone, PartialEq, Eq)]
59pub struct ScriptContent {
60 pub key: NaiveDateTime,
61 pub kind: MigrationKind,
62 pub path: PathBuf,
63 pub content: String,
64 pub checksum: Checksum,
65}
66
67#[derive(Debug, Clone, PartialEq, Eq)]
68pub struct ApplicableMigration {
69 pub key: NaiveDateTime,
70 pub kind: MigrationKind,
71 pub script_content: String,
72 pub checksum: Checksum,
73}
74
75#[derive(Debug, Clone, PartialEq, Eq)]
76pub struct Execution {
77 pub key: NaiveDateTime,
78 pub applied_rank: i64,
79 pub applied_by: String,
80 pub applied_at: DateTime<Utc>,
81 pub checksum: Checksum,
82 pub execution_time: Duration,
83}
84
85#[derive(Debug, Clone, PartialEq, Eq)]
86pub struct Reversion {
87 pub key: NaiveDateTime,
88 pub reverted_by: String,
89 pub reverted_at: DateTime<Utc>,
90 pub execution_time: Duration,
91}
92
93#[derive(Debug, Clone, PartialEq, Eq)]
94pub struct ProblematicMigration {
95 pub key: NaiveDateTime,
96 pub kind: MigrationKind,
97 pub script_path: PathBuf,
98 pub problem: Problem,
99}
100
101#[derive(Debug, Clone, PartialEq, Eq)]
102pub enum Problem {
103 ChecksumMismatch {
104 definition_checksum: Checksum,
105 execution_checksum: Checksum,
106 },
107 OutOfOrder {
108 definition_key: NaiveDateTime,
109 last_applied_key: NaiveDateTime,
110 },
111}
112
113#[derive(Debug, Clone, PartialEq, Eq)]
114pub enum MigrationsTableInfo {
115 NoTables,
116 Missing,
117 Table {
118 name: String,
119 version: Option<String>,
120 definition: String,
121 },
122}
123
124#[cfg(test)]
125mod tests;