speki_core/
ledger.rs

1use std::collections::BTreeSet;
2
3use crate::{
4    audio::AudioId,
5    card::{AttributeId, Attrv2, BackSide, CardId, RawCard, TextData},
6    metadata::Metadata,
7    recall_rate::{Review, ReviewEvent},
8    CardType,
9};
10use ledgerstore::TheLedgerEvent;
11use omtrent::TimeStamp;
12use serde::{Deserialize, Serialize};
13
14pub type CardEvent = TheLedgerEvent<RawCard>;
15
16#[derive(Deserialize, Serialize, Clone, Debug, Hash)]
17pub enum CardAction {
18    SetFrontAudio(Option<AudioId>),
19    SetBackAudio(Option<AudioId>),
20    RemoveDependency(CardId),
21    AddDependency(CardId),
22    UpsertCard(CardType),
23    SetBackRef(CardId),
24    SetBackBool(bool),
25    SetBackTime(TimeStamp),
26    SetDefaultQuestion(Option<String>),
27    SetNamespace(Option<CardId>),
28    InsertAttr(Attrv2),
29    InsertAttrs(BTreeSet<Attrv2>),
30    RemoveAttr(AttributeId),
31    SetTrivial(bool),
32    SetParentClass(Option<CardId>),
33    SetInstanceClass(CardId),
34    AttributeType {
35        attribute: AttributeId,
36        back: BackSide,
37        instance: CardId,
38    },
39    NormalType {
40        front: TextData,
41        back: BackSide,
42    },
43    InstanceType {
44        front: TextData,
45        class: CardId,
46    },
47    StatementType {
48        front: TextData,
49    },
50    ClassType {
51        front: TextData,
52    },
53    UnfinishedType {
54        front: TextData,
55    },
56    EventType {
57        front: TextData,
58        start_time: TimeStamp,
59    },
60    SetBackside(Option<BackSide>),
61    SetFront(TextData),
62}
63
64pub enum HistoryEvent {
65    Review { id: CardId, review: Review },
66}
67
68pub type MetaEvent = TheLedgerEvent<Metadata>;
69
70#[derive(Debug, Clone, Serialize, Deserialize, Hash)]
71pub enum MetaAction {
72    Suspend(bool),
73    SetTrivial(Option<bool>),
74}
75
76impl From<MetaEvent> for Event {
77    fn from(event: MetaEvent) -> Self {
78        Event::Meta(event)
79    }
80}
81impl From<CardEvent> for Event {
82    fn from(event: CardEvent) -> Self {
83        Event::Card(event)
84    }
85}
86impl From<ReviewEvent> for Event {
87    fn from(event: ReviewEvent) -> Self {
88        Event::History(event)
89    }
90}
91
92pub enum Event {
93    Meta(MetaEvent),
94    History(ReviewEvent),
95    Card(CardEvent),
96}