cargo-generate 0.17.6

cargo, make me a project
Documentation
use std::path::PathBuf;

use anyhow::Result;
use cargo_generate::{generate, list_favorites, Cli};
use clap::Parser;

fn main() -> Result<()> {
    let args = resolve_args();

    if args.list_favorites {
        list_favorites(&args)?;
    } else {
        generate(args)?;
    }

    Ok(())
}

fn resolve_args() -> cargo_generate::GenerateArgs {
    let (args, other_args): (Vec<_>, Vec<_>) = {
        let mut before_other_args = true;
        std::env::args().partition(|a| {
            if before_other_args && a == "--test" {
                before_other_args = false;
                true
            } else {
                before_other_args
            }
        })
    };
    let Cli::Generate(mut args) = Cli::parse_from(args);
    args.other_args = Some(other_args);
    if args.template_path.test {
        args.template_path.path = Some(
            args.template_path
                .auto_path
                .take()
                .map(|sub| PathBuf::from(".").join(sub).display().to_string())
                .unwrap_or_else(|| String::from(".")),
        );
        if args.name.is_none() {
            args.name = names::Generator::default().next();
        }
    }
    args
}