Make tool settings JSON errors safer

This commit is contained in:
Henry Sloan 2021-07-20 18:34:35 -04:00
parent 5edfa418d2
commit 99b26c9142
2 changed files with 9 additions and 6 deletions

View file

@ -56,6 +56,7 @@ interface NumberOption {
kind: "number";
initial: number;
step: number;
min?: number;
callback?: Function;
}
@ -116,7 +117,7 @@ export default defineComponent({
],
],
["Shape", [{ kind: "number", initial: 6, step: 1, min: 3, callback: this.setToolSettings }]],
]),
]) as ToolOptionsMap,
SeparatorType,
};
},

View file

@ -27,11 +27,13 @@ pub fn select_tool(tool: String) -> Result<(), JsValue> {
/// Update the settings for a given tool
#[wasm_bindgen]
pub fn set_tool_settings(tool: String, settings: &JsValue) -> Result<(), JsValue> {
let settings: ToolSettings = settings.into_serde().expect("Invalid JSON for ToolSettings");
EDITOR_STATE.with(|editor| match translate_tool(&tool) {
Some(tool) => editor.borrow_mut().handle_message(ToolMessage::SetToolSettings(tool, settings)).map_err(convert_error),
None => Err(Error::new(&format!("Couldn't select {} because it was not recognized as a valid tool", tool)).into()),
})
match settings.into_serde::<ToolSettings>() {
Ok(settings) => EDITOR_STATE.with(|editor| match translate_tool(&tool) {
Some(tool) => editor.borrow_mut().handle_message(ToolMessage::SetToolSettings(tool, settings)).map_err(convert_error),
None => Err(Error::new(&format!("Couldn't select {} because it was not recognized as a valid tool", tool)).into()),
}),
Err(err) => Err(Error::new(&format!("Invalud JSON for ToolSettings: {}", err)).into()),
}
}
#[wasm_bindgen]