#serde #serialization #convert #deserialize #declaration #type #avdl

avdl-serde-code-generator

一个将AVDL声明转换为Rust类型并支持serde的库

3个不稳定版本

0.2.0 2020年2月28日
0.1.1 2019年9月25日
0.1.0 2019年9月8日

#1055 in 编码

Download history 11/week @ 2024-02-15 32/week @ 2024-02-22 7/week @ 2024-02-29 8/week @ 2024-03-07 5/week @ 2024-03-14

56 个月下载量
5 个crate中使用(通过 keybase-protocol

Apache-2.0 OR MIT

35KB
1K SLoC

AVDL Rust代码生成器(带serde支持)

一个将AVDL声明转换为Rust类型并支持serde的库。

将这个

record Thread {
  @jsonkey("messages")
  array<Message> messages;
  @jsonkey("pagination")
  union { null, Pagination } pagination;
  @jsonkey("offline")
  boolean offline;
  @jsonkey("identify_failures")
  array<keybase1.TLFIdentifyFailure> identifyFailures;
  @jsonkey("ratelimits")
  array<RateLimitRes> rateLimits;
}

转换为这个

#[derive(Serialize, Deserialize, Debug)]
pub struct Thread {
  #[serde(rename = "messages")]
  #[serde(default)]
  pub messages: Option<Vec<Message>>,
  #[serde(rename = "pagination")]
  pub pagination: Option<Pagination>,
  #[serde(rename = "offline")]
  #[serde(default)]
  pub offline: Option<bool>,
  #[serde(rename = "identify_failures")]
  #[serde(default)]
  pub identifyFailures: Option<Vec<keybase1::TLFIdentifyFailure>>,
  #[serde(rename = "ratelimits")]
  #[serde(default)]
  pub rateLimits: Option<Vec<RateLimitRes>>,
}

为什么?

主要是为了将Keybase在其协议中定义的类型导出到Rust中使用。

用法

查看 to_rust::build_rust_code_from_avdl

依赖项

~4.5–6MB
~112K SLoC