aboutsummaryrefslogtreecommitdiff
path: root/src/db.rs
blob: 8503b1059b15eb91ab792aa40dc8d18f1dac54b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// extern
use anyhow::Result;
use log::{debug, info};
use rusqlite::{Connection, OpenFlags, NO_PARAMS};

// std
use std::fmt;
use std::path::Path;

pub fn open_connection<P>(p: P) -> Result<Connection>
where
    P: AsRef<Path>,
{
    info!("Opened connection to database");
    Ok(Connection::open_with_flags(
        &p,
        OpenFlags::SQLITE_OPEN_CREATE | OpenFlags::SQLITE_OPEN_READ_WRITE,
    )?)
}

pub fn init_db<P: AsRef<Path> + fmt::Debug>(p: P) -> Result<()> {
    debug!("Looking for database at `{:?}`", p);
    let conn = open_connection(&p)?;
    conn.execute(
        "CREATE TABLE IF NOT EXISTS urls (
            link TEXT PRIMARY KEY,
            shortlink TEXT NOT NULL
        )",
        NO_PARAMS,
    )?;
    info!("SQLite3 database `{:?}` initialized", &p);
    Ok(())
}