dbmigrate_lib/drivers/
mod.rs1use url::{Url};
3
4use errors::{Result, ResultExt};
5
6#[cfg(feature = "mysql_support")]
7pub mod mysql;
8#[cfg(feature = "postgres_support")]
9pub mod postgres;
10#[cfg(feature = "sqlite_support")]
11pub mod sqlite;
12
13
14pub trait Driver {
17 fn ensure_migration_table_exists(&mut self);
20 fn remove_migration_table(&mut self);
22 fn get_current_number(&mut self) -> i32;
24 fn set_current_number(&mut self, number: i32);
26 fn migrate(&mut self, migration: String, number: i32) -> Result<()>;
29}
30
31pub fn get_driver(url: &str) -> Result<Box<Driver>> {
33 let parsed_url = Url::parse(url)
34 .chain_err(|| format!("Invalid URL: {}", url))?;
35
36 match parsed_url.scheme() {
37 #[cfg(feature = "postgres_support")]
38 "postgres" => postgres::Postgres::new(url).map(|d| Box::new(d) as Box<Driver>),
39 #[cfg(feature = "mysql_support")]
40 "mysql" => mysql::Mysql::new(url).map(|d| Box::new(d) as Box<Driver>),
41 #[cfg(feature = "sqlite_support")]
42 "sqlite" => sqlite::Sqlite::new(url).map(|d| Box::new(d) as Box<Driver>),
43 _ => bail!("Invalid URL: {}", url)
44 }
45}
46