use serde::Serialize;
use crate::AnkiRequest;
use crate::entities::CardId;
use crate::entities::Ease;
#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize)]
pub struct AnswerCardsRequest {
pub answers: Vec<Answer>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Answer {
pub card_id: CardId,
pub ease: Ease,
}
impl AnkiRequest for AnswerCardsRequest {
type Response = Vec<bool>;
const ACTION: &'static str = "answerCards";
const VERSION: u8 = 6;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
let request = AnswerCardsRequest {
answers: vec![
Answer {
card_id: 1498938915662,
ease: Ease::Hard,
},
Answer {
card_id: 1502098034048,
ease: Ease::Easy,
},
],
};
let json = serde_json::to_string_pretty(&request).unwrap();
assert_eq!(
json,
r#"{
"answers": [
{
"cardId": 1498938915662,
"ease": 2
},
{
"cardId": 1502098034048,
"ease": 4
}
]
}"#
);
}
#[test]
fn test_deserialize() {
let json = "[true, false]";
let response: <AnswerCardsRequest as AnkiRequest>::Response =
serde_json::from_str(json).unwrap();
assert_eq!(response, vec![true, false]);
}
}