改进: state_portal.rs 中 expect 应改为 bail! (state_portal.rs:165) #9

Closed
opened 2026-06-04 20:59:16 +08:00 by dailz · 1 comment
Owner

位置

src/state_portal.rs:163-173

严重性

🟢

问题描述

main.rs 虽然已校验 output.is_none() && port == 0 的组合,但在 StatePortal::new 被库代码或测试直接调用时,该 expect 会导致 panic 而非可恢复的错误。

建议修复

改为 bail! 以返回 Result::Err,保持 API 的健壮性:

avhw::SwEncState::new(
    &drm_path,
    std::path::Path::new(self.args.output.as_deref().ok_or_else(|| anyhow::anyhow!("output required for MP4 mode"))?),
    // ...
)?
## 位置 `src/state_portal.rs:163-173` ## 严重性 🟢 低 ## 问题描述 `main.rs` 虽然已校验 `output.is_none() && port == 0` 的组合,但在 `StatePortal::new` 被库代码或测试直接调用时,该 `expect` 会导致 panic 而非可恢复的错误。 ## 建议修复 改为 `bail!` 以返回 `Result::Err`,保持 API 的健壮性: ```rust avhw::SwEncState::new( &drm_path, std::path::Path::new(self.args.output.as_deref().ok_or_else(|| anyhow::anyhow!("output required for MP4 mode"))?), // ... )? ```
dailz closed this issue 2026-06-06 20:20:00 +08:00
Author
Owner

修复方案

将 state_portal.rs 中两处 expect() 替换为 ok_or_else(..)? 错误传播,与函数返回类型 Result 及已有的 bail! 用法保持一致。

变更内容

1. webrtc_paused 解包(原第 167 行)

将 expect 改为 ok_or_else + ?,错误信息:internal invariant broken: webrtc_paused missing while WebRTC mode is active

2. output 解包(原第 184 行)

将 expect 改为 ok_or_else + ?,错误信息:--output is required in MP4 file output mode; use --port > 0 for WebRTC mode

验证

  • cargo check 编译通过,无新增 error
  • 54 个单元测试 + 3 个集成测试全部通过
  • 测试中的 unwrap 不在本次修复范围(#[cfg(test)] 内部)

Commit: d5679be

## 修复方案 将 state_portal.rs 中两处 expect() 替换为 ok_or_else(..)? 错误传播,与函数返回类型 Result<bool> 及已有的 bail! 用法保持一致。 ### 变更内容 **1. webrtc_paused 解包(原第 167 行)** 将 expect 改为 ok_or_else + ?,错误信息:internal invariant broken: webrtc_paused missing while WebRTC mode is active **2. output 解包(原第 184 行)** 将 expect 改为 ok_or_else + ?,错误信息:--output is required in MP4 file output mode; use --port > 0 for WebRTC mode ### 验证 - cargo check 编译通过,无新增 error - 54 个单元测试 + 3 个集成测试全部通过 - 测试中的 unwrap 不在本次修复范围(#[cfg(test)] 内部) Commit: d5679be
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dailz/wl-webrtc#9