返回顶部
s

serde-code-reviewSerde代码审查

Reviews serde serialization code for derive patterns, enum representations, custom implementations, and common serialization bugs. Use when reviewing Rust code that uses serde, serde_json, toml, or any serde-based serialization format. Covers attribute macros, field renaming, and format-specific pitfalls.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.1
安全检测
已通过
92
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

serde-code-review

Serde 代码审查

审查工作流

  1. 1. 检查 Cargo.toml — 注意 serde 特性(derive、rc)、格式化 crate(serdejson、toml、bincode 等)以及 Rust 版本(2024 版本存在影响 serde 代码的破坏性变更)
  2. 检查 derive 使用 — 验证是否适当派生了 Serialize 和 Deserialize
  3. 检查枚举表示 — 枚举标记影响线格式兼容性和可读性
  4. 检查字段属性 — 重命名、默认值、跳过影响 API 契约
  5. 检查 2024 版本兼容性 — 保留的 gen 关键字、RPIT 生命周期捕获变更、nevertype_fallback
  6. 验证往返正确性 — 序列化的数据必须能反序列化回相同的值

输出格式

按以下格式报告发现:

text
[FILE:LINE] 问题标题
严重级别:严重 | 主要 | 次要 | 信息性
问题描述及其重要性说明。

快速参考

问题类型参考
派生模式、属性宏、字段配置references/derive-patterns.md
自定义 Serialize/Deserialize、格式相关问题
references/custom-serialization.md |

审查清单

派生使用

  • - [ ] 在跨越序列化边界的类型上使用 #[derive(Serialize, Deserialize)]
  • [ ] 在 serde 派生旁使用 #[derive(Debug)](用于调试序列化问题)
  • [ ] 当 serde 为可选时,使用特性门控派生:#[cfg_attr(feature = serde, derive(Serialize, Deserialize))]
  • [ ] 对于仅 serde 使用的字段,优先使用 #[expect(unused)] 而非 #[allow(unused)](自清理 lint 抑制,自 1.81 版本稳定)

枚举表示

  • - [ ] 枚举标记是显式的(不依赖 serde 默认的外部标记格式,如果意图使用其他格式)
  • [ ] 标记名称稳定且不会与字段名称冲突
  • [ ] #[serde(rename_all = ...)] 在整个 API 中一致使用

字段配置

  • - [ ] 对于可选字段使用 #[serde(skipserializingif = Option::isnone)](生成干净的 JSON 输出)
  • [ ] 对于应在反序列化时具有回退值的字段使用 #[serde(default)]
  • [ ] 当 Rust 字段名称与线格式不同时使用 #[serde(rename = ...)]
  • [ ] 谨慎使用 #[serde(flatten)](可能导致键冲突)
  • [ ] 在需要前向兼容性的类型上不要使用 #[serde(denyunknown_fields)]
  • [ ] 没有名为 gen 的字段或变体——在 2024 版本中是保留关键字(使用 r#gen 或重命名)

数据库集成(sqlx)

  • - [ ] #[derive(sqlx::Type)] 枚举使用与 serde 一致的表示
  • [ ] 枚举变体的大小写在 serde(renameall)和 sqlx(renameall)之间匹配

2024 版本兼容性

正确性

  • - [ ] 复杂类型存在往返测试(序列化 → 反序列化 → assert_eq)
  • [ ] 具有往返测试的类型派生了 PartialEq
  • [ ] 没有有损转换(例如 JSON 数字中的 f64 → i64)
  • [ ] 货币/精度敏感值使用 Decimal,而非 f64

严重级别校准

严重

  • - 序列化器和反序列化器之间的枚举表示不匹配(数据丢失)
  • 缺少 #[serde(rename)] 导致破坏 API 的字段名称变更
  • #[serde(flatten)] 导致静默键冲突
  • 有损数值转换(货币值的 f64 精度丢失)

主要

  • - 相关类型间的 renameall 不一致(令人困惑的 API)
  • 缺少 skipserializingif 导致输出中出现 null/空值噪音
  • 在由演进 API 消费的类型上使用 denyunknown_fields(破坏前向兼容性)
  • 复杂枚举表示缺少往返测试
  • 名为 gen 的字段或变体未使用 r#gen 转义(2024 版本编译失败)

次要

  • - 在必填字段上不必要的 #[serde(default)]
  • 当数值表示更高效时使用字符串表示枚举
  • 当派生加属性足够时使用冗长的自定义实现
  • 对于仅 serde 使用的字段,使用 #[allow(unused)] 而非 #[expect(unused)](优先使用自清理 lint 抑制)

信息性

  • - 建议切换枚举表示以获得更清晰的线格式
  • 建议在 serde 旁添加 #[non_exhaustive] 以实现前向兼容性

有效模式(不要标记)

提交发现前

在报告任何问题前,加载并遵循 beagle-rust:review-verification-protocol。

标签

skill ai
v1.0.1 最新 2026-4-13 11:56
- Added guidance for Rust edition 2024 compatibility, including checks for reserved keywords (`gen`) and lifetime capture in custom serializers.
- Updated review checklist to include lint/correct usage of `#[expect(unused)]` (stable since Rust 1.81) instead of `#[allow(unused)]`.
- Expanded severity calibration and explicit checks for edition 2024-specific pitfalls.
- Clarified valid patterns and added edition-specific recommendations for field naming and lifetime control.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部