Added new function to DataType
This commit is contained in:
		@@ -7,25 +7,72 @@ use std::{error::Error, fmt};
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const ENTRY: &str = "EntryPoint";
 | 
					const ENTRY: &str = "EntryPoint";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Debug)]
 | 
				
			||||||
 | 
					enum ErrorCode {
 | 
				
			||||||
 | 
					    Undefined(String),
 | 
				
			||||||
 | 
					    IncorrectDataType(String),
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl fmt::Display for ErrorCode {
 | 
				
			||||||
 | 
					    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
				
			||||||
 | 
					        match self {
 | 
				
			||||||
 | 
					            ErrorCode::Undefined(msg) => write!(f, "{}", msg),
 | 
				
			||||||
 | 
					            ErrorCode::IncorrectDataType(item) => write!(f, "data type '{}' does not exist", item),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mod errorcodes {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const ITEMS: [&str; 2] = ["one", "two"];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn undefined_display() {
 | 
				
			||||||
 | 
					        for item in ITEMS {
 | 
				
			||||||
 | 
					            let err = ErrorCode::Undefined(item.to_string());
 | 
				
			||||||
 | 
					            assert_eq!(err.to_string(), item);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn incorrect_data_type() {
 | 
				
			||||||
 | 
					        for item in ITEMS {
 | 
				
			||||||
 | 
					            let err = ErrorCode::IncorrectDataType(item.to_string());
 | 
				
			||||||
 | 
					            assert_eq!(
 | 
				
			||||||
 | 
					                err.to_string(),
 | 
				
			||||||
 | 
					                format!("data type '{}' does not exist", item)
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Debug)]
 | 
					#[derive(Debug)]
 | 
				
			||||||
pub struct MTTError {
 | 
					pub struct MTTError {
 | 
				
			||||||
    msg: String,
 | 
					    code: ErrorCode,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl MTTError {
 | 
					impl MTTError {
 | 
				
			||||||
    fn new<S>(msg: S) -> Self where S: Into<String> {
 | 
					    fn new<S>(msg: S) -> Self
 | 
				
			||||||
 | 
					    where
 | 
				
			||||||
 | 
					        S: Into<String>,
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        let text = msg.into();
 | 
					        let text = msg.into();
 | 
				
			||||||
        Self {
 | 
					        Self {
 | 
				
			||||||
            msg: text,
 | 
					            code: ErrorCode::Undefined(text),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fn from_code(code: ErrorCode) -> Self {
 | 
				
			||||||
 | 
					        Self { code: code }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl Error for MTTError {}
 | 
					impl Error for MTTError {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl fmt::Display for MTTError {
 | 
					impl fmt::Display for MTTError {
 | 
				
			||||||
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
					    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
				
			||||||
        write!(f, "{}", self.msg)
 | 
					        write!(f, "{}", self.code)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -48,16 +95,91 @@ mod errors {
 | 
				
			|||||||
        let err = MTTError::new(msg.to_string());
 | 
					        let err = MTTError::new(msg.to_string());
 | 
				
			||||||
        assert_eq!(err.to_string(), msg);
 | 
					        assert_eq!(err.to_string(), msg);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn create_from_code() {
 | 
				
			||||||
 | 
					        let code = ErrorCode::Undefined("oops".to_string());
 | 
				
			||||||
 | 
					        let err = MTTError::from_code(code);
 | 
				
			||||||
 | 
					        match err.code {
 | 
				
			||||||
 | 
					            ErrorCode::Undefined(_) => (),
 | 
				
			||||||
 | 
					            _ => assert!(false, "{:?} is not undefined", err.code),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn create_from_different_code() {
 | 
				
			||||||
 | 
					        let code = ErrorCode::IncorrectDataType("nuts".to_string());
 | 
				
			||||||
 | 
					        let err = MTTError::from_code(code);
 | 
				
			||||||
 | 
					        match err.code {
 | 
				
			||||||
 | 
					            ErrorCode::IncorrectDataType(_) => (),
 | 
				
			||||||
 | 
					            _ => assert!(false, "{:?} is not incorrect data type", err.code),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Clone)]
 | 
					#[derive(Clone, Debug)]
 | 
				
			||||||
struct Store;
 | 
					struct Store;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Clone)]
 | 
					impl Store {
 | 
				
			||||||
 | 
					    fn new() -> Self {
 | 
				
			||||||
 | 
					        Self {}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod stores {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn create() {
 | 
				
			||||||
 | 
					        Store::new();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[derive(Clone, Debug)]
 | 
				
			||||||
enum DataType {
 | 
					enum DataType {
 | 
				
			||||||
    DBMap(Store),
 | 
					    DBMap(Store),
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					impl DataType {
 | 
				
			||||||
 | 
					    fn new(dtype: &str) -> Result<DataType, MTTError> {
 | 
				
			||||||
 | 
					        match dtype {
 | 
				
			||||||
 | 
					            "store" => Ok(Self::DBMap(Store::new())),
 | 
				
			||||||
 | 
					            _ => Err(MTTError::from_code(ErrorCode::IncorrectDataType(
 | 
				
			||||||
 | 
					                dtype.to_string(),
 | 
				
			||||||
 | 
					            ))),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod datatypes {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn error_on_bad_datatype() {
 | 
				
			||||||
 | 
					        let items = ["sdgthsth", "jfjty"];
 | 
				
			||||||
 | 
					        for item in items {
 | 
				
			||||||
 | 
					            match DataType::new(item) {
 | 
				
			||||||
 | 
					                Ok(_) => assert!(false, "bad data types should return an error"),
 | 
				
			||||||
 | 
					                Err(err) => match err.code {
 | 
				
			||||||
 | 
					                    ErrorCode::IncorrectDataType(dtype) => assert_eq!(dtype, item),
 | 
				
			||||||
 | 
					                    _ => assert!(false, "{:?} is not incorrect data type", err.code),
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[test]
 | 
				
			||||||
 | 
					    fn create_store() {
 | 
				
			||||||
 | 
					        let dtype = DataType::new("store").unwrap();
 | 
				
			||||||
 | 
					        match dtype {
 | 
				
			||||||
 | 
					            DataType::DBMap(_) => (),
 | 
				
			||||||
 | 
					            _ => assert!(false, "{:?} is not incorrect data type", dtype),
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Clone)]
 | 
					#[derive(Clone)]
 | 
				
			||||||
pub struct MoreThanText {
 | 
					pub struct MoreThanText {
 | 
				
			||||||
    session: Vec<String>,
 | 
					    session: Vec<String>,
 | 
				
			||||||
@@ -65,11 +187,23 @@ pub struct MoreThanText {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl MoreThanText {
 | 
					impl MoreThanText {
 | 
				
			||||||
 | 
					    async fn new() {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async fn get_entry(&self, id: String) {
 | 
					    async fn get_entry(&self, id: String) {
 | 
				
			||||||
        self.channel.send(id).await.unwrap();
 | 
					        self.channel.send(id).await.unwrap();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[cfg(test)]
 | 
				
			||||||
 | 
					mod mtt {
 | 
				
			||||||
 | 
					    use super::*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #[async_std::test]
 | 
				
			||||||
 | 
					    async fn create() {
 | 
				
			||||||
 | 
					        MoreThanText::new().await;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub async fn start_db<P>(dir: P) -> Result<MoreThanText, MTTError>
 | 
					pub async fn start_db<P>(dir: P) -> Result<MoreThanText, MTTError>
 | 
				
			||||||
where
 | 
					where
 | 
				
			||||||
    P: Into<PathBuf>,
 | 
					    P: Into<PathBuf>,
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user