| //@ edition:2021 |
| //@check-pass |
| |
| #[derive(Copy, Clone)] |
| enum PointType { |
| TwoD(u32, u32), |
| ThreeD(u32, u32, u32) |
| } |
| |
| // Testing tuple struct patterns |
| struct Points { |
| points: Vec<PointType>, |
| } |
| |
| impl Points { |
| pub fn test1(&mut self) -> Vec<usize> { |
| (0..self.points.len()) |
| .filter_map(|i| { |
| match self.test2(i) { |
| PointType::TwoD (..) => Some(i), |
| PointType::ThreeD (..) => None, |
| } |
| }) |
| .collect() |
| } |
| |
| pub fn test2(&mut self, i: usize) -> PointType { |
| self.points[i] |
| } |
| } |
| |
| fn main() { |
| let mut points = Points { |
| points: Vec::<PointType>::new() |
| }; |
| |
| points.points.push(PointType::ThreeD(0,0,0)); |
| points.points.push(PointType::TwoD(0,0)); |
| points.points.push(PointType::ThreeD(0,0,1)); |
| points.points.push(PointType::TwoD(0,1)); |
| |
| println!("{:?}", points.test1()); |
| } |