use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReleaseNote {
pub version: String,
pub date: String,
pub changes: Vec<Change>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ChangeType {
Added,
Changed,
Deprecated,
Removed,
Fixed,
Security,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Change {
pub change_type: ChangeType,
pub description: String,
}
pub fn parse_release_notes(markdown: &str) -> Vec<ReleaseNote> {
let mut notes = Vec::new();
for line in markdown.lines() {
if line.starts_with("## ") && line.contains("v") {
let version = line
.trim_start_matches("## ")
.trim_start_matches("v")
.split_whitespace()
.next()
.unwrap_or("0.0.0")
.to_string();
notes.push(ReleaseNote {
version,
date: String::new(),
changes: Vec::new(),
});
}
}
notes
}