s3find 0.16.1

A command line utility to walk an Amazon S3 hierarchy. s3find is an analog of find for Amazon S3.
Documentation
use std::fs;
use std::io::{self, Write};
use std::process::exit;

use clap::CommandFactory;
use clap_complete::aot::{Shell, generate};

include!("src/arg.rs");

fn main() {
    if !version_check::is_min_version("1.31").unwrap_or(false) {
        writeln!(&mut io::stderr(), "This crate requires rustc >= 1.31").unwrap();
        exit(1);
    }

    let var = std::env::var_os("SHELL_COMPLETIONS_DIR").or_else(|| std::env::var_os("OUT_DIR"));
    let outdir = match var {
        None => return,
        Some(outdir) => std::path::PathBuf::from(outdir),
    };
    fs::create_dir_all(&outdir).unwrap();

    let mut cmd = FindOpt::command();
    let name = cmd.get_name().to_string();

    eprintln!("Generating completion file ...");
    generate(
        Shell::Bash,
        &mut cmd,
        &name,
        &mut fs::File::create(outdir.join(format!("{}.bash", &name))).unwrap(),
    );
    generate(
        Shell::Elvish,
        &mut cmd,
        &name,
        &mut fs::File::create(outdir.join(format!("{}.elvish", &name))).unwrap(),
    );
    generate(
        Shell::Fish,
        &mut cmd,
        &name,
        &mut fs::File::create(outdir.join(format!("{}.fish", &name))).unwrap(),
    );
    generate(
        Shell::Zsh,
        &mut cmd,
        &name,
        &mut fs::File::create(outdir.join(format!("{}.zsh", &name))).unwrap(),
    );
    generate(
        Shell::PowerShell,
        &mut cmd,
        &name,
        &mut fs::File::create(outdir.join(format!("{}.ps1", &name))).unwrap(),
    );
}