Most idiomatic way of declaring a deck in Rust I'm new at Rust and I'm trying to implement a cards' deck on Rust, I'm trying to use most idiomatic code I can, but since I'm new at this language, I'd like to hear advice from more experienced programmers. There's my code.
(P.D: Thanks in advance! :>)

use std::fmt;

use rand::seq::SliceRandom;
use rand::thread_rng;

#[derive(PartialEq)]
pub struct Card&lt;'a&gt; {
    name: &amp;'a str,
    value: i8,
    suit: char,
}

impl&lt;'a&gt; fmt::Debug for Card&lt;'a&gt; {
    fn fmt(&amp;self, f: &amp;mut fmt::Formatter) -&gt; fmt::Result {
        write!(f, "{} of {}", self.name, self.suit)
    }
}

pub struct Deck&lt;'a&gt; {
    pub cards: Vec&lt;Card&lt;'a&gt;&gt;,
}

impl&lt;'a&gt; Deck&lt;'a&gt; {
    const SUITS: [char; 4] = ['♥', '♦', '♣', '♠'];
    const CARDS: [(&amp;'a str, i8); 13] = [
        ("ACE", 11),
        ("TWO", 2),
        ("THREE", 3),
        ("FOUR", 4),
        ("FIVE", 5),
        ("SIX", 6),
        ("SEVEN", 7),
        ("EIGHT", 8),
        ("NINE", 9),
        ("TEN", 10),
        ("JACK", 10),
        ("QUEEN", 10),
        ("KING", 10),
    ];

    pub fn new() -&gt; Deck&lt;'a&gt; {
        let mut deck: Vec&lt;Card&gt; = Vec::new();

        for suit in Deck::SUITS.iter() {
            for (card_name, card_value) in Deck::CARDS.iter() {
                deck.push(Card {
                    name: card_name,
                    value: *card_value,
                    suit: *suit,
                });
            }
        }
        let mut rng = thread_rng();
        deck.shuffle(&amp;mut rng);

        Deck { cards: deck }
    }

    pub fn deal_card(&amp;mut self) -&gt; Card&lt;'a&gt; {
        if self.cards.is_empty() {
            self.initialize_deck()
        }
        self.cards.pop().unwrap()
    }

    pub fn get_initial_cards(&amp;mut self) -&gt; Vec&lt;Card&gt; {
        vec![self.deal_card(), self.deal_card()]
    }
    /// When the cards vector is empty, shuffle a new deck
    fn initialize_deck(&amp;mut self) {
        *self = Deck::new();
    }
}



EDIT: This module is meaned to be used with a BlackJack game, that is the reason because the cards have those particular values
You’ve made a fairly classic mistake when it comes to modeling cards in software. Cards have different values depending on the game. In some games, an Ace == 1, others 11, sometimes it could be either in the same game (Blackjack for example). Non-face cards aren’t always their value either. In some games, they’re all “5 points”, regardless of the number on the card. 

In short, the value of a particular card depends on the game, not the card. How might you redesign to account for that?