#![deny(warnings)]
extern crate r2d2;
extern crate sqlite3;
use sqlite3::{Connection, Error};
use std::path::{Path, PathBuf};
enum ConnectionConfig {
File(PathBuf),
Memory,
}
pub struct SqliteConnectionManager(ConnectionConfig);
impl SqliteConnectionManager {
pub fn file<P: AsRef<Path>>(path: P) -> Self {
SqliteConnectionManager(ConnectionConfig::File(path.as_ref().to_path_buf()))
}
pub fn memory() -> Self {
SqliteConnectionManager(ConnectionConfig::Memory)
}
}
impl r2d2::ManageConnection for SqliteConnectionManager {
type Connection = Connection;
type Error = sqlite3::Error;
fn connect(&self) -> Result<Connection, Error> {
match self.0 {
ConnectionConfig::File(ref path) => Connection::open(path),
ConnectionConfig::Memory => Connection::open(":memory:"),
}
}
fn is_valid(&self, conn: &mut Connection) -> Result<(), Error> {
conn.execute("").map_err(Into::into)
}
fn has_broken(&self, _: &mut Connection) -> bool {
false
}
}