summary refs log tree commit diff stats
path: root/src/db.rs
diff options
context:
space:
mode:
authorBen Morrison <ben@gbmor.dev>2019-08-27 00:50:51 -0400
committerBen Morrison <ben@gbmor.dev>2019-08-27 00:50:51 -0400
commit9ee17f15bb380d31d55d83586ebdf3644cf326af (patch)
tree35ef8c7289f2fbd52564a1fec4fd3f0dfc892e92 /src/db.rs
parentd64124e97bdf26169f20e98fbdf1af934b265b74 (diff)
downloadclinte-9ee17f15bb380d31d55d83586ebdf3644cf326af.tar.gz
fleshing out types
Diffstat (limited to 'src/db.rs')
-rw-r--r--src/db.rs81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/db.rs b/src/db.rs
new file mode 100644
index 0000000..d3ecd6a
--- /dev/null
+++ b/src/db.rs
@@ -0,0 +1,81 @@
+use rusqlite;
+use std::sync::mpsc;
+
+#[derive(Debug)]
+pub struct Post {
+    id: u32,
+    title: String,
+    author: String,
+    body: String,
+}
+
+pub struct Conn {
+    db: rusqlite::Connection,
+    tx: mpsc::Sender<Cmd>,
+}
+
+#[derive(Debug)]
+pub enum Cmd {
+    Create,
+    Update,
+    Disconnect,
+    NOOP,
+}
+
+impl Conn {
+    fn init() -> rusqlite::Connection {
+        let conn = rusqlite::Connection::open_with_flags(
+            "/tmp/db.sql",
+            rusqlite::OpenFlags::SQLITE_OPEN_FULL_MUTEX
+                | rusqlite::OpenFlags::SQLITE_OPEN_CREATE
+                | rusqlite::OpenFlags::SQLITE_OPEN_READ_WRITE,
+        )
+        .expect("Could not connect to DB");
+
+        conn.execute(
+            "CREATE TABLE IF NOT EXISTS posts (
+            id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
+            title TEXT NOT NULL,
+            author TEXT NOT NULL,
+            body TEXT NOT NULL
+        )",
+            rusqlite::NO_PARAMS,
+        )
+        .expect("Could not initialize DB");
+
+        conn
+    }
+
+    pub fn new(tx: mpsc::Sender<Cmd>) -> Self {
+        Conn {
+            db: Conn::init(),
+            tx,
+        }
+    }
+}
+
+impl Cmd {
+    pub fn new(txt: &str) -> Self {
+        match txt {
+            "create" => Cmd::Create,
+            "update" => Cmd::Update,
+            "disconnect" => Cmd::Disconnect,
+            _ => Cmd::NOOP,
+        }
+    }
+}
+
+impl Post {
+    pub fn id(&self) -> String {
+        format!("{}", self.id)
+    }
+    pub fn title(&self) -> String {
+        self.title.clone()
+    }
+    pub fn author(&self) -> String {
+        self.author.clone()
+    }
+    pub fn body(&self) -> String {
+        self.body.clone()
+    }
+}