1use chrono::{DateTime, NaiveDateTime, Utc};
2use semver::Version;
3use serde::{Deserialize, Serialize};
4
5use crate::errors::Error;
6
7#[derive(Deserialize, Serialize, Debug, Clone, PartialEq)]
9pub struct ChangeLogEntry {
10 pub version: Version,
12 pub time: DateTime<Utc>,
14 pub message: String,
16}
17
18impl ChangeLogEntry {
19 pub fn new(version: &String, text: &String) -> Result<Self, Error> {
21 let mut split_text = text.split_ascii_whitespace();
26 let timestamp: i64 = split_text.next().unwrap().parse().unwrap();
27 let message = split_text.collect::<Vec<&str>>().join(" ");
28
29 Ok(Self {
30 version: version.parse()?,
31 time: DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp(timestamp, 0), Utc),
32 message,
33 })
34 }
35}