字段属性

要忽略某个字段或变体(variant),可使用 #[serde(skip)] 进行标注。这在传递部分私有数据时很有用,因为它允许您指定哪些数据暴露给 Dart。有关 Serde 如何处理此属性的更多信息,请参阅 Serde 关于变体(variant)字段属性的文档。

Rust
#[derive(Serialize, RustSignal)]
struct UpdateMessage {
  event: String,
  struct_data: StructData,
  enum_data: EnumData,
}

#[derive(Serialize, SignalPiece)]
struct StructData {
  my_public_field: bool,
  #[serde(skip)]
  my_private_field: bool,
}

#[derive(Serialize, SignalPiece)]
enum EnumData {
  Variant1(i32, #[serde(skip)] i32),
  Variant2 {
    my_public_field: bool,
    #[serde(skip)]
    my_private_field: bool,
  },
}

Serde 的某些属性在编译时是被禁止使用的。这是因为 rinf gen 通过读取类型注解来静态分析 Rust 代码,而它无法推断 #[serde(with = "...")] 等特殊 Serde 属性背后的类型。这种机制确保了 rinf gen 始终能从 Rust 结构体生成完全对应的 Dart 代码。