summaryrefslogtreecommitdiff
path: root/webapp/src/bridge_engine.rs
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/src/bridge_engine.rs')
-rw-r--r--webapp/src/bridge_engine.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/webapp/src/bridge_engine.rs b/webapp/src/bridge_engine.rs
index fd52c33..2161a53 100644
--- a/webapp/src/bridge_engine.rs
+++ b/webapp/src/bridge_engine.rs
@@ -243,12 +243,31 @@ pub enum ContractModifier {
Redoubled,
}
+impl fmt::Display for ContractModifier {
+ fn fmt(&self, f: &mut fmt::Formatter) -> std::result::Result<(), std::fmt::Error> {
+ match self {
+ ContractModifier::None => Ok(()),
+ ContractModifier::Doubled => write!(f, "x"),
+ ContractModifier::Redoubled => write!(f, "xx"),
+ }
+ }
+}
+
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
pub struct Contract {
highest_bid: Option<Raise>,
modifier: ContractModifier,
}
+impl fmt::Display for Contract {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> std::result::Result<(), fmt::Error> {
+ match self.highest_bid {
+ None => write!(f, "Passed"),
+ Some(bid) => write!(f, "{}{}", bid, self.modifier),
+ }
+ }
+}
+
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct Bidding {
pub dealer: Player,
@@ -389,6 +408,42 @@ mod tests {
}
#[test]
+ fn fmt_contract() {
+ assert_eq!(
+ format!(
+ "{}",
+ Contract {
+ highest_bid: None,
+ modifier: ContractModifier::None
+ }
+ ),
+ "Passed"
+ );
+
+ assert_eq!(
+ format!(
+ "{}",
+ Contract {
+ highest_bid: Some("1♥".parse().unwrap()),
+ modifier: ContractModifier::None
+ }
+ ),
+ "1♡"
+ );
+
+ assert_eq!(
+ format!(
+ "{}",
+ Contract {
+ highest_bid: Some("1♥".parse().unwrap()),
+ modifier: ContractModifier::Doubled
+ }
+ ),
+ "1♡x"
+ );
+ }
+
+ #[test]
fn bid_ord() {
let bid = |s| Raise::from_str(s).unwrap();
assert!(bid("2♦") < bid("3♦"));