use serde::{Deserialize, Serialize};
use crate::AnkiRequest;
use crate::entities::CardId;
#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GuiBrowseRequest {
pub query: String,
pub reorder_cards: Option<GuiBrowseReorderCards>,
}
#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct GuiBrowseReorderCards {
pub order: GuiBrowseReorderCardsOrder,
pub column_id: String,
}
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub enum GuiBrowseReorderCardsOrder {
#[default]
Ascending,
Descending,
}
impl AnkiRequest for GuiBrowseRequest {
type Response = Vec<CardId>;
const ACTION: &'static str = "guiBrowse";
const VERSION: u8 = 6;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
let request = GuiBrowseRequest {
query: "deck:current".to_string(),
reorder_cards: Some(GuiBrowseReorderCards {
order: GuiBrowseReorderCardsOrder::Descending,
column_id: "noteCrt".to_string(),
}),
};
let json = serde_json::to_string_pretty(&request).unwrap();
assert_eq!(
json,
r#"{
"query": "deck:current",
"reorderCards": {
"order": "descending",
"columnId": "noteCrt"
}
}"#
);
}
#[test]
fn test_deserialize() {
let json = "[1494723142483, 1494703460437, 1494703479525]";
let response: Vec<usize> = serde_json::from_str(json).unwrap();
assert_eq!(response, vec![1494723142483, 1494703460437, 1494703479525]);
}
}