From e551658a630c729c11a531a03e1d77ed6c62feba Mon Sep 17 00:00:00 2001 From: "Kai A. Hiller" Date: Thu, 13 Aug 2020 12:56:45 +0200 Subject: [PATCH] Make model.Message order by date, then id --- fractal-gtk/src/model/message.rs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/fractal-gtk/src/model/message.rs b/fractal-gtk/src/model/message.rs index 8ac6dfcd..1bfa753b 100644 --- a/fractal-gtk/src/model/message.rs +++ b/fractal-gtk/src/model/message.rs @@ -49,19 +49,32 @@ pub struct Message { pub extra_content: Option, } +impl Eq for Message {} + impl PartialEq for Message { + /// Compares equal if ids match. fn eq(&self, other: &Self) -> bool { - self.id == other.id + // - Panics if ids are None. + // - Assumes the date is a function of the id. That means, two Messages + // with the same id will always have the same date. + self.id.as_ref().unwrap() == other.id.as_ref().unwrap() + } +} + +impl Ord for Message { + /// Orders based on date, then id. + fn cmp(&self, other: &Self) -> Ordering { + match self.date.cmp(&other.date) { + // Panics if ids are None + Ordering::Equal => self.id.as_ref().unwrap().cmp(&other.id.as_ref().unwrap()), + date_order => date_order, + } } } impl PartialOrd for Message { fn partial_cmp(&self, other: &Self) -> Option { - if self == other { - Some(Ordering::Equal) - } else { - self.date.partial_cmp(&other.date) - } + Some(self.cmp(other)) } }