mirror of
https://github.com/storytold/figcraft.git
synced 2026-10-24 02:16:56 -06:00
* chore: resolve SonarCloud maintainability issues - Define SHA256_FMT constant in packaging script to remove duplicated string literal (shelldre:S1192) - Remove redundant 'static lifetime annotations from const items (rust:S8863) - Replace closures with method and function pointers (rust:S1612) - Extract helper functions in synthetic document generation, bezier polyline flattening, and component restoration to reduce cognitive complexity (rust:S3776) * fix(packaging): use verify_sha256 helper function to avoid shellcheck SC2059 * fix(engine): remove duplicate closing brace in large_document * fix(engine): take &mut Document in restore_id_map; keep 'static on associated consts restore_id_map allocates ids, so it needs a mutable document. Elided lifetimes in associated consts trip elided_lifetimes_in_associated_constant, so those annotations are restored. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Assign positional parameters to locals in sha256 verification --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Dylan Taylor <dylan@craftmaker.dev>
20 lines
795 B
Rust
20 lines
795 B
Rust
//! The last line of defence: a panic inside a command becomes an [`EngineError::Internal`] and
|
|
//! the caller rolls the document back. It exists for bugs and doesn't replace `Result`.
|
|
|
|
use crate::{EngineError, Result};
|
|
|
|
pub fn run<T>(cmd: &str, f: impl FnOnce() -> Result<T>) -> Result<T> {
|
|
match std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)) {
|
|
Ok(r) => r,
|
|
Err(payload) => {
|
|
let msg = payload
|
|
.downcast_ref::<&str>()
|
|
.map(ToString::to_string)
|
|
.or_else(|| payload.downcast_ref::<String>().cloned())
|
|
.unwrap_or_else(|| "panic".to_string());
|
|
log::error!("command `{cmd}` panicked: {msg}");
|
|
Err(EngineError::Internal { cmd: cmd.to_string(), msg })
|
|
}
|
|
}
|
|
}
|