diff options
-rw-r--r-- | src/main.rs | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs index ff00732..40f434c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -143,7 +143,7 @@ pub struct LogResult { } /// A player. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Player { /// Account name of the player. account_name: String, @@ -157,6 +157,22 @@ pub struct Player { guild_id: Option<String>, } +impl PartialOrd for Player { + fn partial_cmp(&self, other: &Player) -> Option<std::cmp::Ordering> { + Some(self.cmp(other)) + } +} + +impl Ord for Player { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + (self.subgroup, &self.account_name, &self.character_name).cmp(&( + other.subgroup, + &other.account_name, + &other.character_name, + )) + } +} + /// Outcome of the fight. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum FightOutcome { @@ -485,7 +501,7 @@ fn extract_info(entry: &DirEntry, log: &Log) -> LogResult { guild_id: guild_ids.get(&p.addr()).cloned(), }) .collect::<Vec<Player>>(); - players.sort_by_key(|p| p.subgroup); + players.sort(); LogResult { log_file: entry.path().to_path_buf(), |