use serde::{Deserialize, Serialize};
use crate::{OutputFormat, Template};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct TaskData {
#[serde(default, skip_serializing_if = "crate::utils::is_default")]
pub output: OutputFormat,
pub data: serde_json::Value,
pub template: Template,
}
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
use serde_json::json;
use super::*;
use crate::InputFormat;
#[test]
fn serialize_roundtrip_no_defaults() {
let template = Template {
content: "Hello {{ addressed }}".to_string(),
format: InputFormat::Markdown,
autoescape: false,
};
let query = TaskData {
data: json!({"addressed": "world"}),
template,
output: OutputFormat::Docx {
theme: Some("dark".to_owned().try_into().unwrap()),
},
};
let json = json!({
"data": {
"addressed": "world",
},
"template": {
"content": "Hello {{ addressed }}",
"format": "markdown",
},
"output": {
"format": "docx",
"theme": "dark",
}
});
assert_eq!(json, serde_json::to_value(&query).unwrap());
assert_eq!(query, serde_json::from_value(json).unwrap());
}
#[test]
fn serialize_roundtrip_skipped_defaults() {
let template = Template {
content: "Hello {{ addressed }}".to_string(),
format: InputFormat::Markdown,
autoescape: false,
};
let query = TaskData {
data: json!({"addressed": "world"}),
template,
output: Default::default(),
};
let json = json!({
"data": {
"addressed": "world",
},
"template": {
"content": "Hello {{ addressed }}",
"format": "markdown",
},
});
assert_eq!(json, serde_json::to_value(&query).unwrap());
assert_eq!(query, serde_json::from_value(json).unwrap());
}
}