use anyhow::Result;
use clap::Parser;
use dotenvy::dotenv;
use opencrates::utils::logging;
use tracing::{info, Level};
#[derive(Parser)]
#[command(name = "opencrates")]
#[command(about = "OpenCrates CLI for Rust crate management")]
#[command(version)]
struct Cli {
#[command(subcommand)]
command: Option<Commands>,
}
#[derive(Parser)]
enum Commands {
Check {
#[arg(short, long)]
path: Option<String>,
},
Generate {
#[arg(short, long)]
template: String,
#[arg(short, long)]
name: String,
},
Version,
}
#[tokio::main]
async fn main() -> Result<()> {
dotenv().ok();
logging::init(Level::INFO);
let cli = Cli::parse();
match cli.command {
Some(Commands::Check { path }) => {
let check_path = path.unwrap_or_else(|| ".".to_string());
info!("Checking project at: {}", check_path);
println!("✓ Project check completed for: {}", check_path);
}
Some(Commands::Generate { template, name }) => {
info!("Generating {} with template: {}", name, template);
println!("✓ Generated {} using template: {}", name, template);
}
Some(Commands::Version) => {
println!("OpenCrates CLI v{}", env!("CARGO_PKG_VERSION"));
}
None => {
println!("OpenCrates CLI v{}", env!("CARGO_PKG_VERSION"));
println!("Run 'opencrates --help' for usage information.");
}
}
Ok(())
}