Added id generator.
This commit is contained in:
		@@ -7,11 +7,16 @@ use async_std::path::PathBuf;
 | 
				
			|||||||
use database::Database;
 | 
					use database::Database;
 | 
				
			||||||
use entry::Entry;
 | 
					use entry::Entry;
 | 
				
			||||||
use error::{DBError, ErrorCode};
 | 
					use error::{DBError, ErrorCode};
 | 
				
			||||||
 | 
					use rand::{distributions::Alphanumeric, thread_rng, Rng};
 | 
				
			||||||
use std::{slice, str};
 | 
					use std::{slice, str};
 | 
				
			||||||
use store::Store;
 | 
					use store::Store;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ENTRY: &str = "EntryPoint";
 | 
					const ENTRY: &str = "EntryPoint";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					trait ID {
 | 
				
			||||||
 | 
					    fn next(&self) -> String;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
trait FileData<F> {
 | 
					trait FileData<F> {
 | 
				
			||||||
    fn to_bytes(&self) -> Vec<u8>;
 | 
					    fn to_bytes(&self) -> Vec<u8>;
 | 
				
			||||||
    fn from_bytes(data: &mut slice::Iter<u8>) -> Result<F, DBError>;
 | 
					    fn from_bytes(data: &mut slice::Iter<u8>) -> Result<F, DBError>;
 | 
				
			||||||
@@ -107,6 +112,20 @@ impl FileData<Self> for DataType {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub struct IDs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl IDs {
 | 
				
			||||||
 | 
					    pub fn new() -> Self {
 | 
				
			||||||
 | 
					        Self {}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl ID for IDs {
 | 
				
			||||||
 | 
					    fn next(&self) -> String {
 | 
				
			||||||
 | 
					        thread_rng().sample_iter(&Alphanumeric).take(64).collect()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Clone)]
 | 
					#[derive(Clone)]
 | 
				
			||||||
pub struct MoreThanText {
 | 
					pub struct MoreThanText {
 | 
				
			||||||
    session: Vec<String>,
 | 
					    session: Vec<String>,
 | 
				
			||||||
@@ -141,6 +160,10 @@ impl MoreThanText {
 | 
				
			|||||||
    fn set_session(&mut self, sess: Vec<String>) {
 | 
					    fn set_session(&mut self, sess: Vec<String>) {
 | 
				
			||||||
        self.session = sess;
 | 
					        self.session = sess;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async fn new_entry(&self, _name: &str) -> Self {
 | 
				
			||||||
 | 
					        self.clone()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(test)]
 | 
					#[cfg(test)]
 | 
				
			||||||
@@ -302,6 +325,27 @@ mod datatype_file {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod ids {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn get_next() {
 | 
				
			||||||
 | 
					        let ids = IDs::new();
 | 
				
			||||||
 | 
					        let mut holder: Vec<String> = Vec::new();
 | 
				
			||||||
 | 
					        for _ in 0..10 {
 | 
				
			||||||
 | 
					            let id = ids.next();
 | 
				
			||||||
 | 
					            assert!(
 | 
				
			||||||
 | 
					                !holder.contains(&id),
 | 
				
			||||||
 | 
					                "No duplicates: found {} in {:?}",
 | 
				
			||||||
 | 
					                id,
 | 
				
			||||||
 | 
					                holder
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					            holder.push(id);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(test)]
 | 
					#[cfg(test)]
 | 
				
			||||||
mod db {
 | 
					mod db {
 | 
				
			||||||
    use super::*;
 | 
					    use super::*;
 | 
				
			||||||
@@ -381,4 +425,11 @@ mod db {
 | 
				
			|||||||
        mtt.set_session(sess.to_vec());
 | 
					        mtt.set_session(sess.to_vec());
 | 
				
			||||||
        assert_eq!(mtt.session, sess);
 | 
					        assert_eq!(mtt.session, sess);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[async_std::test]
 | 
				
			||||||
 | 
					    async fn add_a_database() {
 | 
				
			||||||
 | 
					        let dir = tempdir().unwrap();
 | 
				
			||||||
 | 
					        let mtt = MoreThanText::new(dir.path()).await.unwrap();
 | 
				
			||||||
 | 
					        mtt.new_entry("wilbur").await;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user