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