* Copyright(c) 2024-2026 China Telecom Cloud Technologies Co., Ltd. All rights
* reserved. track-system is licensed under Mulan PSL v2. You can use this software
* according to the terms and conditions of the Mulan PSL V2. You may obtain a
* copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY
* KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for
* more details.
*/
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ChangeType {
CVE,
Bugfix,
Backport,
Unknown,
}
impl ChangeType {
pub fn as_str(&self) -> &'static str {
match self {
ChangeType::CVE => "CVE",
ChangeType::Bugfix => "Bugfix",
ChangeType::Backport => "Backport",
ChangeType::Unknown => "Unknown",
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct PatchChanges {
pub added: usize,
pub deleted: usize,
pub modified: usize,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct VersionInfo {
pub old_version: Option<String>,
pub new_version: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ChangeClassification {
pub primary_type: ChangeType,
pub affected_files: Vec<String>,
pub spec_changes: Vec<String>,
pub has_spec_change: bool,
pub patch_changes: PatchChanges,
pub source_changes: usize,
pub has_changelog_update: bool,
pub version_info: Option<VersionInfo>,
pub cve_numbers: Vec<String>,
}
impl Default for ChangeClassification {
fn default() -> Self {
Self {
primary_type: ChangeType::Unknown,
affected_files: Vec::new(),
spec_changes: Vec::new(),
has_spec_change: false,
patch_changes: PatchChanges::default(),
source_changes: 0,
has_changelog_update: false,
version_info: None,
cve_numbers: Vec::new(),
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn change_type_as_str_returns_stable_labels() {
assert_eq!(ChangeType::CVE.as_str(), "CVE");
assert_eq!(ChangeType::Bugfix.as_str(), "Bugfix");
assert_eq!(ChangeType::Backport.as_str(), "Backport");
assert_eq!(ChangeType::Unknown.as_str(), "Unknown");
}
}