Am 15/02/2024 um 13:39 schrieb Christoph Heiss: > +impl PartialEq for Fqdn { > + fn eq(&self, other: &Self) -> bool { > + // Case-insensitive comparison, as per RFC 952 "ASSUMPTIONS", > + // RFC 1035 sec. 2.3.3. "Character Case" and RFC 4343 as a whole > + let a = self > + .parts > + .iter() > + .map(|s| s.to_lowercase()) > + .collect::<Vec<String>>(); > + > + let b = other > + .parts > + .iter() > + .map(|s| s.to_lowercase()) > + .collect::<Vec<String>>(); > + > + a == b
could be probably more efficiently done by doing the comparison part wise, not on the whole thing, and with an early abort for mismatching part count, e.g., something like: if self.parts.len() != other.parts.len() { return false; } self.parts .iter() .zip(other.parts.iter()) .all(|(a, b)| a.to_lowercase() == b.to_lowercase()) > @@ -309,4 +329,10 @@ mod tests { > "foo.example.com" > ); > } > + > + #[test] > + fn fqdn_compare() { > + assert_eq!(Fqdn::from("example.com"), Fqdn::from("ExAmPle.Com")); > + assert_eq!(Fqdn::from("ExAmPle.Com"), Fqdn::from("example.com")); I always like throwing in some assert_ne ones for sanity checking (e.g., such optimization tries like above), as otherwise one won't notice if this is broken, like by just always returning false.. _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel