Added id generator.
This commit is contained in:
parent
4b0af019c8
commit
6d61af5136
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user