From 776571bc5e90aedf4c89852b8b0e3c3e6278291f Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Tue, 10 Mar 2026 20:34:07 +0000 Subject: [PATCH] Return result instead of panicking --- src/wasm.rs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/wasm.rs b/src/wasm.rs index 959f1a6..809bf79 100644 --- a/src/wasm.rs +++ b/src/wasm.rs @@ -101,21 +101,22 @@ pub fn diff(parent: &str, changed: &TextWithCursors, tokenizer: BuiltinTokenizer /// Returns a JS error if the diff format is invalid or references ranges /// exceeding the original text length. #[wasm_bindgen(js_name = undiff)] -#[must_use] -pub fn undiff(parent: &str, diff: Vec, tokenizer: BuiltinTokenizer) -> String { +pub fn undiff( + parent: &str, + diff: Vec, + tokenizer: BuiltinTokenizer, +) -> Result { set_panic_hook(); - match EditedText::from_diff( - parent, - diff.into_iter() - .map(std::convert::TryInto::try_into) - .collect::>() - .expect("Invalid diff format"), - &*tokenizer, - ) { - Ok(edited_text) => edited_text.apply().text(), - Err(e) => panic!("{}", e), - } + let parsed_diff: Vec<_> = diff + .into_iter() + .map(std::convert::TryInto::try_into) + .collect::>() + .map_err(|e: crate::types::number_or_text::DeserialisationError| -> JsValue { e.into() })?; + + EditedText::from_diff(parent, parsed_diff, &*tokenizer) + .map(|edited_text| edited_text.apply().text()) + .map_err(|e| JsValue::from_str(&e.to_string())) } fn set_panic_hook() {