Continuing channel setup.
This commit is contained in:
		@@ -1,3 +1,4 @@
 | 
				
			|||||||
 | 
					use super::{ErrorCode, MTTError, Store, ENTRY};
 | 
				
			||||||
use async_std::{channel::Receiver, path::PathBuf};
 | 
					use async_std::{channel::Receiver, path::PathBuf};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct Cache;
 | 
					pub struct Cache;
 | 
				
			||||||
@@ -15,6 +16,18 @@ impl Cache {
 | 
				
			|||||||
            listener.recv().await.unwrap();
 | 
					            listener.recv().await.unwrap();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn get<S>(&self, id: S) -> Result<Store, MTTError>
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					        S: Into<String>,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        let idd = id.into();
 | 
				
			||||||
 | 
					        if idd == ENTRY {
 | 
				
			||||||
 | 
					            Ok(Store::new())
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            Err(MTTError::from_code(ErrorCode::IDNotFound(idd)))
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[cfg(test)]
 | 
					#[cfg(test)]
 | 
				
			||||||
@@ -23,8 +36,50 @@ mod engine {
 | 
				
			|||||||
    use tempfile::tempdir;
 | 
					    use tempfile::tempdir;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #[async_std::test]
 | 
					    #[async_std::test]
 | 
				
			||||||
    async fn create() {
 | 
					    async fn get_entry() {
 | 
				
			||||||
        let dir = tempdir().unwrap();
 | 
					        let dir = tempdir().unwrap();
 | 
				
			||||||
        Cache::new(dir.path()).await;
 | 
					        let cache = Cache::new(dir.path()).await;
 | 
				
			||||||
 | 
					        let store = cache.get(ENTRY).unwrap();
 | 
				
			||||||
 | 
					        let expected: Vec<String> = Vec::new();
 | 
				
			||||||
 | 
					        assert_eq!(store.list(), expected);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[async_std::test]
 | 
				
			||||||
 | 
					    async fn get_bad_entry() -> Result<(), MTTError> {
 | 
				
			||||||
 | 
					        let dir = tempdir().unwrap();
 | 
				
			||||||
 | 
					        let cache = Cache::new(dir.path()).await;
 | 
				
			||||||
 | 
					        let ids = ["bad1", "bad2"];
 | 
				
			||||||
 | 
					        for id in ids {
 | 
				
			||||||
 | 
					            match cache.get(id) {
 | 
				
			||||||
 | 
					                Ok(_) => return Err(MTTError::new("should have errored")),
 | 
				
			||||||
 | 
					                Err(err) => match err.code {
 | 
				
			||||||
 | 
					                    ErrorCode::IDNotFound(_) => {
 | 
				
			||||||
 | 
					                        assert!(
 | 
				
			||||||
 | 
					                            err.to_string().contains(id),
 | 
				
			||||||
 | 
					                            "Had error: {}, Did not contain: {}",
 | 
				
			||||||
 | 
					                            err.to_string(),
 | 
				
			||||||
 | 
					                            id
 | 
				
			||||||
 | 
					                        );
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    _ => return Err(MTTError::new(format!("{:?} is not IDNotFound", err.code))),
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        Ok(())
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod messages {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					    use super::super::start_db;
 | 
				
			||||||
 | 
					    use tempfile::tempdir;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[async_std::test]
 | 
				
			||||||
 | 
					    async fn get_the_store() {
 | 
				
			||||||
 | 
					        let dir = tempdir().unwrap();
 | 
				
			||||||
 | 
					        let mtt = start_db(dir.path()).await.unwrap();
 | 
				
			||||||
 | 
					        let in_s = mtt.to_cache.clone();
 | 
				
			||||||
 | 
					        in_s.send(ENTRY.to_string()).await.unwrap();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,12 +4,15 @@ use std::{error::Error, fmt};
 | 
				
			|||||||
pub enum ErrorCode {
 | 
					pub enum ErrorCode {
 | 
				
			||||||
    // General
 | 
					    // General
 | 
				
			||||||
    Undefined(String),
 | 
					    Undefined(String),
 | 
				
			||||||
 | 
					    // Cache
 | 
				
			||||||
 | 
					    IDNotFound(String),
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl fmt::Display for ErrorCode {
 | 
					impl fmt::Display for ErrorCode {
 | 
				
			||||||
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
					    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
				
			||||||
        match self {
 | 
					        match self {
 | 
				
			||||||
            ErrorCode::Undefined(msg) => write!(f, "{}", msg),
 | 
					            ErrorCode::Undefined(msg) => write!(f, "{}", msg),
 | 
				
			||||||
 | 
					            ErrorCode::IDNotFound(id) => write!(f, "ID '{}' not found", id),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -26,15 +29,23 @@ mod errorcodes {
 | 
				
			|||||||
            assert_eq!(err.to_string(), item);
 | 
					            assert_eq!(err.to_string(), item);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn cache_missing() {
 | 
				
			||||||
 | 
					        for item in ITEMS {
 | 
				
			||||||
 | 
					            let err = ErrorCode::IDNotFound(item.to_string());
 | 
				
			||||||
 | 
					            assert_eq!(err.to_string(), format!("ID '{}' not found", item));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug)]
 | 
					#[derive(Debug)]
 | 
				
			||||||
pub struct MTTError {
 | 
					pub struct MTTError {
 | 
				
			||||||
    code: ErrorCode,
 | 
					    pub code: ErrorCode,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl MTTError {
 | 
					impl MTTError {
 | 
				
			||||||
    fn new<S>(msg: S) -> Self
 | 
					    pub fn new<S>(msg: S) -> Self
 | 
				
			||||||
    where
 | 
					    where
 | 
				
			||||||
        S: Into<String>,
 | 
					        S: Into<String>,
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -44,7 +55,7 @@ impl MTTError {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fn from_code(code: ErrorCode) -> Self {
 | 
					    pub fn from_code(code: ErrorCode) -> Self {
 | 
				
			||||||
        Self { code: code }
 | 
					        Self { code: code }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -86,4 +97,14 @@ mod errors {
 | 
				
			|||||||
            _ => assert!(false, "{:?} is not undefined", err.code),
 | 
					            _ => assert!(false, "{:?} is not undefined", err.code),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn create_missing_id_from_code() {
 | 
				
			||||||
 | 
					        let code = ErrorCode::IDNotFound("123".to_string());
 | 
				
			||||||
 | 
					        let err = MTTError::from_code(code);
 | 
				
			||||||
 | 
					        match err.code {
 | 
				
			||||||
 | 
					            ErrorCode::IDNotFound(_) => (),
 | 
				
			||||||
 | 
					            _ => assert!(false, "{:?} is not undefined", err.code),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user