use std::fmt::Debug;
use std::ops::{Add, Sub};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Point2d<T: Copy + PartialOrd + PartialEq + Debug + Add + Sub> {
pub x: T,
pub y: T,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct Point3d<T: Copy + PartialOrd + PartialEq + Debug + Add + Sub> {
pub x: T,
pub y: T,
pub z: T,
}
impl<T: Copy + PartialOrd + PartialEq + Debug + Add + Sub> Point2d<T> {
pub fn new(x: T, y: T) -> Self {
Point2d { x, y }
}
pub fn x(&self) -> T {
self.x
}
pub fn y(&self) -> T {
self.y
}
}
impl<T: Copy + PartialOrd + PartialEq + Debug + Add + Sub> Point3d<T> {
pub fn new(x: T, y: T, z: T) -> Self {
Point3d { x, y, z }
}
pub fn x(&self) -> T {
self.x
}
pub fn y(&self) -> T {
self.y
}
pub fn z(&self) -> T {
self.z
}
}