// Copyright (C) 2023 Aravinth Manivannan // SPDX-FileCopyrightText: 2023 Aravinth Manivannan // // SPDX-License-Identifier: MIT //! Issues associated to a repository within a forge (Gitea, GitLab, etc.). use serde::{Deserialize, Serialize}; use crate::{OpenCloseState, Reaction}; /// Issues associated to a repository within a forge (Gitea, GitLab, etc.). #[derive(Clone, Debug, Serialize, Deserialize, Default, Eq, PartialEq)] pub struct Issue { /// Unique identifier, relative to the repository pub index: usize, /// Unique identifier of the user who authored the issue. pub poster_id: usize, /// Short description displayed as the title. pub title: String, /// Long, multiline, description pub content: String, /// Target branch in the repository. /// /// NOTE: Actual property is called "ref" but it is a keyword in Rust so we are using /// "reference". However, "reference" will automatically be renamed to "ref" while serializing /// and vice versa #[serde(rename(serialize = "ref", deserialize = "ref"))] pub reference: Option, /// Name of the milestone pub milestone: Option, /// state of the issue pub state: OpenCloseState, /// A locked issue can only be modified by privileged users pub is_locked: bool, // TODO: add validation for format "date-time" /// Creation time pub created: String, // TODO: add validation for format "date-time" /// Last update time pub updated: String, // TODO: add validation for format "date-time" /// The last time 'state' changed to 'closed' pub closed: Option, /// List of labels. pub labels: Option>, /// List of reactions pub reactions: Option>, /// List of assignees. pub assignees: Option>, }