Export: an unknown format is an error instead of a deckcraft file

file.export with an explicit format outside png, jpeg, jpg, pdf, pptx, potx,
ppsx, deckcraft, outline and txt fell through to the native deckcraft zip, so a
request for "docx" reported success and wrote a deckcraft archive under that
name. It now returns an error and writes nothing. A format inferred from the
file extension behaves as before.
This commit is contained in:
Mikkel Georgsen
2026-10-10 22:04:58 +02:00
parent d556ff98b5
commit 20366a8ea9
2 changed files with 15 additions and 2 deletions
+3 -2
View File
@@ -264,11 +264,12 @@ fn export(s: &mut Session, p: &Value) -> Result<Value> {
write_file(&path, &bytes)?;
Ok(json!({"path": path, "bytes": bytes.len()}))
}
other => {
let bytes = save_bytes(&st.doc, other)?;
"pptx" | "potx" | "ppsx" | "deckcraft" | "outline" | "txt" => {
let bytes = save_bytes(&st.doc, &format)?;
write_file(&path, &bytes)?;
Ok(json!({"path": path, "bytes": bytes.len()}))
}
other => Err(bad("file.export", format!("unknown format `{other}`"))),
}
}
+12
View File
@@ -117,3 +117,15 @@ fn export_tool_lists_pdf_and_its_options() {
}
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn export_rejects_unknown_format() {
let mut s = Server::new(Box::new(Headless::new()));
tool(&mut s, "new_presentation", json!({"theme": "Harbor"}));
let path = std::env::temp_dir().join(format!("deckcraft-mcp-unknown-format-{}.docx", std::process::id()));
let _ = std::fs::remove_file(&path);
let r = call(&mut s, 1, "tools/call", json!({"name": "export", "arguments": {"path": path.to_str().unwrap(), "format": "docx"}}));
assert_eq!(r["result"]["isError"], true, "{r}");
assert!(r["result"]["content"][0]["text"].as_str().unwrap().contains("docx"), "{r}");
assert!(!path.exists(), "nothing may be written for an unknown format");
}