# use std::{cmp, hash}; # #[derive(PartialEq, Hash)] # struct Identifier; pub struct Version { /// The major version. pub major: u64, /// The minor version. pub minor: u64, /// The patch version. pub patch: u64, /// The pre-release version identifier. pub pre: Vec, /// The build metadata, ignored when /// determining version precedence. pub build: Vec, } impl cmp::PartialEq for Version { #[inline] fn eq(&self, other: &Version) -> bool { // We should ignore build metadata // here, otherwise versions v1 and // v2 can exist such that !(v1 < v2) // && !(v1 > v2) && v1 != v2, which // violate strict total ordering rules. self.major == other.major && self.minor == other.minor && self.patch == other.patch && self.pre == other.pre } } impl hash::Hash for Version { fn hash(&self, into: &mut H) { self.major.hash(into); self.minor.hash(into); self.patch.hash(into); self.pre.hash(into); } }