diff --git a/src/core/card.rs b/src/core/card.rs index 27ce71b..b7b8ca0 100644 --- a/src/core/card.rs +++ b/src/core/card.rs @@ -299,23 +299,32 @@ impl From for Card { } impl TryFrom for Card { - type Error = &'static str; + type Error = String; fn try_from(s: String) -> Result { if s.len() != 2 { - return Err("Card string is not exactly a length of 2"); + return Err(format!( + r#"Card string "{}" is not exactly a length of 2"#, + s + )); } let mut chars = s.chars(); let value = Value::try_from(chars.next().unwrap()); if value.is_err() { - return Err("Card value was not a valid character"); + return Err(format!( + r#"Card value "{}" was not a valid character"#, + value.unwrap_err() + )); } let value = value.unwrap(); let suit = Suit::try_from(chars.next().unwrap()); if suit.is_err() { - return Err("Card suit was not a valid character"); + return Err(format!( + r#"Card suit "{}" was not a valid character"#, + suit.unwrap_err() + )); } let suit = suit.unwrap(); @@ -330,7 +339,7 @@ impl From for String { } impl FromStr for Card { - type Err = &'static str; + type Err = String; fn from_str(s: &'_ str) -> Result { Self::try_from(s.to_string()) } @@ -397,4 +406,22 @@ mod tests { assert_eq!(card.to_int(), 49); } } + + #[test] + fn conversion_error() { + assert_eq!( + Card::from_str("xh").unwrap_err(), + r#"Card value "x" was not a valid character"# + ); + + assert_eq!( + Card::from_str("Ky").unwrap_err(), + r#"Card suit "y" was not a valid character"#, + ); + + assert_eq!( + Card::from_str("abc").unwrap_err(), + r#"Card string "abc" is not exactly a length of 2"#, + ); + } }