kitin 0.1.2

A small project management tool.
Documentation
use std::path::PathBuf;

use clap::{AppSettings, Arg, Command};

use crate::kitin::{self, KitinProject};

pub fn subcommand() -> Command<'static> {
    return Command::new("project")
        .about("Kitin project related commmands")
        .setting(AppSettings::SubcommandRequiredElseHelp)
        .subcommand(subcommand_init());
}

pub fn subcommand_init() -> Command<'static> {
    return Command::new("init")
        .about("Initialise a new project")
        .arg(Arg::with_name("name").required(false).index(1));
}

pub fn run(matches: &clap::ArgMatches) {
    let mut project = kitin::KitinProject::new();
    let cwd = std::env::current_dir().unwrap();

    match matches.subcommand() {
        Some(("init", sub_matches)) => run_init(&mut project, &cwd, sub_matches),
        _ => {}
    }
}

pub fn run_init(project: &mut KitinProject, cwd: &PathBuf, matches: &clap::ArgMatches) {
    if kitin::KitinProject::directory_has_project(cwd.as_path()) {
        return;
    };

    let default_name = cwd
        .file_name()
        .and_then(|s| s.to_str())
        .and_then(|s| Some(s.to_string()))
        .unwrap();
    let name = matches.get_one::<String>("name").unwrap_or(&default_name);
    project.set_name(name);
    project.save_to_file(cwd.as_path());
}