Why this matters

The bug. serde_json::from_str returns Result<Value, Error>. unwrap() is fine for tests and CLI tools; in a request handler it converts every malformed payload into a panic. Depending on your runtime (Tokio, Actix), a panic in one task can abort the whole worker thread.

The fix. The function already returns Result, so use ? and map the serde error into your own error type. Reviewers should treat unwrap/expect in non-CLI code as a code smell — even unwrap_or_default is usually safer.

Lint. clippy::unwrap_used and clippy::expect_used flag this when enabled — turn them on at the workspace level for service code.

Review heuristic

Every catch block should answer two questions in the diff or in a comment: which specific exceptions am I handling, and what do I do with the rest? catch (e) {} is the smoking gun; except: pass is its Python cousin.

External reference: CWE-248: Uncaught Exception.