maven_rs/
extension.rs

1use std::fmt::{Display, Formatter};
2
3/// Maven Files have the following pattern {name}-{version}-{classifier}.{extension}.{hash}
4/// This will represent the classifier and extension
5#[derive(Debug, Clone, PartialEq, Eq, Hash, Default)]
6pub struct MavenFileExtension {
7    pub hash: Option<String>,
8    pub file_extension: String,
9    pub classifier: Option<String>,
10}
11impl MavenFileExtension {
12    pub fn with_hash(mut self, hash: impl Into<String>) -> Self {
13        self.hash = Some(hash.into());
14        self
15    }
16    pub fn with_classifier(mut self, classifier: impl Into<String>) -> Self {
17        self.classifier = Some(classifier.into());
18        self
19    }
20}
21impl From<&str> for MavenFileExtension {
22    fn from(value: &str) -> Self {
23        MavenFileExtension::from(value.to_owned())
24    }
25}
26
27impl From<String> for MavenFileExtension {
28    fn from(value: String) -> Self {
29        MavenFileExtension {
30            file_extension: value,
31            ..Default::default()
32        }
33    }
34}
35
36impl From<(String, String, String)> for MavenFileExtension {
37    fn from((classifier, file, hash): (String, String, String)) -> Self {
38        MavenFileExtension {
39            hash: Some(hash),
40            file_extension: file,
41            classifier: Some(classifier),
42        }
43    }
44}
45
46impl Display for MavenFileExtension {
47    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
48        if let Some(classifier) = &self.classifier {
49            write!(f, "-{}", classifier)?;
50        }
51        write!(f, ".{}", self.file_extension)?;
52        if let Some(hash) = &self.hash {
53            write!(f, ".{}", hash)?;
54        }
55        Ok(())
56    }
57}