aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..7248942
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,61 @@
+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<String>,
+ tags: Option<String>,
+ 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::<String> = 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();
+}