use super::DEFAULT_MARKER;
#[derive(Debug, Default, PartialEq, Eq, Clone, Copy)]
pub enum CommentKind {
#[default]
Concerns,
Lgtm,
}
#[derive(Debug, Default, PartialEq, Eq, Clone, Copy)]
pub enum CommentPolicy {
Anew,
#[default]
Update,
}
#[derive(Debug)]
pub struct ThreadCommentOptions {
pub policy: CommentPolicy,
pub comment: String,
pub kind: CommentKind,
pub marker: String,
pub no_lgtm: bool,
}
impl Default for ThreadCommentOptions {
fn default() -> Self {
Self {
policy: Default::default(),
comment: Default::default(),
kind: Default::default(),
marker: DEFAULT_MARKER.to_string(),
no_lgtm: Default::default(),
}
}
}
impl ThreadCommentOptions {
pub fn mark_comment(&self) -> String {
if !self.comment.starts_with(&self.marker) {
return format!("{}{}", self.marker, self.comment);
}
self.comment.clone()
}
}
#[cfg(test)]
mod test {
use super::{DEFAULT_MARKER, ThreadCommentOptions};
use chrono::NaiveDateTime;
#[test]
fn default_marker() {
let mut opts = ThreadCommentOptions::default();
assert_eq!(opts.marker, DEFAULT_MARKER);
let datetime_start = concat!(
"<!-- ",
env!("CARGO_CRATE_NAME"),
"/",
env!("CARGO_PKG_VERSION"),
"/",
)
.len();
let datetime_end = DEFAULT_MARKER.len() - 5;
let datetime_str = &DEFAULT_MARKER[datetime_start..datetime_end];
NaiveDateTime::parse_from_str(datetime_str, "%b-%d-%Y_%H-%M").unwrap();
assert_eq!(opts.mark_comment(), DEFAULT_MARKER);
let comment = format!("{DEFAULT_MARKER}Some text data.");
opts.comment = comment.clone();
assert_eq!(opts.mark_comment(), comment);
}
}