pub mod cli;
use std::path::PathBuf;
use clap::{Parser, Subcommand};
use eyre::Result;
use pretty_env_logger::env_logger::Env;
#[derive(Debug, Parser)]
#[command(display_name = "EasyWind", author, version)]
#[command(arg_required_else_help(true))]
#[command(styles=cli::get_styles())]
pub struct CliArgs {
#[command(subcommand)]
command: Commands,
}
#[derive(Debug, Subcommand)]
enum Commands {
#[command(visible_aliases = ["new", "i"])]
Init(InitArgs),
#[command(visible_aliases = ["run", "s"])]
Start(StartArgs),
#[command(name = "serve")]
Server(ServerArgs),
#[command(visible_aliases = ["t"])]
Tailwind(TailwindArgs),
}
#[derive(Parser, Debug, Clone)]
pub(crate) struct InitArgs {
pub project_name: String,
}
#[derive(Parser, Debug, Clone)]
pub(crate) struct StartArgs {
#[clap(default_value = ".")]
pub root_dir: PathBuf,
#[clap(short, long, default_value = "3500")]
pub port: u16,
#[clap(short = 'O', long)]
pub open: bool,
#[clap(short, long)]
pub input: Option<PathBuf>,
#[clap(short, long)]
pub output: Option<PathBuf>,
}
#[derive(Parser, Debug, Clone)]
pub(crate) struct ServerArgs {
#[clap(default_value = ".")]
pub root_dir: PathBuf,
#[clap(short, long, default_value = "3500")]
pub port: u16,
#[clap(short, long)]
pub open: bool,
}
#[derive(Parser, Debug, Clone)]
pub(crate) struct TailwindArgs {
#[clap(default_value = ".")]
pub root_dir: PathBuf,
#[clap(short, long, default_value = "src/app.css")]
pub input: PathBuf,
#[clap(short, long, default_value = "dist/app.css")]
pub output: PathBuf,
#[clap(short, long)]
pub watch: bool,
}
#[tokio::main]
async fn main() -> Result<()> {
let env = Env::new().filter_or("LOG_LEVEL", "info");
pretty_env_logger::env_logger::init_from_env(env);
color_eyre::install()?;
let cli = CliArgs::parse();
match cli {
CliArgs {
command: Commands::Init(args),
} => {
easywind::init::run(args.into())?;
}
CliArgs {
command: Commands::Start(args),
} => {
easywind::start::start(args.into()).await?;
}
CliArgs {
command: Commands::Server(args),
} => {
easywind::server::start(args.into()).await?;
}
CliArgs {
command: Commands::Tailwind(args),
} => {
easywind::tailwind::start(args.into())?;
}
}
Ok(())
}