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 个月下载量
26KB
598 行
purescript-waterslide-rs
注意:该库目前未维护。如果您想对此做些什么,请联系 @tomhoule。
您是否希望能够在 Rust 后端和 Purescript 应用程序之间共享数据类型定义?现在您可以做到了!
Waterslide 可以从 Rust 结构体和枚举生成 Purescript 类型定义。它可以在稳定的 Rust 上工作。
基本用法
- 通过注释您的结构体和枚举以
#[derive(AsPursType)]
或手动实现AsPursType
(如果您有自定义序列化方案)来派生 Purescript 表示形式。 - 使用
purs_module!
宏定义一个模块(例如purs_module!("Data.Dogs".to_string() ; Dachsund, ChowChow, Mutt<Void, Void>)
)。 - 使用
PursModule
的Display
实现,将模块打印到 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 License,版本 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您选择。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在作品中并由您提交的任何贡献,都应按上述方式双许可,不附加任何其他条款或条件。
依赖项
~2MB
~47K SLoC