cob: Refactor `Thread` methods

This commit is contained in:
Alexis Sellier 2023-01-26 16:20:22 +01:00
parent e01838a70a
commit bb3787258a
No known key found for this signature in database
3 changed files with 13 additions and 15 deletions

View File

@ -97,9 +97,10 @@ fn comment(
store::Error::NotFound(_, _) => anyhow::anyhow!("Could not find issue {}", options.id),
_ => e.into(),
})?;
let (comment_id, _) = issue.root().expect("root comment always exists");
let (comment_id, _) = issue.comments().next().expect("root comment always exists");
issue.comment(message, *comment_id, &signer)?;
Ok(())
}

View File

@ -353,7 +353,7 @@ impl Revision {
}
pub fn description(&self) -> Option<&str> {
let (_, comment) = self.discussion.root()?;
let (_, comment) = self.discussion.first()?;
Some(comment.body())
}
}

View File

@ -203,11 +203,12 @@ impl Thread {
}
}
pub fn root(&self) -> Option<(&CommentId, &Comment)> {
self.comments
.iter()
.filter_map(|(id, r)| r.get().map(|comment| (id, comment)))
.next()
pub fn first(&self) -> Option<(&CommentId, &Comment)> {
self.comments().next()
}
pub fn last(&self) -> Option<(&CommentId, &Comment)> {
self.comments().next_back()
}
pub fn replies<'a>(
@ -235,14 +236,10 @@ impl Thread {
.map(|(a, r)| (a, r))
}
pub fn comments(&self) -> impl Iterator<Item = (&CommentId, &Comment)> + '_ {
self.comments.iter().filter_map(|(id, comment)| {
if let Redactable::Present(c) = comment {
Some((id, c))
} else {
None
}
})
pub fn comments(&self) -> impl DoubleEndedIterator<Item = (&CommentId, &Comment)> + '_ {
self.comments
.iter()
.filter_map(|(id, comment)| comment.get().map(|comment| (id, comment)))
}
}