Skip to content

Commit 030d9e4

Browse files
committed
docs: update CLAUDE.md with inspect usage preference
1 parent eefc507 commit 030d9e4

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

CLAUDE.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,51 @@ let entries = vec![(key, value)];
112112
batch.put_batch(Table::X, entries).expect("msg");
113113
```
114114

115+
### Error Handling Patterns
116+
117+
**Use `inspect` and `inspect_err` for side-effect-only error handling:**
118+
```rust
119+
// ✅ GOOD: Use inspect_err when only logging or performing side effects on error
120+
result
121+
.inspect_err(|err| warn!(%err, "Operation failed"));
122+
123+
// Extract complex expressions to variables for cleaner formatting
124+
let response = Response::success(ResponsePayload::BlocksByRoot(blocks));
125+
server.swarm.behaviour_mut().req_resp.send_response(channel, response)
126+
.inspect_err(|err| warn!(%peer, ?err, "Failed to send response"));
127+
128+
// ✅ GOOD: Use inspect + inspect_err when both branches need side effects
129+
operation()
130+
.inspect(|_| metrics::inc_success())
131+
.inspect_err(|_| metrics::inc_failed());
132+
133+
// ❌ AVOID: Using if let Err when only performing side effects
134+
if let Err(err) = result {
135+
warn!(%err, "Operation failed");
136+
}
137+
138+
// ❌ AVOID: Using if/else for both success and error side effects
139+
if let Err(err) = operation() {
140+
metrics::inc_failed();
141+
} else {
142+
metrics::inc_success();
143+
}
144+
```
145+
146+
**When NOT to use `inspect_err`:**
147+
```rust
148+
// Use if let Err or match when:
149+
// 1. Early return needed
150+
if let Err(err) = operation() {
151+
error!(%err, "Fatal error");
152+
return false;
153+
}
154+
155+
// 2. Error needs transformation (use map_err + ?)
156+
let result = operation()
157+
.map_err(|err| CustomError::from(err))?;
158+
```
159+
115160
### Metrics (RAII Pattern)
116161
```rust
117162
// Timing guard automatically observes duration on drop

0 commit comments

Comments
 (0)