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