#swift #ipc #schema #cargo #derive #code-generation #serialization

app cargo-cargo-derive-ipc-schema-for-swift

代码生成器到 IPC 到 Swift

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2018 年 5 月 15 日

#1337数据库接口

MIT 许可证

23KB
587

Rust -> Swift IPC 数据方案转换器

Eonil

为 IPC 生成 Swift 数据类型和序列化代码,用于 Rust。

您在 Rust 代码中定义数据方案,然后运行此工具以生成对应的 Swift 端数据类型和序列化。您可以使用 serde 在 Rust 端进行序列化,并将生成 Swift 端的序列化代码。

中间消息将使用 JSON 编码。

如何使用

  1. 创建一个名为 to_swift 的根级模块。
  2. 在其中定义消息数据类型。
  3. 在 Cargo 仓库根目录下运行此工具。

源代码树中包含示例。

类型映射

Rust 到 Swift。

std::bool                   <->     Bool
std::i64                    <->     Int64
std::f64                    <->     Float64
std::String                 <->     String
std::option::Option         <->     Optional
std::vec::Vec               <->     Array
(enum)                      <->     (enum)
(struct)                    <->     (struct)

不支持任何其他类型,代码生成器将报错。

  • 所有字段都必须是 pub
  • 生成的 Swift 端序列化代码仅支持默认的 serde 行为。任何自定义都不会工作。因此 不要自定义 serde 行为以使其在 Swift 端工作
  • 仅支持 JSON 容器协议。其他协议可能可以工作,如果可以在 Swift 端进行编码/解码,但尚未测试。

目标

  • 可靠性。
  • 简单性。
  • 易用性。

限制

  • 不支持 Box 类型。因此没有递归数据类型。
  • 不支持 HashMap(或任何其他关联集合)类型。

非目标

  • 性能。首先让它工作。
  • 除 JSON 以外的其他容器协议。
  • 泛型 enumstruct 类型。
  • 嵌套模块。所有类型都将放置在 Swift 的扁平命名空间中。

贡献和许可证

初始版本由 Eonil 编写。此项目采用“MIT 许可证”。任何贡献都将与该项目采用相同的许可证。

依赖项

~3.5–4.5MB
~94K SLoC