use serde::{Deserialize, Serialize}; //use serde_json::Result; use std::time::{SystemTime, UNIX_EPOCH}; use std::{ env::{temp_dir, var}, fs::File, io::Read, process::Command, }; use std::fs; #[derive(Serialize, Deserialize)] struct BugReport { timestamp: String, status: String, title: String, description: Vec, tags: Option, version: String } fn new_bug() { let editor = var("EDITOR").unwrap(); let mut file_path = temp_dir(); // TODO: figgure out how to get .git dir in a save manner file_path.push("NEW_BUG_REPORT"); File::create(&file_path).expect("Could not create file"); Command::new(editor) .arg(&file_path) .status() .expect("Something went wrong"); let mut new_bug_report = String::new(); let _ = File::open(&file_path) .expect("Could not open file") .read_to_string(&mut new_bug_report); let _ = fs::remove_file(&file_path); let mut header = ""; let mut description: Vec:: = Vec::new(); for (i, line) in new_bug_report.lines().enumerate() { match i { 0 => header = line, 1 => (), _ => description.push(line.to_string()), } } let report = BugReport { timestamp: SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs().to_string(), title: header.to_owned(), description: description.to_owned(), status: "new".to_owned(), tags: None, version: "v1".to_owned(), }; let j = serde_json::to_string(&report).unwrap(); print!("{}", j); } fn main() { new_bug(); }