use super::*;
impl CardBrand {
pub const fn as_str(&self) -> &'static str {
match self {
CardBrand::Visa => CARD_BRAND_VISA,
CardBrand::Mastercard => CARD_BRAND_MASTERCARD,
CardBrand::Amex => CARD_BRAND_AMEX,
CardBrand::Discover => CARD_BRAND_DISCOVER,
CardBrand::Jcb => CARD_BRAND_JCB,
CardBrand::Diners => CARD_BRAND_DINERS,
CardBrand::Unionpay => CARD_BRAND_UNIONPAY,
CardBrand::Other => CARD_BRAND_OTHER,
}
}
}
impl Display for CardBrand {
fn fmt(&self, formatter: &mut Formatter<'_>) -> fmt::Result {
write!(formatter, "{}", self.as_str())
}
}
impl FromStr for CardBrand {
type Err = StripeParseError;
fn from_str(text: &str) -> Result<Self, StripeParseError> {
match text {
CARD_BRAND_VISA => Ok(CardBrand::Visa),
CARD_BRAND_MASTERCARD => Ok(CardBrand::Mastercard),
CARD_BRAND_AMEX => Ok(CardBrand::Amex),
CARD_BRAND_DISCOVER => Ok(CardBrand::Discover),
CARD_BRAND_JCB => Ok(CardBrand::Jcb),
CARD_BRAND_DINERS => Ok(CardBrand::Diners),
CARD_BRAND_UNIONPAY => Ok(CardBrand::Unionpay),
_ => Ok(CardBrand::Other),
}
}
}
impl CardDetails {
pub const fn new(brand: CardBrand, last4: String, exp_month: i64, exp_year: i64) -> Self {
Self {
brand,
last4,
exp_month,
exp_year,
}
}
pub fn has_four_digit_tail(&self) -> bool {
self.get_last4().chars().count() == CARD_LAST4_CHARS
}
}