use serde::Serialize;
use crate::AnkiRequest;
#[derive(Default, Debug, Clone, PartialEq, Eq, Serialize)]
pub struct StoreMediaFileRequest {
pub filename: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
}
impl AnkiRequest for StoreMediaFileRequest {
type Response = String;
const ACTION: &'static str = "storeMediaFile";
const VERSION: u8 = 6;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize_with_data() {
let request = StoreMediaFileRequest {
filename: "anki_bridge_test".to_string(),
data: Some("SGVsbG8sIHdvcmxkIQ==".to_string()),
..Default::default()
};
let json = serde_json::to_string_pretty(&request).unwrap();
assert_eq!(
json,
r#"{
"filename": "anki_bridge_test",
"data": "SGVsbG8sIHdvcmxkIQ=="
}"#
);
}
#[test]
fn test_serialize_with_path() {
let request = StoreMediaFileRequest {
filename: "anki_bridge_test".to_string(),
path: Some("/tmp/anki_bridge_test".to_string()),
..Default::default()
};
let json = serde_json::to_string_pretty(&request).unwrap();
assert_eq!(
json,
r#"{
"filename": "anki_bridge_test",
"path": "/tmp/anki_bridge_test"
}"#
);
}
#[test]
fn test_serialize_with_url() {
let request = StoreMediaFileRequest {
filename: "black_cat.jpg".to_string(),
url: Some("https://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/A_black_cat_named_Tilly.jpg/220px-A_black_cat_named_Tilly.jpg".to_string()),
..Default::default()
};
let json = serde_json::to_string_pretty(&request).unwrap();
assert_eq!(
json,
r#"{
"filename": "black_cat.jpg",
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c7/A_black_cat_named_Tilly.jpg/220px-A_black_cat_named_Tilly.jpg"
}"#
);
}
#[test]
fn test_deserialize() {
let response: <StoreMediaFileRequest as AnkiRequest>::Response =
serde_json::from_str("\"anki_bridge_test\"").unwrap();
assert_eq!(response, "anki_bridge_test");
}
}