#purescript #generate #type #generics #data #tuple #waterslide

purescript_waterslide_derive

从您的 Rust 类型生成 Purescript 类型(过程宏)

5 个不稳定版本

使用旧的 Rust 2015

0.3.1 2017 年 8 月 8 日
0.3.0 2017 年 8 月 5 日
0.2.1 2017 年 8 月 3 日
0.2.0 2017 年 8 月 1 日
0.1.0 2017 年 7 月 30 日

#109 in #generics

24 个月下载量

MIT/Apache

26KB
598

purescript-waterslide-rs

travis badge crates.io badge docs.rs badge

logo

注意:该库目前未维护。如果您想对此做些什么,请联系 @tomhoule。

您是否希望能够在 Rust 后端和 Purescript 应用程序之间共享数据类型定义?现在您可以做到了!

Waterslide 可以从 Rust 结构体和枚举生成 Purescript 类型定义。它可以在稳定的 Rust 上工作。

基本用法

  • 通过注释您的结构体和枚举以 #[derive(AsPursType)] 或手动实现 AsPursType(如果您有自定义序列化方案)来派生 Purescript 表示形式。
  • 使用 purs_module! 宏定义一个模块(例如 purs_module!("Data.Dogs".to_string() ; Dachsund, ChowChow, Mutt<Void, Void>))。
  • 使用 PursModuleDisplay 实现,将模块打印到 stdout 或直接写入文件。

您可能希望将模块生成代码放在一个单独的二进制文件中,这可以通过 Cargo 很容易实现。

重要:在 Purescript 一侧,您想要使用 Data.Argonaut.Generic.Aeson 编解码器来编码和解码 JSON 类型。

重要*:在 Rust 端,您的枚举必须使用以下注解:#[serde(tag = "tag", content = "contents")]

将来,随着与 serde_json 默认设置相匹配的 Argonaut 编解码器的开发,这些限制将被解除。

要运行代码,请参阅 基本示例。测试还提供了许多使用示例,特别是针对泛型类型。

功能

  • 结构和枚举定义,包括元组结构。
  • 原始类型和标准库集合(如 Vec...)的默认实现。
  • 泛型类型的支持(例如 Alternative<T, U>Paginated<T>...)。
  • 带有导入的整个模块生成。
  • 您可以通过手动实现 AsPursType(不稳定接口)来自定义表示形式。

路线图

我接下来几周想添加的东西(不分先后顺序)

  • 更多端到端测试以确保 serde_json 和 argonaut 之间的 JSON 表示形式兼容。
  • 更好的文档和示例

致谢

这个库的想法来自 Haskell 的 purescript-bridge 包。

贡献

那将是非常棒的!目前没有特定的拉取请求指南(也许将来会有)。我们遵循 Rust 代码行为准则

许可证

许可协议为以下之一

由您选择。

贡献

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中并由您提交的任何贡献,都应按上述方式双许可,不附加任何其他条款或条件。

依赖项

~2MB
~47K SLoC