pub mod common;
use std::fs::OpenOptions;
use std::path::PathBuf;
use clap::Parser;
use color_eyre::eyre::Result;
mod state;
pub mod database;
use crate::database::{get_granger_data_directory, initialize};
pub mod board;
use crate::board::cli::BoardCli;
pub mod ticket;
use crate::ticket::cli::TicketCli;
#[derive(Debug)]
pub enum Env {
Test,
Prod,
}
const TICKET_TEMPLATE_CONTENTS: &str = "# Insert TITLE and DESCRIPTION in empty line between quotes.\n# See https://toml.io/en/v1.0.0#string for more information.\n\ntitle = \"\"\"\n\n\"\"\"\n\ndescription = \"\"\"\n\n\"\"\"\n";
fn create_ticket_template_file() {
let data_directory = get_granger_data_directory();
let ticket_template_file = data_directory.join("ticket_template.toml");
OpenOptions::new()
.create(true)
.read(true)
.write(true)
.open(&ticket_template_file)
.expect("Failed to find laydown data file");
std::fs::write(ticket_template_file, TICKET_TEMPLATE_CONTENTS).unwrap();
}
fn get_ticket_template_file() -> PathBuf {
let data_directory = get_granger_data_directory();
data_directory.join("ticket_template.toml")
}
#[derive(Debug, Parser)]
pub enum Cli {
Board(BoardCli),
Ticket(TicketCli),
}
pub fn get_args() -> Result<Cli> {
let args = Cli::parse();
Ok(args)
}
pub fn run(env: Env) -> Result<()> {
create_ticket_template_file();
initialize(env).expect("Failed to initialize database.");
let args = get_args()?;
match args {
Cli::Board(board) => board.parse_options(),
Cli::Ticket(ticket) => ticket.parse_options(),
}
Ok(())
}