
The Oysters and the Rustacean
fn main() {
let mut oysters = vec![
Oyster { size: OysterSize::Large, state: OysterState::Unaware },
Oyster { size: OysterSize::Medium, state: OysterState::Unaware },
// ... add more oysters of different sizes and states as needed
];
println!("O Oysters,' said the Carpenter,");
println!("You've had a pleasant run!");
println!("Shall we be trotting home again?'");
// Consume the oysters
for oyster in oysters.iter_mut() {
oyster.state = OysterState::Eaten;
}
let remaining_oysters: Vec<&Oyster> = oysters
.iter()
.filter(|oyster| oyster.state == OysterState::Unaware)
.collect();
println!("But answer came there none —");
if remaining_oysters.is_empty() {
println!("And this was scarcely odd, because");
println!("They'd eaten every one.");
}
}
enum OysterState {
Unaware,
Eaten,
// Add more states as needed
}
enum OysterSize {
Small,
Medium,
Large,
// Add more sizes as needed
}
struct Oyster {
size: OysterSize,
state: OysterState,
}