#[derive(Debug, Default, Clone)]
pub struct Vec3<T> {
pub x: T,
pub y: T,
pub z: T
}
impl Vec3<f64> {
pub fn to_tuple(&self) -> (f64, f64, f64) {
(self.x, self.y, self.z)
}
}
pub trait VectorConversion {
fn to_vec3<T>(&self) -> Vec3<T> where T: Default + Clone + From<f64> + From<i32> + From<u32>;
}
impl VectorConversion for Vec<f64> {
fn to_vec3<T>(&self) -> Vec3<T> where T: Default + Clone + From<f64> {
Vec3 { x: self[0].into(), y: self[1].into(), z: self[2].into() }
}
}
impl VectorConversion for Vec<i32> {
fn to_vec3<T>(&self) -> Vec3<T> where T: Default + Clone + From<i32> {
Vec3 { x: self[0].into(), y: self[1].into(), z: self[2].into() }
}
}
impl VectorConversion for Vec<u32> {
fn to_vec3<T>(&self) -> Vec3<T> where T: Default + Clone + From<u32> {
Vec3 { x: self[0].into(), y: self[1].into(), z: self[2].into() }
}
}