diff --git a/src/modules/source/mod.rs b/src/modules/source/mod.rs index a3436d0..e050ed8 100644 --- a/src/modules/source/mod.rs +++ b/src/modules/source/mod.rs @@ -10,7 +10,7 @@ pub struct FileDatabase<'a> { pub trait WordSource { fn find_by_word(&self, word: &str) -> Result, ()>; fn insert_word(&mut self, word: Word) -> Result<(), ()>; - fn remove_word(&self, word: &str) -> Result<(), ()>; + fn remove_word(&self, word_id: i32) -> Result<(), ()>; fn edit_word(&mut self, word: Word) -> Result<(), ()>; fn get_all_words(&self) -> Vec; } @@ -43,19 +43,38 @@ impl<'a> WordSource for FileDatabase<'a> { } fn insert_word(&mut self, word: Word) -> Result<(), ()> { - // TODO: insert into db - Ok(()) + let result = self.connection.execute( + "INSERT INTO word (key, description) VALUES (?1, ?2)", + (word.0, word.1), + ); + if let Ok(_) = result { + return Ok(()); + } + Err(()) } fn edit_word(&mut self, word: Word) -> Result<(), ()> { Ok(()) } - fn remove_word(&self, word: &str) -> Result<(), ()> { + fn remove_word(&self, word_id: i32) -> Result<(), ()> { Ok(()) } fn get_all_words(&self) -> Vec { - vec![] + let statement = self.connection.prepare("select key, description from word"); + let mut word_list: Vec = vec![]; + + // TODO: make this pretty with functional programming + if let Ok(mut query) = statement { + let mut rows = query.query([]).unwrap(); + while let Some(row) = rows.next().unwrap() { + let found_word: String = row.get(0).unwrap(); + let found_word_description: String = row.get(0).unwrap(); + word_list.push(Word(found_word, found_word_description)); + } + } + + word_list } }