use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::types::NoteField;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CardInfo {
pub card_id: i64,
#[serde(default, alias = "nid")]
pub note_id: i64,
#[serde(default)]
pub deck_id: i64,
#[serde(default)]
pub deck_name: String,
#[serde(default)]
pub model_name: String,
#[serde(default)]
pub question: String,
#[serde(default)]
pub answer: String,
#[serde(default)]
pub fields: HashMap<String, NoteField>,
#[serde(default, rename = "type")]
pub card_type: i32,
#[serde(default)]
pub queue: i32,
#[serde(default)]
pub due: i64,
#[serde(default)]
pub interval: i64,
#[serde(default, alias = "factor")]
pub ease_factor: i64,
#[serde(default)]
pub reps: i64,
#[serde(default)]
pub lapses: i64,
#[serde(default)]
pub left: i64,
#[serde(default, alias = "mod")]
pub mod_time: i64,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CardModTime {
pub card_id: i64,
#[serde(rename = "mod")]
pub mod_time: i64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
#[repr(u8)]
pub enum Ease {
Again = 1,
Hard = 2,
Good = 3,
Easy = 4,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct CardAnswer {
pub card_id: i64,
pub ease: Ease,
}
impl CardAnswer {
pub fn new(card_id: i64, ease: Ease) -> Self {
Self { card_id, ease }
}
}
impl From<Ease> for i32 {
fn from(ease: Ease) -> i32 {
ease as i32
}
}