add optional 'assignee' to Issue

This commit is contained in:
Sebastian Kuzminsky 2025-07-08 16:29:00 -06:00
parent ce1e966d7d
commit c1f18c8145
4 changed files with 21 additions and 0 deletions

View file

@ -141,6 +141,9 @@ fn handle_command(args: &Args, issues_dir: &std::path::Path) -> anyhow::Result<(
if let Some(dependencies) = &issue.dependencies {
println!("dependencies: {:?}", dependencies);
}
if let Some(assignee) = &issue.assignee {
println!("assignee: {}", assignee);
}
println!("");
println!("{}", issue.description);
for comment in &issue.comments {

View file

@ -24,6 +24,7 @@ pub struct Issue {
pub timestamp: chrono::DateTime<chrono::Local>,
pub state: State,
pub dependencies: Option<Vec<IssueHandle>>,
pub assignee: Option<String>,
pub description: String,
pub comments: Vec<crate::comment::Comment>,
@ -88,6 +89,7 @@ impl Issue {
let mut state = State::New; // default state, if not specified in the issue
let mut dependencies: Option<Vec<String>> = None;
let mut comments = Vec::<crate::comment::Comment>::new();
let mut assignee: Option<String> = None;
for direntry in dir.read_dir()? {
if let Ok(direntry) = direntry {
@ -97,6 +99,10 @@ impl Issue {
} else if file_name == "state" {
let state_string = std::fs::read_to_string(direntry.path())?;
state = State::from_str(state_string.trim())?;
} else if file_name == "assignee" {
assignee = Some(String::from(
std::fs::read_to_string(direntry.path())?.trim(),
));
} else if file_name == "dependencies" {
let dep_strings = std::fs::read_to_string(direntry.path())?;
let deps: Vec<IssueHandle> = dep_strings
@ -127,6 +133,7 @@ impl Issue {
timestamp,
state: state,
dependencies,
assignee,
description: description.unwrap(),
comments,
dir: std::path::PathBuf::from(dir),
@ -178,6 +185,7 @@ impl Issue {
timestamp: chrono::Local::now(),
state: State::New,
dependencies: None,
assignee: None,
description: String::from(""), // FIXME: kind of bogus to use the empty string as None
comments: Vec::<crate::comment::Comment>::new(),
dir: issue_dir,
@ -258,6 +266,7 @@ mod tests {
.with_timezone(&chrono::Local),
state: State::New,
dependencies: None,
assignee: None,
description: String::from("this is the title of my issue\n\nThis is the description of my issue.\nIt is multiple lines.\n* Arbitrary contents\n* But let's use markdown by convention\n"),
comments: Vec::<crate::comment::Comment>::new(),
dir: std::path::PathBuf::from(issue_dir),
@ -276,6 +285,7 @@ mod tests {
.with_timezone(&chrono::Local),
state: State::InProgress,
dependencies: None,
assignee: Some(String::from("beep boop")),
description: String::from("minimal"),
comments: Vec::<crate::comment::Comment>::new(),
dir: std::path::PathBuf::from(issue_dir),

View file

@ -102,6 +102,7 @@ mod tests {
.with_timezone(&chrono::Local),
state: crate::issue::State::InProgress,
dependencies: None,
assignee: Some(String::from("beep boop")),
description: String::from("minimal"),
comments: Vec::<crate::comment::Comment>::new(),
dir,
@ -120,6 +121,7 @@ mod tests {
.with_timezone(&chrono::Local),
state: crate::issue::State::New,
dependencies: None,
assignee: None,
description: String::from("this is the title of my issue\n\nThis is the description of my issue.\nIt is multiple lines.\n* Arbitrary contents\n* But let's use markdown by convention\n"),
comments: Vec::<crate::comment::Comment>::new(),
dir,
@ -147,6 +149,7 @@ mod tests {
.with_timezone(&chrono::Local),
state: crate::issue::State::Done,
dependencies: None,
assignee: None,
description: String::from("oh yeah we got titles"),
comments: Vec::<crate::comment::Comment>::new(),
dir,
@ -179,6 +182,7 @@ mod tests {
.with_timezone(&chrono::Local),
state: crate::issue::State::WontDo,
dependencies: None,
assignee: None,
description: String::from("issues out the wazoo\n\nLots of words\nthat don't say much\nbecause this is just\na test\n"),
comments: expected_comments,
dir,
@ -206,6 +210,7 @@ mod tests {
.with_timezone(&chrono::Local),
state: crate::issue::State::Done,
dependencies: None,
assignee: None,
description: String::from("oh yeah we got titles\n"),
comments: Vec::<crate::comment::Comment>::new(),
dir,
@ -224,6 +229,7 @@ mod tests {
.with_timezone(&chrono::Local),
state: crate::issue::State::WontDo,
dependencies: None,
assignee: None,
description: String::from("issues out the wazoo\n\nLots of words\nthat don't say much\nbecause this is just\na test\n"),
comments: Vec::<crate::comment::Comment>::new(),
dir,
@ -245,6 +251,7 @@ mod tests {
crate::issue::IssueHandle::from("3fa5bfd93317ad25772680071d5ac3259cd2384f"),
crate::issue::IssueHandle::from("dd79c8cfb8beeacd0460429944b4ecbe95a31561"),
]),
assignee: None,
description: String::from("issue with dependencies\n\na test has begun\nfor dependencies we seek\nintertwining life"),
comments: Vec::<crate::comment::Comment>::new(),
dir,

View file

@ -0,0 +1 @@
beep boop