eonj - Overview

macro_rules! fizzbuzz_unit {
    ( $n:expr ) => {
        match ($n % 5, $n % 3) {
            (0, 0) => String::from("FizzBuzz"),
            (0, _) => String::from("Buzz"),
            (_, 0) => String::from("Fizz"),
            (_, _) => format!("{}", $n),
        }
    }
}

macro_rules! fizzbuzz {
    ( $m:expr, $o:expr ) => {
        for n in 1..=($m) {
            $o(fizzbuzz_unit!(n))
        }
    }
}

fn printer(s: String) {
    println!("{}", s)
}

fn main() {
    fizzbuzz!(100, printer)
}