2021-06-27 01:22:46 -05:00
|
|
|
// edition:2021
|
2021-02-23 22:39:33 -06:00
|
|
|
//check-pass
|
|
|
|
|
|
|
|
#[derive(Copy, Clone)]
|
|
|
|
enum PointType {
|
|
|
|
TwoD(u32, u32),
|
|
|
|
ThreeD(u32, u32, u32)
|
|
|
|
}
|
|
|
|
|
2021-02-25 17:03:41 -06:00
|
|
|
// Testing tuple struct patterns
|
2021-02-23 22:39:33 -06:00
|
|
|
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());
|
|
|
|
}
|