diff options
author | Jesse Luehrs <doy@tozt.net> | 2018-11-05 01:48:16 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2018-11-05 01:48:16 -0500 |
commit | 93f6e7083af1db40b16db049b62025f8cdcbbc5a (patch) | |
tree | 5712629b46b4ce249f77b7d9a6472cf8cf0872af /src/db.rs | |
parent | 0206a6ebbb41050730697e0d658f7893e46dca03 (diff) | |
download | lastfm-query-93f6e7083af1db40b16db049b62025f8cdcbbc5a.tar.gz lastfm-query-93f6e7083af1db40b16db049b62025f8cdcbbc5a.zip |
start sketching out some db stuff
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/db.rs b/src/db.rs new file mode 100644 index 0000000..ef5a58f --- /dev/null +++ b/src/db.rs @@ -0,0 +1,43 @@ +use error::Result; + +const SCHEMA: &'static str = " + CREATE TABLE `tracks` ( + artist varchar(1024) NOT NULL, + album varchar(1024) DEFAULT NULL, + name varchar(1024) NOT NULL, + timestamp integer(11) NOT NULL + ); +"; + +pub struct DB { + conn: rusqlite::Connection, +} + +impl DB { + pub fn new<P: AsRef<std::path::Path>>(path: &P) -> Result<DB> { + if !path.as_ref().exists() { + Self::create(path)?; + } + + return Ok(DB { + conn: rusqlite::Connection::open(path)?, + }) + } + + fn create<P: AsRef<std::path::Path>>(path: &P) -> Result<()> { + println!( + "Initializing database at {}", + path.as_ref().to_string_lossy(), + ); + + if let Some(parent) = path.as_ref().parent() { + std::fs::create_dir_all(parent)?; + let conn = rusqlite::Connection::open(path)?; + conn.execute(SCHEMA, rusqlite::NO_PARAMS)?; + Ok(()) + } + else { + unimplemented!(); + } + } +} |