use serde::{Deserialize, Serialize};
use crate::AnkiRequest;
use crate::entities::{NoteId, Timestamp};
#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize)]
pub struct NotesModTimeRequest {
pub notes: Vec<NoteId>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct NotesModTimeResponseEntry {
pub note_id: NoteId,
#[serde(rename = "mod")]
pub modified_time: Timestamp,
}
impl AnkiRequest for NotesModTimeRequest {
type Response = Vec<NotesModTimeResponseEntry>;
const ACTION: &'static str = "notesModTime";
const VERSION: u8 = 6;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
let request = NotesModTimeRequest {
notes: vec![1502298033753, 1751622202450],
};
let json = serde_json::to_string_pretty(&request).unwrap();
assert_eq!(
json,
r#"{
"notes": [
1502298033753,
1751622202450
]
}"#
);
}
#[test]
fn test_deserialize() {
let json = r#"[
{
"noteId": 1498938915662,
"mod": 1629454092
},
{
"noteId": 1502298033753,
"mod": 1751636704
}
]"#;
let response: <NotesModTimeRequest as AnkiRequest>::Response =
serde_json::from_str(json).unwrap();
assert_eq!(
response,
vec![
NotesModTimeResponseEntry {
note_id: 1498938915662,
modified_time: 1629454092
},
NotesModTimeResponseEntry {
note_id: 1502298033753,
modified_time: 1751636704
}
]
);
}
}