use std::fmt;
use std::string::String;
enum FizzBuzz {
Fizz,
Buzz,
FizzBuzz,
Other(i32)
}
fn toFizzBuzz (x: &i32) -> FizzBuzz {
match x {
_ if *x % 3 == 0 && *x % 5 == 0 => FizzBuzz::FizzBuzz,
_ if *x % 3 == 0 => FizzBuzz::Fizz,
_ if *x % 5 == 0 => FizzBuzz::Buzz,
_ => FizzBuzz::Other(*x)
}
}
impl fmt::Display for FizzBuzz {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
f.write_fmt(format_args!("{}", match self {
&FizzBuzz::Fizz => String::from_str("Fizz"),
&FizzBuzz::Buzz => String::from_str("Buzz"),
&FizzBuzz::FizzBuzz => String::from_str("FizzBuzz"),
&FizzBuzz::Other(x) => x.to_string()
}));
return Ok(());
}
}
fn main () {
let input = vec![1, 3, 5, 15, 20, 21];
for x in input.iter().map(toFizzBuzz) {
println!("{}", x);
}
}
Comments