mod package;
use std::env;
use clap::{Parser, Subcommand, ValueEnum};
use jarn::{rebuild, reload_actions, start};
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
#[command(subcommand)]
commands: Cmds,
}
#[derive(Subcommand, Debug)]
enum Cmds {
Run {
#[arg(short, long, default_value_t = String::from("."))]
path: String,
#[arg(value_enum, default_value_t = Script::Start)]
script: Script,
},
Package {
#[arg(short, long, default_value_t = String::from("."))]
path: String,
#[arg(value_enum)]
action: PackageAction,
},
Install {
#[arg(short, long, default_value_t = String::from("."))]
path: String,
#[arg(short, long)]
file: Option<String>,
},
}
#[derive(ValueEnum, Debug, Clone)]
enum Script {
Start,
Build,
Actions,
}
#[derive(ValueEnum, Debug, Clone)]
enum PackageAction {
Create,
Publish,
}
fn main() {
env::set_var("RUST_LOG", "info");
env_logger::init();
let args = Args::parse();
match &args.commands {
Cmds::Run { path, script } => match *script {
Script::Start => {
start(&*path);
}
Script::Build => {
println!("Building at {}", &*path);
rebuild(&*path);
}
Script::Actions => {
reload_actions(&*path);
}
},
Cmds::Package { path, action } => match *action {
PackageAction::Create => {
package::init_package(&*path);
}
PackageAction::Publish => {
println!("Publishing package at {}", &*path);
package::publish_package(&*path);
}
},
Cmds::Install { path, file } => {
if let Some(file) = file {
package::install_package(&*file, &*path);
}
}
}
}