Added db session.
This commit is contained in:
parent
3ca71733c2
commit
ca418136a7
@ -1,5 +1,6 @@
|
|||||||
mod databases;
|
mod databases;
|
||||||
pub mod error;
|
pub mod error;
|
||||||
|
mod session;
|
||||||
|
|
||||||
use async_std::{
|
use async_std::{
|
||||||
fs::{create_dir, read, remove_file, write},
|
fs::{create_dir, read, remove_file, write},
|
||||||
@ -10,6 +11,7 @@ use async_std::{
|
|||||||
use databases::Databases;
|
use databases::Databases;
|
||||||
use error::DBError;
|
use error::DBError;
|
||||||
use rand::{distributions::Alphanumeric, thread_rng, Rng};
|
use rand::{distributions::Alphanumeric, thread_rng, Rng};
|
||||||
|
use session::Session;
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashMap,
|
collections::HashMap,
|
||||||
fmt, slice, str,
|
fmt, slice, str,
|
||||||
@ -130,7 +132,7 @@ impl fmt::Display for CacheEntry {
|
|||||||
pub struct MoreThanText {
|
pub struct MoreThanText {
|
||||||
cache: Arc<Mutex<HashMap<String, CacheEntry>>>,
|
cache: Arc<Mutex<HashMap<String, CacheEntry>>>,
|
||||||
dir: String,
|
dir: String,
|
||||||
entry: String,
|
session: Session,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MoreThanText {
|
impl MoreThanText {
|
||||||
@ -149,7 +151,7 @@ impl MoreThanText {
|
|||||||
let mut output = Self {
|
let mut output = Self {
|
||||||
cache: Arc::new(Mutex::new(HashMap::new())),
|
cache: Arc::new(Mutex::new(HashMap::new())),
|
||||||
dir: data_dir.to_str().unwrap().to_string(),
|
dir: data_dir.to_str().unwrap().to_string(),
|
||||||
entry: "undeclared".to_string(),
|
session: Session::new(),
|
||||||
};
|
};
|
||||||
let entry_file = Path::new(dir).join(ENTRY);
|
let entry_file = Path::new(dir).join(ENTRY);
|
||||||
let id: String;
|
let id: String;
|
||||||
@ -163,7 +165,7 @@ impl MoreThanText {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
write(entry_file, id.as_bytes()).await.unwrap();
|
write(entry_file, id.as_bytes()).await.unwrap();
|
||||||
}
|
}
|
||||||
output.entry = id;
|
output.session.push(id);
|
||||||
let looper = output.cache.clone();
|
let looper = output.cache.clone();
|
||||||
spawn(async move {
|
spawn(async move {
|
||||||
let hold_time = Duration::from_secs(300);
|
let hold_time = Duration::from_secs(300);
|
||||||
@ -341,7 +343,7 @@ mod init {
|
|||||||
let id = str::from_utf8(&data).unwrap();
|
let id = str::from_utf8(&data).unwrap();
|
||||||
let cache = db.get_entry(&id).await.unwrap();
|
let cache = db.get_entry(&id).await.unwrap();
|
||||||
assert_eq!(cache.data.entry_type(), "DBMap");
|
assert_eq!(cache.data.entry_type(), "DBMap");
|
||||||
assert_eq!(db.entry, id);
|
assert_eq!(db.session.get_data(), [id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[async_std::test]
|
#[async_std::test]
|
||||||
@ -353,7 +355,11 @@ mod init {
|
|||||||
let db2 = MoreThanText::new(dir.path().to_str().unwrap())
|
let db2 = MoreThanText::new(dir.path().to_str().unwrap())
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.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."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
62
src/morethantext/session.rs
Normal file
62
src/morethantext/session.rs
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#[derive(Clone)]
|
||||||
|
pub struct Session {
|
||||||
|
data: Vec<String>,
|
||||||
|
error: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
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<String>) {
|
||||||
|
self.data.append(&mut data);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_data(&self) -> Vec<String> {
|
||||||
|
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<String> = 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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user