aboutsummaryrefslogtreecommitdiff
path: root/ticket/src/main.rs
diff options
context:
space:
mode:
authorMichael Gattozzi <mgattozzi@gmail.com>2019-12-09 17:42:08 -0500
committerMichael Gattozzi <mgattozzi@gmail.com>2019-12-10 13:17:08 -0500
commit1dec32c37ac2f563e164021c9f21052f11fd1d20 (patch)
tree8d5508b09b742e63e72fbbf1571b5667b3ec0e1e /ticket/src/main.rs
parentfcd4ccbec30493872feba137342347541b6a4e28 (diff)
Make the pre-commit script pedantic and fix errors
This commit really ups the level and quality of the Rust code by setting clippy to pedantic mode. It also fixes an issue where bash continued to run scripts even if something failed with a non-zero exit status. We also deny all warnings so as to actually fail the builds and the commit hooks. This should make sure code quality stays at a high level.
Diffstat (limited to 'ticket/src/main.rs')
-rw-r--r--ticket/src/main.rs47
1 files changed, 33 insertions, 14 deletions
diff --git a/ticket/src/main.rs b/ticket/src/main.rs
index 11e27e8..74a5699 100644
--- a/ticket/src/main.rs
+++ b/ticket/src/main.rs
@@ -1,3 +1,6 @@
+//! ticket is a cli tool to create, delete, and manage tickets as part of
+//! repository, rather than a separate service outside the history of the
+//! code.
mod actions;
mod tui;
@@ -18,6 +21,7 @@ use serde::{
Serialize,
};
use std::{
+ convert::TryInto,
env,
fs,
process,
@@ -55,9 +59,9 @@ enum Cmd {
#[paw::main]
fn main(args: Args) {
- env::var("RUST_LOG").map(drop).unwrap_or_else(|_| {
- env::set_var("RUST_LOG", "info");
- });
+ env::var("RUST_LOG")
+ .ok()
+ .map_or_else(|| env::set_var("RUST_LOG", "info"), drop);
pretty_env_logger::init();
if let Some(cmd) = args.cmd {
@@ -116,8 +120,8 @@ fn new() -> Result<()> {
"Create buffer file for the description at {}.",
description.display()
);
- fs::File::create(&description)?;
- Command::new(&env::var("EDITOR").unwrap_or_else(|_| "vi".into()))
+ let _ = fs::File::create(&description)?;
+ let _ = Command::new(&env::var("EDITOR").unwrap_or_else(|_| "vi".into()))
.arg(&description)
.spawn()?
.wait()?;
@@ -131,7 +135,11 @@ fn new() -> Result<()> {
title,
status: Status::Open,
id: Uuid::new_v1(
- Timestamp::from_unix(Context::new(1), Utc::now().timestamp() as u64, 0),
+ Timestamp::from_unix(
+ Context::new(1),
+ Utc::now().timestamp().try_into()?,
+ 0,
+ ),
&[0, 5, 2, 4, 9, 3],
)?,
assignees: Vec::new(),
@@ -254,15 +262,15 @@ fn migrate() -> Result<()> {
let open_tickets_path = open_tickets()?;
let closed_tickets_path = closed_tickets()?;
- for t in tickets.into_iter() {
+ for t in tickets {
let ticket = Ticket {
title: t.title,
status: t.status,
id: Uuid::new_v1(
- Timestamp::from_unix(&ctx, Utc::now().timestamp() as u64, 0),
+ Timestamp::from_unix(&ctx, Utc::now().timestamp().try_into()?, 0),
&[0, 5, 2, 4, 9, 3],
)?,
- assignees: t.assignee.map(|a| vec![a]).unwrap_or_else(Vec::new),
+ assignees: t.assignee.map_or_else(Vec::new, |a| vec![a]),
description: t.description,
comments: Vec::new(),
version: Version::V1,
@@ -289,7 +297,9 @@ fn migrate() -> Result<()> {
Ok(())
}
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Debug)]
+/// The fundamental type this tool revolves around. The ticket represents
+/// everything about an issue or future plan for the code base.
pub struct Ticket {
title: String,
status: Status,
@@ -300,15 +310,21 @@ pub struct Ticket {
version: Version,
}
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Debug)]
+/// Enum representing what version of the ticket it is and the assumptions that
+/// can be made about it
pub enum Version {
+ /// The first version
V1,
}
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Debug)]
+/// Newtype to represent a User or maintainer
pub struct User(String);
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Debug)]
+/// Original version of the tickets on disk. This exists for historical reasons
+/// but is deprecated and likely to be removed.
pub struct TicketV0 {
title: String,
status: Status,
@@ -317,8 +333,11 @@ pub struct TicketV0 {
description: String,
}
-#[derive(Serialize, Deserialize)]
+#[derive(Serialize, Deserialize, Debug)]
+/// What is the current state of a ticket
pub enum Status {
+ /// The ticket has been opened but the issue has not been resolved
Open,
+ /// The ticket has a corresponding fix and has been closed
Closed,
}