1 use crate::{BuildMetadata, Comparator, Op, Prerelease, Version, VersionReq};
2 use core::fmt::{self, Debug, Display};
3 
4 impl Display for Version {
fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result5     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
6         Display::fmt(&self.major, formatter)?;
7         formatter.write_str(".")?;
8         Display::fmt(&self.minor, formatter)?;
9         formatter.write_str(".")?;
10         Display::fmt(&self.patch, formatter)?;
11         if !self.pre.is_empty() {
12             formatter.write_str("-")?;
13             Display::fmt(&self.pre, formatter)?;
14         }
15         if !self.build.is_empty() {
16             formatter.write_str("+")?;
17             Display::fmt(&self.build, formatter)?;
18         }
19         Ok(())
20     }
21 }
22 
23 impl Display for VersionReq {
fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result24     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
25         if self.comparators.is_empty() {
26             return formatter.write_str("*");
27         }
28         for (i, comparator) in self.comparators.iter().enumerate() {
29             if i > 0 {
30                 formatter.write_str(", ")?;
31             }
32             Display::fmt(comparator, formatter)?;
33         }
34         Ok(())
35     }
36 }
37 
38 impl Display for Comparator {
fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result39     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
40         let op = match self.op {
41             Op::Exact => "=",
42             Op::Greater => ">",
43             Op::GreaterEq => ">=",
44             Op::Less => "<",
45             Op::LessEq => "<=",
46             Op::Tilde => "~",
47             Op::Caret => "^",
48             Op::Wildcard => "",
49             #[cfg(no_non_exhaustive)]
50             Op::__NonExhaustive => unreachable!(),
51         };
52         formatter.write_str(op)?;
53         Display::fmt(&self.major, formatter)?;
54         if let Some(minor) = &self.minor {
55             formatter.write_str(".")?;
56             Display::fmt(minor, formatter)?;
57             if let Some(patch) = &self.patch {
58                 formatter.write_str(".")?;
59                 Display::fmt(patch, formatter)?;
60                 if !self.pre.is_empty() {
61                     formatter.write_str("-")?;
62                     Display::fmt(&self.pre, formatter)?;
63                 }
64             } else if self.op == Op::Wildcard {
65                 formatter.write_str(".*")?;
66             }
67         } else if self.op == Op::Wildcard {
68             formatter.write_str(".*")?;
69         }
70         Ok(())
71     }
72 }
73 
74 impl Display for Prerelease {
fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result75     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
76         formatter.write_str(self.as_str())
77     }
78 }
79 
80 impl Display for BuildMetadata {
fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result81     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
82         formatter.write_str(self.as_str())
83     }
84 }
85 
86 impl Debug for Version {
fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result87     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
88         let mut debug = formatter.debug_struct("Version");
89         debug
90             .field("major", &self.major)
91             .field("minor", &self.minor)
92             .field("patch", &self.patch);
93         if !self.pre.is_empty() {
94             debug.field("pre", &self.pre);
95         }
96         if !self.build.is_empty() {
97             debug.field("build", &self.build);
98         }
99         debug.finish()
100     }
101 }
102 
103 impl Debug for Prerelease {
fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result104     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
105         formatter.write_str("Prerelease(\"")?;
106         Display::fmt(self, formatter)?;
107         formatter.write_str("\")")?;
108         Ok(())
109     }
110 }
111 
112 impl Debug for BuildMetadata {
fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result113     fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
114         formatter.write_str("BuildMetadata(\"")?;
115         Display::fmt(self, formatter)?;
116         formatter.write_str("\")")?;
117         Ok(())
118     }
119 }
120