ankiconnect_rs/models/
deck.rs1use crate::client::request::DeckStatsDto;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
7pub struct DeckId(pub u64);
8
9#[derive(Debug, Clone, PartialEq, Eq)]
11pub struct Deck {
12 id: DeckId,
13 name: String,
14}
15
16impl Deck {
17 pub fn new(id: u64, name: String) -> Self {
19 Self {
20 id: DeckId(id),
21 name,
22 }
23 }
24
25 pub fn id(&self) -> DeckId {
27 self.id
28 }
29
30 pub fn name(&self) -> &str {
32 &self.name
33 }
34
35 pub fn is_subdeck(&self) -> bool {
37 self.name.contains("::")
38 }
39
40 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 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#[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#[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}