1use std::fmt::{Display, Formatter};
2
3#[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}