git_iris/changes/
models.rs1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use std::collections::HashMap;
4
5#[derive(Serialize, Deserialize, JsonSchema, Debug)]
7pub struct ChangelogResponse {
8 pub version: Option<String>,
10 pub release_date: Option<String>,
12 pub sections: HashMap<ChangelogType, Vec<ChangeEntry>>,
14 pub breaking_changes: Vec<BreakingChange>,
16 pub metrics: ChangeMetrics,
18}
19
20#[derive(Clone, Serialize, Deserialize, JsonSchema, Debug, PartialEq, Eq, Hash)]
22pub enum ChangelogType {
23 Added,
24 Changed,
25 Deprecated,
26 Removed,
27 Fixed,
28 Security,
29}
30
31#[derive(Serialize, Deserialize, JsonSchema, Debug)]
33pub struct ChangeEntry {
34 pub description: String,
36 pub commit_hashes: Vec<String>,
38 pub associated_issues: Vec<String>,
40 pub pull_request: Option<String>,
42}
43
44#[derive(Serialize, Deserialize, JsonSchema, Debug)]
46pub struct BreakingChange {
47 pub description: String,
49 pub commit_hash: String,
51}
52
53#[derive(Clone, Serialize, Deserialize, JsonSchema, Debug)]
55pub struct ChangeMetrics {
56 pub total_commits: usize,
58 pub files_changed: usize,
60 pub insertions: usize,
62 pub deletions: usize,
64 pub total_lines_changed: usize,
66}
67
68#[derive(Serialize, Deserialize, JsonSchema, Debug)]
70pub struct ReleaseNotesResponse {
71 pub version: Option<String>,
73 pub release_date: Option<String>,
75 pub summary: String,
77 pub highlights: Vec<Highlight>,
79 pub sections: Vec<Section>,
81 pub breaking_changes: Vec<BreakingChange>,
83 pub upgrade_notes: Vec<String>,
85 pub metrics: ChangeMetrics,
87}
88
89#[derive(Serialize, Deserialize, JsonSchema, Debug)]
91pub struct Highlight {
92 pub title: String,
94 pub description: String,
96}
97
98#[derive(Serialize, Deserialize, JsonSchema, Debug)]
100pub struct Section {
101 pub title: String,
103 pub items: Vec<SectionItem>,
105}
106
107#[derive(Serialize, Deserialize, JsonSchema, Debug)]
109pub struct SectionItem {
110 pub description: String,
112 pub associated_issues: Vec<String>,
114 pub pull_request: Option<String>,
116}
117
118impl From<String> for ChangelogResponse {
119 #[allow(clippy::unwrap_used)] fn from(value: String) -> Self {
122 serde_json::from_str(&value).unwrap()
123 }
124}
125
126impl From<String> for ReleaseNotesResponse {
127 #[allow(clippy::unwrap_used)] fn from(value: String) -> Self {
130 serde_json::from_str(&value).unwrap()
131 }
132}