use serde::Serialize;
use crate::AnkiRequest;
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct FindAndReplaceInModelsRequest {
pub model_name: String,
pub find_text: String,
pub replace_text: String,
pub front: bool,
pub back: bool,
pub css: bool,
}
impl Default for FindAndReplaceInModelsRequest {
fn default() -> Self {
Self {
model_name: "".to_string(),
find_text: "".to_string(),
replace_text: "".to_string(),
front: true,
back: true,
css: true,
}
}
}
impl AnkiRequest for FindAndReplaceInModelsRequest {
type Response = usize;
const ACTION: &'static str = "findAndReplaceInModels";
const VERSION: u8 = 6;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
let request = FindAndReplaceInModelsRequest {
model_name: "My Model".to_string(),
find_text: "old_text".to_string(),
replace_text: "new_text".to_string(),
front: true,
back: true,
css: false,
};
let json = serde_json::to_string_pretty(&request).unwrap();
assert_eq!(
json,
r#"{
"modelName": "My Model",
"findText": "old_text",
"replaceText": "new_text",
"front": true,
"back": true,
"css": false
}"#
);
}
#[test]
fn test_serialize_no_model_name() {
let request = FindAndReplaceInModelsRequest {
model_name: "".to_string(),
..Default::default()
};
let json = serde_json::to_string_pretty(&request).unwrap();
assert_eq!(
json,
r#"{
"modelName": "",
"findText": "",
"replaceText": "",
"front": true,
"back": true,
"css": true
}"#
);
}
#[test]
fn test_deserialize() {
let json = "2";
let response: <FindAndReplaceInModelsRequest as AnkiRequest>::Response =
serde_json::from_str(json).unwrap();
assert_eq!(response, 2);
}
}