use serde::{Deserialize, Serialize};
use crate::doc::Target;
use crate::wire::render::TemplateFormat;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct CapabilitiesResponse {
pub targets: Vec<Target>,
pub template_formats: Vec<TemplateFormat>,
pub max_upload_bytes: u64,
pub version: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn round_trips_through_json() {
let res = CapabilitiesResponse {
targets: vec![Target::Pdf, Target::PdfPresentation, Target::Docx],
template_formats: vec![TemplateFormat::Pdf, TemplateFormat::Html],
max_upload_bytes: 268_435_456,
version: "0.3.0".to_string(),
};
let json = serde_json::to_string(&res).unwrap();
assert_eq!(
serde_json::from_str::<CapabilitiesResponse>(&json).unwrap(),
res
);
}
#[test]
fn targets_serialize_as_their_kebab_case_strings() {
let res = CapabilitiesResponse {
targets: vec![Target::HtmlReveal],
template_formats: vec![],
max_upload_bytes: 0,
version: String::new(),
};
let json = serde_json::to_value(&res).unwrap();
assert_eq!(json["targets"], serde_json::json!(["html-reveal"]));
}
}