use std::collections::HashMap;
use anyhow::Result;
use rhai::Dynamic;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Serialize, Deserialize)]
pub struct Card {
pub question: String,
pub answer: String,
pub seen_in_test: bool,
pub difficult: bool,
pub starred: bool,
pub method_data: Dynamic,
}
#[derive(Clone)]
pub struct SlimCard {
pub question: String,
pub answer: String,
pub difficult: bool,
pub starred: bool,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
pub enum CardType {
All,
Difficult,
Starred,
}
#[derive(Serialize, Deserialize)]
pub struct Set {
pub method: String,
pub cards: HashMap<Uuid, Card>,
pub run_state: Option<String>,
pub test_in_progress: bool,
}
impl Set {
pub fn save(&self) -> Result<String> {
let json = serde_json::to_string(&self)?;
Ok(json)
}
pub fn from_json(json: &str) -> Result<Self> {
let set = serde_json::from_str(json)?;
Ok(set)
}
pub(crate) fn reset_learn(&mut self, default_data: Dynamic) {
for card in self.cards.values_mut() {
card.method_data = default_data.clone();
}
}
pub(crate) fn reset_test(&mut self) {
for card in self.cards.values_mut() {
card.seen_in_test = false;
}
}
pub fn reset_stars(&mut self) {
for card in self.cards.values_mut() {
card.starred = false;
}
}
}