use serde::Serialize;
use crate::AnkiRequest;
use crate::entities::NoteId;
use crate::note_actions::add_note;
#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize)]
pub struct AddNotesRequest {
pub notes: Vec<add_note::AddNoteEntry>,
}
impl AnkiRequest for AddNotesRequest {
type Response = Vec<NoteId>;
const ACTION: &'static str = "addNotes";
const VERSION: u8 = 6;
}
#[cfg(test)]
mod tests {
use super::add_note::AddNoteEntry;
use super::*;
use std::collections::HashMap;
#[test]
fn test_serialize() {
let request = AddNotesRequest {
notes: vec![
AddNoteEntry {
deck_name: "College::PluginDev".to_string(),
model_name: "non_existent_model".to_string(),
fields: HashMap::from([
(
"Front".to_string(),
"What is the capital of France?".to_string(),
),
("Back".to_string(), "Paris".to_string()),
]),
..Default::default()
},
AddNoteEntry {
deck_name: "College::PluginDev".to_string(),
model_name: "Basic".to_string(),
fields: HashMap::from([
(
"Front".to_string(),
"What is the capital of Germany?".to_string(),
),
("Back".to_string(), "Berlin".to_string()),
]),
..Default::default()
},
],
};
let json = serde_json::to_string_pretty(&request).unwrap();
assert_eq!(
json,
r#"{
"notes": [
{
"deckName": "College::PluginDev",
"modelName": "non_existent_model",
"fields": {
"Back": "Paris",
"Front": "What is the capital of France?"
},
"options": {
"allowDuplicate": false,
"duplicateScope": "deck",
"duplicateScopeOptions": {
"deckName": null,
"checkChildren": false,
"checkAllModels": false
}
},
"tags": [],
"audio": [],
"video": [],
"picture": []
},
{
"deckName": "College::PluginDev",
"modelName": "Basic",
"fields": {
"Back": "Berlin",
"Front": "What is the capital of Germany?"
},
"options": {
"allowDuplicate": false,
"duplicateScope": "deck",
"duplicateScopeOptions": {
"deckName": null,
"checkChildren": false,
"checkAllModels": false
}
},
"tags": [],
"audio": [],
"video": [],
"picture": []
}
]
}"#
);
}
#[test]
fn test_deserialize() {
let json = "[1496198395707, 1496198395708]";
let response: <AddNotesRequest as AnkiRequest>::Response =
serde_json::from_str(json).unwrap();
assert_eq!(response, vec![1496198395707, 1496198395708]);
}
}