use serde::{Serialize, Deserialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum DataType {
Image,
Text,
Audio,
Video,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Vector<T> {
vector: Vec<f32>,
data: T,
data_type: DataType,
}
pub trait VectorOperations<T> {
fn get_vector(&self) -> Vec<f32>;
fn get_data(&self) -> &T;
fn get_data_type(&self) -> DataType;
fn get_dimensionality(&self) -> usize {
self.get_vector().len()
}
fn overwrite_vector(&mut self, vector: Vec<f32>);
}
impl<T> VectorOperations<T> for Vector<T> {
fn get_vector(&self) -> Vec<f32> {
self.vector.clone()
}
fn get_data_type(&self) -> DataType {
self.data_type
}
fn get_data(&self) -> &T {
&self.data
}
fn overwrite_vector(&mut self, vector: Vec<f32>) {
self.vector = vector;
}
}
impl<DynamicImage> Vector<DynamicImage> {
pub fn from_image(data: DynamicImage) -> Self {
Self {
vector: vec![],
data,
data_type: DataType::Image,
}
}
}
impl<String> Vector<String> {
pub fn from_text(data: String) -> Self {
Self {
vector: vec![],
data,
data_type: DataType::Text,
}
}
}