#[cfg(feature = "pyo3")]
use pyo3::prelude::*;
use super::DEFAULT_MARKER;
#[derive(Debug, PartialEq, Eq, Clone)]
#[cfg_attr(
feature = "pyo3",
pyclass(module = "git_bot_feedback", from_py_object, get_all, set_all)
)]
pub struct ReviewOptions {
pub action: ReviewAction,
pub summary: String,
pub comments: Vec<ReviewComment>,
pub marker: String,
pub allow_draft: bool,
pub allow_closed: bool,
pub delete_review_comments: bool,
}
impl Default for ReviewOptions {
fn default() -> Self {
Self {
action: ReviewAction::default(),
summary: Default::default(),
comments: Default::default(),
marker: DEFAULT_MARKER.to_string(),
allow_draft: false,
allow_closed: false,
delete_review_comments: false,
}
}
}
#[cfg(feature = "pyo3")]
#[pymethods]
impl ReviewOptions {
#[new]
#[pyo3(
signature = (
comments,
action=None,
summary=None,
marker=None,
allow_draft=None,
allow_closed=None,
delete_review_comments=None
),
text_signature = "(comments: list[ReviewComment], action: ReviewAction | None = None, summary: str | None = None, marker: str | None = None, allow_draft: bool = False, allow_closed: bool = False, delete_review_comments: bool = False)"
)]
pub fn new(
comments: Vec<ReviewComment>,
action: Option<ReviewAction>,
summary: Option<String>,
marker: Option<String>,
allow_draft: Option<bool>,
allow_closed: Option<bool>,
delete_review_comments: Option<bool>,
) -> Self {
Self {
action: action.unwrap_or_default(),
summary: summary.unwrap_or_default(),
comments,
marker: marker.unwrap_or_else(|| DEFAULT_MARKER.to_string()),
allow_draft: allow_draft.unwrap_or(false),
allow_closed: allow_closed.unwrap_or(false),
delete_review_comments: delete_review_comments.unwrap_or(false),
}
}
}
#[derive(Debug, PartialEq, Eq, Clone, Default)]
#[cfg_attr(feature = "pyo3", pyclass(module = "git_bot_feedback", from_py_object))]
pub enum ReviewAction {
Approve,
RequestChanges,
#[default]
Comment,
}
#[derive(Debug, PartialEq, Eq, Clone, Hash)]
#[cfg_attr(
feature = "pyo3",
pyclass(module = "git_bot_feedback", from_py_object, get_all, set_all)
)]
pub struct ReviewComment {
pub line_start: Option<u32>,
pub line_end: u32,
pub comment: String,
pub path: String,
}
#[cfg(feature = "pyo3")]
#[pymethods]
impl ReviewComment {
#[new]
#[pyo3(
signature = (path, comment, line_end, line_start=None),
text_signature = "(path: str, comment: str, line_end: int, line_start: int | None = None)"
)]
pub fn new_py(path: String, comment: String, line_end: u32, line_start: Option<u32>) -> Self {
Self {
line_start,
line_end,
comment,
path,
}
}
}