Removed Field2. Bad experiment.
This commit is contained in:
		
							
								
								
									
										188
									
								
								src/field.rs
									
									
									
									
									
								
							
							
						
						
									
										188
									
								
								src/field.rs
									
									
									
									
									
								
							@@ -12,194 +12,6 @@ enum FieldType {
 | 
			
		||||
    Uuid,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone)]
 | 
			
		||||
struct Field2<T> {
 | 
			
		||||
    data: T,
 | 
			
		||||
    field_type: FieldType,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T> Field2<T> {
 | 
			
		||||
    fn data(&self) -> &T {
 | 
			
		||||
        &self.data
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn get_type(&self) -> &FieldType {
 | 
			
		||||
        &self.field_type
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<&str> for Field2<String> {
 | 
			
		||||
    fn from(value: &str) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            data: value.to_string(),
 | 
			
		||||
            field_type: FieldType::StaticString,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<ActionType> for Field2<ActionType> {
 | 
			
		||||
    fn from(value: ActionType) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            data: value,
 | 
			
		||||
            field_type: FieldType::Action,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<DateTime<Utc>> for Field2<DateTime<Utc>> {
 | 
			
		||||
    fn from(value: DateTime<Utc>) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            data: value,
 | 
			
		||||
            field_type: FieldType::DateTime,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<ErrorType> for Field2<ErrorType> {
 | 
			
		||||
    fn from(value: ErrorType) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            data: value,
 | 
			
		||||
            field_type: FieldType::Error,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<String> for Field2<String> {
 | 
			
		||||
    fn from(value: String) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            data: value,
 | 
			
		||||
            field_type: FieldType::StaticString,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<Uuid> for Field2<Uuid>  {
 | 
			
		||||
    fn from(value: Uuid) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            data: value,
 | 
			
		||||
            field_type: FieldType::Uuid,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFrom<&str> for Field2<Uuid> {
 | 
			
		||||
    type Error = String;
 | 
			
		||||
 | 
			
		||||
    fn try_from(value: &str) -> Result<Self, Self::Error> {
 | 
			
		||||
        match Uuid::try_from(value) {
 | 
			
		||||
            Ok(data) => Ok(Self {
 | 
			
		||||
                data: data.clone(),
 | 
			
		||||
                field_type: FieldType::Uuid,
 | 
			
		||||
            }),
 | 
			
		||||
            Err(err) => Err(err.to_string()),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFrom<String> for Field2<Uuid> {
 | 
			
		||||
    type Error = String;
 | 
			
		||||
 | 
			
		||||
    fn try_from(value: String) -> Result<Self, Self::Error> {
 | 
			
		||||
        match Uuid::try_from(value.as_str()) {
 | 
			
		||||
            Ok(data) => Ok(Self {
 | 
			
		||||
                data: data.clone(),
 | 
			
		||||
                field_type: FieldType::Uuid,
 | 
			
		||||
            }),
 | 
			
		||||
            Err(err) => Err(err.to_string()),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[cfg(test)]
 | 
			
		||||
mod field2s {
 | 
			
		||||
    use super::*;
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn from_action_to_field() {
 | 
			
		||||
        let actions = [ActionType::Add, ActionType::Update];
 | 
			
		||||
        for expected in actions.into_iter() {
 | 
			
		||||
            let field: Field2<ActionType> = expected.clone().into();
 | 
			
		||||
            assert_eq!(field.get_type(), &FieldType::Action);
 | 
			
		||||
            assert_eq!(field.data(), &expected);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn from_datetime_to_field() {
 | 
			
		||||
        let expected = Utc::now();
 | 
			
		||||
        let field: Field2<DateTime<Utc>> = expected.into();
 | 
			
		||||
        assert_eq!(field.get_type(), &FieldType::DateTime);
 | 
			
		||||
        assert_eq!(field.data(), &expected);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn from_error_to_field() {
 | 
			
		||||
        let errors = [ErrorType::DocumentAlreadyExists, ErrorType::DocumentInvalidRequest];
 | 
			
		||||
        for expected in errors.into_iter() {
 | 
			
		||||
            let field: Field2<ErrorType> = expected.clone().into();
 | 
			
		||||
            assert_eq!(field.get_type(), &FieldType::Error);
 | 
			
		||||
            assert_eq!(field.data(), &expected);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn from_str_to_field() {
 | 
			
		||||
        let expected = format!("string-{}", Uuid::new_v4());
 | 
			
		||||
        let field: Field2<String> = expected.as_str().into();
 | 
			
		||||
        assert_eq!(field.get_type(), &FieldType::StaticString);
 | 
			
		||||
        assert_eq!(field.data(), &expected);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn from_string_to_field() {
 | 
			
		||||
        let expected = format!("string-{}", Uuid::new_v4());
 | 
			
		||||
        let field: Field2<String> = expected.clone().into();
 | 
			
		||||
        assert_eq!(field.get_type(), &FieldType::StaticString);
 | 
			
		||||
        assert_eq!(field.data(), &expected);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn from_uuid_to_field() {
 | 
			
		||||
        let expected = Uuid::new_v4();
 | 
			
		||||
        let field: Field2<Uuid> = expected.into();
 | 
			
		||||
        assert_eq!(field.get_type(), &FieldType::Uuid);
 | 
			
		||||
        assert_eq!(field.data(), &expected);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn from_uuid_str_to_field() {
 | 
			
		||||
        let expected = Uuid::new_v4();
 | 
			
		||||
        let field: Field2<Uuid> = expected.to_string().as_str().try_into().unwrap();
 | 
			
		||||
        assert_eq!(field.get_type(), &FieldType::Uuid);
 | 
			
		||||
        assert_eq!(field.data(), &expected);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn from_uuid_bad_str_fails() {
 | 
			
		||||
        let expected = "Not a uuid";
 | 
			
		||||
        let result: Result<Field2<Uuid>, String> = expected.try_into();
 | 
			
		||||
        assert!(result.is_err(), "should have been an error");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn from_uuid_string_to_field() {
 | 
			
		||||
        let expected = Uuid::new_v4();
 | 
			
		||||
        let field: Field2<Uuid> = expected.to_string().try_into().unwrap();
 | 
			
		||||
        assert_eq!(field.get_type(), &FieldType::Uuid);
 | 
			
		||||
        assert_eq!(field.data(), &expected);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #[test]
 | 
			
		||||
    fn from_uuid_bad_string_fails() {
 | 
			
		||||
        let expected = "Not a uuid".to_string();
 | 
			
		||||
        let result: Result<Field2<Uuid>, String> = expected.try_into();
 | 
			
		||||
        assert!(result.is_err(), "should have been an error");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug)]
 | 
			
		||||
pub enum Field {
 | 
			
		||||
    Action(ActionType),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user