From ca418136a7ac8dc964771299ec01d6a38c480b07 Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Wed, 1 Feb 2023 07:59:15 -0500 Subject: [PATCH] Added db session. --- src/morethantext/mod.rs | 16 +++++++--- src/morethantext/session.rs | 62 +++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 src/morethantext/session.rs diff --git a/src/morethantext/mod.rs b/src/morethantext/mod.rs index f90fb50..80c9ffa 100644 --- a/src/morethantext/mod.rs +++ b/src/morethantext/mod.rs @@ -1,5 +1,6 @@ mod databases; pub mod error; +mod session; use async_std::{ fs::{create_dir, read, remove_file, write}, @@ -10,6 +11,7 @@ use async_std::{ use databases::Databases; use error::DBError; use rand::{distributions::Alphanumeric, thread_rng, Rng}; +use session::Session; use std::{ collections::HashMap, fmt, slice, str, @@ -130,7 +132,7 @@ impl fmt::Display for CacheEntry { pub struct MoreThanText { cache: Arc>>, dir: String, - entry: String, + session: Session, } impl MoreThanText { @@ -149,7 +151,7 @@ impl MoreThanText { let mut output = Self { cache: Arc::new(Mutex::new(HashMap::new())), dir: data_dir.to_str().unwrap().to_string(), - entry: "undeclared".to_string(), + session: Session::new(), }; let entry_file = Path::new(dir).join(ENTRY); let id: String; @@ -163,7 +165,7 @@ impl MoreThanText { .unwrap(); write(entry_file, id.as_bytes()).await.unwrap(); } - output.entry = id; + output.session.push(id); let looper = output.cache.clone(); spawn(async move { let hold_time = Duration::from_secs(300); @@ -341,7 +343,7 @@ mod init { let id = str::from_utf8(&data).unwrap(); let cache = db.get_entry(&id).await.unwrap(); assert_eq!(cache.data.entry_type(), "DBMap"); - assert_eq!(db.entry, id); + assert_eq!(db.session.get_data(), [id]); } #[async_std::test] @@ -353,7 +355,11 @@ mod init { let db2 = MoreThanText::new(dir.path().to_str().unwrap()) .await .unwrap(); - assert_eq!(db1.entry, db2.entry, "Did not read existing entry."); + assert_eq!( + db1.session.get_data(), + db2.session.get_data(), + "Did not read existing entry." + ); } } diff --git a/src/morethantext/session.rs b/src/morethantext/session.rs new file mode 100644 index 0000000..037b13a --- /dev/null +++ b/src/morethantext/session.rs @@ -0,0 +1,62 @@ +#[derive(Clone)] +pub struct Session { + data: Vec, + error: Option, +} + +impl Session { + pub fn new() -> Self { + Self { + data: Vec::new(), + error: None, + } + } + + pub fn push(&mut self, id: String) { + self.data.push(id); + } + + pub fn append(&mut self, mut data: Vec) { + self.data.append(&mut data); + } + + pub fn get_data(&self) -> Vec { + self.data.clone() + } +} + +#[cfg(test)] +mod setup { + use super::*; + + #[test] + fn add_item() { + let mut sess = Session::new(); + let id = "frog".to_string(); + sess.push(id.clone()); + assert!(sess.data.contains(&id), "{} not in {:?}", id, sess.data); + } + + #[test] + fn add_list() { + let mut sess = Session::new(); + let mut data: Vec = Vec::new(); + data.push("fred".to_string()); + data.push("barney".to_string()); + sess.append(data.clone()); + assert_eq!(sess.data, data); + } +} + +#[cfg(test)] +mod data { + use super::*; + + #[test] + fn show_data() { + let data = ["pne".to_string(), "two".to_string(), "three".to_string()]; + let mut sess = Session::new(); + sess.append(data.to_vec()); + assert_eq!(sess.get_data(), data); + } +}