use std::ops::Add; pub struct Triangle([T; 3]); impl Triangle where T: Add + PartialOrd + Copy, { pub fn build(sides: [T; 3]) -> Option> { Some(Triangle(sides)) .filter(|_| sides[0] + sides[1] > sides[2]) .filter(|_| sides[1] + sides[2] > sides[0]) .filter(|_| sides[0] + sides[2] > sides[1]) } pub fn is_equilateral(&self) -> bool { self.0[0] == self.0[1] && self.0[1] == self.0[2] } pub fn is_scalene(&self) -> bool { self.0[0] != self.0[1] && self.0[1] != self.0[2] && self.0[0] != self.0[2] } pub fn is_isosceles(&self) -> bool { !(self.is_equilateral() || self.is_scalene()) } }