use context_attribute::context;
use failure::{ensure, ResultExt};
#[context]
fn square(num: usize) -> Result<usize, failure::Error> {
ensure!(num < 10, "Number was too large");
Ok(num * num)
}
fn main() -> Result<(), failure::Error> {
let args = std::env::args();
ensure!(args.len() == 2, "usage: square <num>");
let input = args.skip(1).next().unwrap().parse()?;
println!("result is {}", square(input)?);
Ok(())
}