jarn 0.1.0

A package manager for jaseci applications
Documentation
mod package;

use std::env;

use clap::{Parser, Subcommand, ValueEnum};
use jarn::{rebuild, reload_actions, start};

/// Simple program to greet a person
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
    #[command(subcommand)]
    commands: Cmds,
}

#[derive(Subcommand, Debug)]
enum Cmds {
    // path to project directory
    /// Start jpm process
    Run {
        /// Project directory
        #[arg(short, long, default_value_t = String::from("."))]
        path: String,

        #[arg(value_enum, default_value_t = Script::Start)]
        script: Script,
    },
    /// Create a jpm package for distribution
    Package {
        /// Project directory
        #[arg(short, long, default_value_t = String::from("."))]
        path: String,

        #[arg(value_enum)]
        action: PackageAction,
    },
    /// Install a jpm package
    Install {
        /// Project directory
        #[arg(short, long, default_value_t = String::from("."))]
        path: String,

        /// Install a downloaded package
        #[arg(short, long)]
        file: Option<String>,
    },
}

#[derive(ValueEnum, Debug, Clone)]
enum Script {
    /// Start jpm process
    Start,
    /// Build project
    Build,
    /// Reload actions
    Actions,
}

#[derive(ValueEnum, Debug, Clone)]
enum PackageAction {
    /// Create a jpm package for distribution
    Create,
    /// Publish a jpm package to the registry
    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);
            }
        }
    }

    // let config_contents =
    //     fs::read_to_string("src/jaseci.json").expect("Something went wrong reading the file");

    // let deserialized_data: JaseciConfig = serde_json::from_str(&config_contents).unwrap();

    // println!("The Config = {:?}", deserialized_data);
    // check_if_logged_in();
}