// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This is the "library code" tested in this example.
// Compare with https://llvm.org/docs/LibFuzzer.html#toy-example
use {fuzz::fuzz, helper::toy_example};

// Imports that are only used by `main` needs to be conditional included.
#[cfg(not(fuzz))]
use std::io::{self, Read};

// Conditionally include `main`, allowing it to be omitted when provided by a compiler runtime.
#[cfg(not(fuzz))]
fn main() -> io::Result<()> {
    let mut s = String::new();
    io::stdin().read_to_string(&mut s)?;
    let _ = toy_example(s);
    Ok(())
}

// This is the "fuzzer code" for the binary code above.
// It can typically be placed alongside that code and will only be compiled when fuzzing.
#[cfg(fuzz)]
use helper::add_bang;

#[fuzz]
fn toy_example_with_main(input: String) {
    let _ = toy_example(add_bang(input));
}
