#purescript #generate #type #definition #enums #data #waterslide

purescript_waterslide

从您的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日

2848Rust模式

每月25次 下载
用于 purescript_waterslide_der…

MIT/Apache

16KB
379

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实现将模块打印到标准输出或直接写入文件。

您可能想要将模块生成代码放入单独的二进制文件中,这可以通过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包。

贡献

那将太棒了!目前还没有特定的pull请求指南(可能在未来会有)。我们遵循Rust行为准则

许可证

以下任一许可证下授权:

由您选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,任何有意提交以包含在作品中的贡献,均将根据上述方式双授权,无需任何额外条款或条件。


lib.rs:

这个crate定义了将Rust数据类型转换为Purescript所需的数据类型。大多数用户只需要使用purescript_waterslide_derive crate derive AsPursType,并使用purs_module!宏来生成模块。

依赖

~0–340KB