ankiconnect_rs/models/
deck.rs

1//! Deck model definitions
2
3use crate::client::request::DeckStatsDto;
4
5/// Unique identifier for a deck
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7pub struct DeckId(pub u64);
8
9/// Represents an Anki deck
10#[derive(Debug, Clone, PartialEq, Eq)]
11pub struct Deck {
12    id: DeckId,
13    name: String,
14}
15
16impl Deck {
17    /// Creates a new deck with the given ID and name
18    pub fn new(id: u64, name: String) -> Self {
19        Self {
20            id: DeckId(id),
21            name,
22        }
23    }
24
25    /// Gets the ID of this deck
26    pub fn id(&self) -> DeckId {
27        self.id
28    }
29
30    /// Gets the name of this deck
31    pub fn name(&self) -> &str {
32        &self.name
33    }
34
35    /// Checks if this deck is a subdeck
36    pub fn is_subdeck(&self) -> bool {
37        self.name.contains("::")
38    }
39
40    /// Gets the parent deck name, if this is a subdeck
41    pub fn parent_name(&self) -> Option<&str> {
42        if self.is_subdeck() {
43            self.name.rsplit_once("::").map(|(parent, _)| parent)
44        } else {
45            None
46        }
47    }
48
49    /// Gets the immediate name of this deck (without parent hierarchy)
50    pub fn base_name(&self) -> &str {
51        if self.is_subdeck() {
52            self.name.rsplit_once("::").map(|(_, base)| base).unwrap()
53        } else {
54            &self.name
55        }
56    }
57}
58
59/// Represents deck configuration options
60#[derive(Debug, Clone)]
61pub struct DeckConfig {
62    pub id: u64,
63    pub name: String,
64    pub reuse_if_possible: bool,
65    pub disable_auto_qe: bool,
66}
67
68impl From<crate::client::request::DeckConfigDto> for DeckConfig {
69    fn from(dto: crate::client::request::DeckConfigDto) -> Self {
70        Self {
71            id: dto.id,
72            name: dto.name,
73            reuse_if_possible: dto.reuse_if_possible,
74            disable_auto_qe: dto.disable_auto_qe,
75        }
76    }
77}
78
79/// Statistics for a deck
80#[derive(Debug, Clone)]
81pub struct DeckStats {
82    pub deck_id: u64,
83    pub new_count: u32,
84    pub learn_count: u32,
85    pub review_count: u32,
86    pub total_in_deck: u32,
87}
88
89impl From<crate::client::request::DeckStatsDto> for DeckStats {
90    fn from(dto: DeckStatsDto) -> Self {
91        Self {
92            deck_id: dto.deck_id,
93            new_count: dto.new_count,
94            learn_count: dto.learn_count,
95            review_count: dto.review_count,
96            total_in_deck: dto.total_in_deck,
97        }
98    }
99}