# 2.3 FizzBuzz

This example is not the traditional [FizzBuzz](https://en.wikipedia.org/wiki/Fizz_buzz#Programming); instead it is the smart contract version! A script can call the `fizzbuzz` ABI method of this contract with some `u64` value and receive back its fizzbuzzability as an `enum`.

这个例子不是传统的 [FizzBu​​zz](https://en.wikipedia.org/wiki/Fizz_buzz#Programming)；相反，它是智能合约的版本！脚本可以使用一些 `u64` 值调用此合约的 `fizzbuzz` ABI 方法，并将其 `fizzbuzzability` 作为 `enum` 返回。

The format for custom structs and enums such as `FizzBuzzResult` will be automatically included in the ABI JSON so that off-chain code can handle the encoded form of the returned data.

`FizzBu​​zzResult` 等自定义结构和枚举的格式，将自动包含在 ABI JSON 中，以便链下代码可以处理返回数据的编码形式。

```
contract;

enum FizzBuzzResult {
    Fizz: (),
    Buzz: (),
    FizzBuzz: (),
    Other: u64,
}

abi FizzBuzz {
    fn fizzbuzz(input: u64) -> FizzBuzzResult;
}

impl FizzBuzz for Contract {
    fn fizzbuzz(input: u64) -> FizzBuzzResult {
        if input % 15 == 0 {
            FizzBuzzResult::FizzBuzz
        } else if input % 3 == 0 {
            FizzBuzzResult::Fizz
        } else if input % 5 == 0 {
            FizzBuzzResult::Buzz
        } else {
            FizzBuzzResult::Other(input)
        }
    }
}

```
