From: MA Beaudet Date: Wed, 10 Nov 2021 19:49:54 +0000 (+0100) Subject: feat: add conversion AsRef for cards and some delegate methods to cards X-Git-Url: https://git.beaudet.xyz/?a=commitdiff_plain;h=ab3e67e6fee15ca7d18d44bacc827c2489e0f720;p=poker-eval.git feat: add conversion AsRef for cards and some delegate methods to cards --- diff --git a/src/card.rs b/src/card.rs index 5595bf4..3e72a0f 100644 --- a/src/card.rs +++ b/src/card.rs @@ -14,12 +14,20 @@ impl Cards { Cards(Vec::new()) } - pub fn into_inner(self) -> Vec { - self.0.into_iter().map(|c| c.into_inner()).collect() + pub fn into_inner(self) -> Vec { + self.0 } - pub fn as_vec_card(&self) -> &Vec { - &self.0 + pub fn push(&mut self, value: Card) { + self.0.push(value) + } + + pub fn is_empty(&self) -> bool { + self.0.is_empty() + } + + pub fn len(&self) -> usize { + self.0.len() } } @@ -30,13 +38,42 @@ impl FromIterator for Cards { { let mut cards = Cards::new(); for i in iter { - cards.0.push(i) + cards.push(i) } cards } } +impl FromIterator for Vec { + fn from_iter(iter: T) -> Self + where + T: IntoIterator, + { + let mut v = Vec::new(); + for i in iter { + v.push(i.0) + } + v + } +} + +impl IntoIterator for Cards { + type Item = Card; + + type IntoIter = std::vec::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.0.into_iter() + } +} + +impl AsRef> for Cards { + fn as_ref(&self) -> &Vec { + &self.0 + } +} + impl Extend for Cards { fn extend(&mut self, iter: T) where @@ -72,7 +109,7 @@ impl std::fmt::Display for Cards { impl From for Vec { fn from(c: Cards) -> Self { - Vec::from(c.into_inner()) + c.into_iter().map(|card| card.into_inner()).collect() } } @@ -193,6 +230,12 @@ impl AsRef for Card { } } +impl AsRef for Card { + fn as_ref(&self) -> &Card { + self + } +} + impl TryFrom for Card { type Error = ParseCardError;