maven_rs/meta/
maven_metadata.rs1use chrono::NaiveDateTime;
2use serde::{Deserialize, Serialize};
3
4use crate::extension::MavenFileExtension;
5
6#[derive(Debug, Serialize, Deserialize, Clone)]
7pub struct DeployMetadata {
8 #[serde(rename = "groupId")]
9 pub group_id: String,
10 #[serde(rename = "artifactId")]
11 pub artifact_id: String,
12 pub versioning: StableVersioning,
13}
14
15impl DeployMetadata {
16 #[inline]
20 pub fn get_latest_version(&self) -> Option<&String> {
21 self.versioning
22 .latest
23 .as_ref()
24 .or(self.versioning.release.as_ref())
25 .or_else(|| self.versioning.versions.version.first())
26 }
27 pub fn get_latest_artifact_name(
29 &self,
30 extension: impl Into<MavenFileExtension>,
31 ) -> Option<(&str, String)> {
32 if let Some(value) = self.get_latest_version() {
33 let string = self.get_artifact_name(value, extension);
34 Some((value, string))
35 } else {
36 None
37 }
38 }
39 #[inline]
40 pub fn get_artifact_name(
41 &self,
42 version: &str,
43 extension: impl Into<MavenFileExtension>,
44 ) -> String {
45 let extension = extension.into();
46 format!("{}-{}{}", self.artifact_id, version, extension)
47 }
48}
49
50#[derive(Debug, Serialize, Deserialize, Clone, Default)]
51pub struct StableVersioning {
52 pub release: Option<String>,
53 pub latest: Option<String>,
54 pub versions: StableVersions,
55 #[serde(rename = "lastUpdated", with = "crate::utils::time::standard_time")]
56 pub last_updated: Option<NaiveDateTime>,
57}
58
59#[derive(Debug, Serialize, Deserialize, Clone, Default)]
60pub struct StableVersions {
61 pub version: Vec<String>,
62}
63
64#[cfg(test)]
65mod tests {
66 use super::*;
67 use pretty_assertions::assert_eq;
68 #[test]
69 pub fn parse_metadata() {
70 let metadata = r#"
71 <metadata>
72 <groupId>org.kakara</groupId>
73 <artifactId>engine</artifactId>
74 <versioning>
75 <latest>1.0-SNAPSHOT</latest>
76 <versions>
77 <version>1.0-SNAPSHOT</version>
78 </versions>
79 <lastUpdated>20220826191631</lastUpdated>
80 </versioning>
81 </metadata>
82 "#;
83 let metadata: DeployMetadata = quick_xml::de::from_str(metadata).unwrap();
84 assert_eq!(metadata.group_id, "org.kakara");
85 assert_eq!(metadata.artifact_id, "engine");
86 assert_eq!(metadata.versioning.latest, Some("1.0-SNAPSHOT".to_string()));
87 assert_eq!(
88 metadata.versioning.versions.version,
89 vec!["1.0-SNAPSHOT".to_string()]
90 );
91 }
92}