chuigda / rsdl

Rusty, extended ASDL

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

告诉你一个生活开心的秘诀:少责备自己,多辱骂别人。被你骂的人都罪有应得,但别人骂你肯定是没素质!

----

RSDL 基于 Zephyr ASDL (https://www.cs.princeton.edu/~appel/papers/asdl97.pdf ),
用于从同一套类型定义生成不同语言的数据结构定义、序列化以及反序列化。RSDL 主要引入了预处理指令
#include,以及注解语法

目前支持的后端有:
  - Rust (by @NEETovo)
  - TypeScript (interface-based)

计划支持的后端有:
  - typeAssert
  - C++ + Qt + QtJSON
  - C + some json library

----

注解文档
  - 总则: 无论何时,注解的行为总是由生成器决定的,注解本身只是起到一种“建议”作用

通用注解
  - [boxed]
    在一些像 C++ 和 Rust 这样的值类型语言中,创建互递归的数据结构需要使用指针来
    引入间接性。boxed 用来建议生成器为指定的字段生成一个指针
  - [doc("docstring")] 或者 [doc = "docstring"]
    建议生成器为指定的实体生成文档注释
  - [doc_ctor("docstring")] 或者 [doc_ctor = "docstring"]
    在 SUM 类型中,建议生成器为指定的构造器对应生成的那个数据类型生成文档注释
    例如对于 Rust 目标,构造器上用 doc 指定的注释会被放置在对应的 enum variant 上
    而用 doc_ctor 指定的注释会被放置在为这个 enum variant 生成的 struct 类型上
  - [private]
    建议生成器将指定的实体设为私有
  - [inline]
    对别名类型生效,建议生成器不生成别名类型,而是将被别名的类型放置在使用到别名的地方

Rust 后端支持的注解
  - [rust_derive(traits)]
    为类型派生指定的 traits,traits 之间用逗号分隔
    如果对 SUM 类型使用,每个 enum variant 对应的 struct 类型都会被派生指定的 traits
  - [rust_attr(attributes)]
    为类型或者字段添加指定的 Rust attribute,attribute 语法和 Rust 总体上一致
  - [rust_serde]
    为类型派生 Serialize 和 Deserialize;如果应用于 SUM 类型,还会添加
    #[serde(tag = discriminant)]
  - [rust_rkyv]
    为类型派生 Archive

About

Rusty, extended ASDL

License:GNU Affero General Public License v3.0


Languages

Language:Rust 98.0%Language:TypeScript 2.0%