use crate::ser::{Ser, Sink, Source}; #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)] pub struct Vec2 { pub x: isize, pub y: isize, } impl Vec2 { pub const ZERO: Vec2 = Vec2 { x: 0, y: 0 }; } impl Ser for Vec2 { fn write(&self, sink: &mut impl std::io::Write) -> anyhow::Result<()> { sink.put((self.x, self.y)) } fn read(source: &mut impl std::io::Read) -> anyhow::Result { let (x, y) = source.get()?; Ok(Vec2 { x, y }) } } impl std::ops::Add for Vec2 { type Output = Vec2; #[inline] fn add(self, rhs: Self) -> Self::Output { Vec2 { x: self.x + rhs.x, y: self.y + rhs.y, } } } impl std::ops::Sub for Vec2 { type Output = Vec2; #[inline] fn sub(self, rhs: Self) -> Self::Output { Vec2 { x: self.x - rhs.x, y: self.y - rhs.y, } } } impl std::ops::Mul for Vec2 { type Output = Vec2; #[inline] fn mul(self, rhs: Self) -> Self::Output { Vec2 { x: self.x * rhs.x, y: self.y * rhs.y, } } } impl From<(isize, isize)> for Vec2 { #[inline] fn from((x, y): (isize, isize)) -> Self { Vec2 { x, y } } }