Skip to content

Commit 07db785

Browse files
author
Matt Goldberg
committed
fix: align CardPlay ordering semantics
1 parent acbdc3f commit 07db785

File tree

1 file changed

+10
-17
lines changed

1 file changed

+10
-17
lines changed

types/src/card_play.rs

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use itertools::Itertools;
55

66
use crate::card::Card;
77

8-
#[derive(PartialEq, Eq, Copy, Clone, Debug, Ord)]
8+
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
99
pub enum CardPlay {
1010
Single(Card),
1111
Pair(Card, Card),
@@ -28,22 +28,15 @@ impl Display for CardPlay {
2828

2929
impl PartialOrd for CardPlay {
3030
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
31-
if std::mem::discriminant(self) != std::mem::discriminant(other) {
32-
return None;
33-
}
34-
let our_card = match self {
35-
CardPlay::Single(card) => card,
36-
CardPlay::Pair(card, _) => card,
37-
CardPlay::Triple(card, _, _) => card,
38-
CardPlay::Quad(card, _, _, _) => card,
39-
};
40-
let their_card = match other {
41-
CardPlay::Single(card) => card,
42-
CardPlay::Pair(card, _) => card,
43-
CardPlay::Triple(card, _, _) => card,
44-
CardPlay::Quad(card, _, _, _) => card,
45-
};
46-
our_card.partial_cmp(their_card)
31+
Some(self.cmp(other))
32+
}
33+
}
34+
35+
impl Ord for CardPlay {
36+
fn cmp(&self, other: &Self) -> Ordering {
37+
self.size()
38+
.cmp(&other.size())
39+
.then_with(|| self.value().cmp(&other.value()))
4740
}
4841
}
4942

0 commit comments

Comments
 (0)