use std::cmp::Eq; use std::hash::Hash; use std::ops::Add; #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)] pub struct Vector2D<T> { x: T, y: T, } impl<T> Vector2D<T> { pub fn new(x: T, y: T) -> Vector2D<T> { Vector2D { x, y } } pub fn x(&self) -> &T { &self.x } pub fn y(&self) -> &T { &self.y } } impl<T: Add + Add<Output = U>, U> Add for Vector2D<T> { type Output = Vector2D<U>; fn add(self, rhs: Self) -> Self::Output { Vector2D { x: self.x + rhs.x, y: self.y + rhs.y, } } }