From 89b42ad234bab13854d80c60d7fcb24c25f31d8c Mon Sep 17 00:00:00 2001 From: Luuk van der Duim Date: Mon, 26 Jun 2023 00:46:44 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20zv:=20Do=20not=20derive=20Eq=20f?= =?UTF-8?q?or=20`Signature`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As per [`Eq`](https://doc.rust-lang.org/stable/std/cmp/trait.Eq.html#derivable) docs on deriving: "Note that the derive strategy requires all fields are `Eq, which isn’t always desired." We specify conditional `Signature` equality that does not include all fields are (derivable) `Eq`. This is why `Eq` for `Signature` is manually implemented. --- zvariant/src/signature.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/zvariant/src/signature.rs b/zvariant/src/signature.rs index 2f5100400..6bf7fcde8 100644 --- a/zvariant/src/signature.rs +++ b/zvariant/src/signature.rs @@ -96,7 +96,7 @@ impl<'b> std::ops::Deref for Bytes<'b> { /// /// [identifies]: https://dbus.freedesktop.org/doc/dbus-specification.html#type-system /// [`slice`]: #method.slice -#[derive(Eq, Hash, Clone)] +#[derive(Hash, Clone)] pub struct Signature<'a> { bytes: Bytes<'a>, pos: usize, @@ -445,6 +445,10 @@ impl<'a> PartialEq<&str> for Signature<'a> { } } +// According to the docs, `Eq` derive should only be used on structs if all its fields are +// are `Eq`. Hence the manual implementation. +impl Eq for Signature<'_> {} + impl<'a> Display for Signature<'a> { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { std::fmt::Display::fmt(&self.as_str(), f)