Forgotten file.
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				MoreThanText/morethantext/pipeline/head There was a failure building this commit
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	MoreThanText/morethantext/pipeline/head There was a failure building this commit
				
			This commit is contained in:
		
							
								
								
									
										118
									
								
								src/data/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								src/data/mod.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,118 @@
 | 
				
			|||||||
 | 
					pub mod database;
 | 
				
			||||||
 | 
					pub mod global;
 | 
				
			||||||
 | 
					pub mod id;
 | 
				
			||||||
 | 
					mod record;
 | 
				
			||||||
 | 
					pub mod table;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use std::collections::BTreeMap;
 | 
				
			||||||
 | 
					use uuid::Uuid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(PartialEq, Eq, Hash, PartialOrd, Ord, Clone, Debug)]
 | 
				
			||||||
 | 
					struct IDPath {
 | 
				
			||||||
 | 
					    path: Vec<Uuid>,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl IDPath {
 | 
				
			||||||
 | 
					    fn new() -> Self {
 | 
				
			||||||
 | 
					        let mut path = Vec::new();
 | 
				
			||||||
 | 
					        Self { path: path }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn next() -> Uuid {
 | 
				
			||||||
 | 
					        Uuid::new_v4()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn extend(&self, addition: Uuid) -> Self {
 | 
				
			||||||
 | 
					        let mut result = self.clone();
 | 
				
			||||||
 | 
					        result.path.push(addition);
 | 
				
			||||||
 | 
					        result
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn root(&self) -> Self {
 | 
				
			||||||
 | 
					        Self::new()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod ids {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn create_idpath() {
 | 
				
			||||||
 | 
					        let id = IDPath::new();
 | 
				
			||||||
 | 
					        assert_eq!(id.path.len(), 0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn next_is_random() {
 | 
				
			||||||
 | 
					        let mut ids: Vec<Uuid> = Vec::new();
 | 
				
			||||||
 | 
					        for _ in 0..10 {
 | 
				
			||||||
 | 
					            let id = IDPath::next();
 | 
				
			||||||
 | 
					            assert!(!ids.contains(&id), "{} is a duplicate", id);
 | 
				
			||||||
 | 
					            ids.push(id);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn extend_idpath() {
 | 
				
			||||||
 | 
					        let mut path: Vec<Uuid> = Vec::new();
 | 
				
			||||||
 | 
					        let mut id = IDPath::new();
 | 
				
			||||||
 | 
					        for _ in 1..5 {
 | 
				
			||||||
 | 
					            let extended = IDPath::next();
 | 
				
			||||||
 | 
					            id = id.extend(extended.clone());
 | 
				
			||||||
 | 
					            path.push(extended);
 | 
				
			||||||
 | 
					            assert_eq!(id.path, path);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn get_root() {
 | 
				
			||||||
 | 
					        let mut id = IDPath::new();
 | 
				
			||||||
 | 
					        id.root();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct Cache {
 | 
				
			||||||
 | 
					    data: BTreeMap<String, IDPath>,
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl Cache {
 | 
				
			||||||
 | 
					    fn new() -> Self {
 | 
				
			||||||
 | 
					        Self {
 | 
				
			||||||
 | 
					            data: BTreeMap::new(),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn add_database<S>(&mut self, name: S)
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					        S: Into<String>,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        self.data.insert(name.into(), IDPath::new());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn get_databases(&self) -> Vec<String> {
 | 
				
			||||||
 | 
					        self.data.keys().cloned().collect()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod caches {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn create_cache() {
 | 
				
			||||||
 | 
					        let cache = Cache::new();
 | 
				
			||||||
 | 
					        let dbs = cache.get_databases();
 | 
				
			||||||
 | 
					        assert!(dbs.is_empty());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn add_databases() {
 | 
				
			||||||
 | 
					        let mut cache = Cache::new();
 | 
				
			||||||
 | 
					        cache.add_database("zed");
 | 
				
			||||||
 | 
					        cache.add_database("alpha".to_string());
 | 
				
			||||||
 | 
					        cache.add_database("beta");
 | 
				
			||||||
 | 
					        cache.add_database("gamma".to_string());
 | 
				
			||||||
 | 
					        assert_eq!(cache.get_databases(), ["alpha", "beta", "gamma", "zed"]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user