1 个不稳定版本
0.1.0 | 2019 年 9 月 10 日 |
---|
#40 in #auto-generate
17KB
403 行
Rust 到 Elm 类型生成器
此仓库包含从简单的 Rust 结构体到 Elm 类型的生成器。
示例
- 文件路径可以设置在名为 (ELM_TYPES) 的环境变量中。
- 文件路径可以作为 Elm 选项传递,这将覆盖环境变量路径。
-
示例 1
-
具有可选路径的结构体(路径是必填选项)
#[macro_use]
extern crate elm_rusty;
// Declare struct with Elm derive
// Here path is mandatory in elm opts or export in env variable as ELM_TYPES
#[derive(Elm)]
#[elm(opts(path = "/Users/abrarkhan/Documents/github/rust_elm_types"))]
struct Foo {
id: i32,
name: String,
}
在转换为模型后,每次运行 cargo build,check 或 test 首次运行时将生成相应的 Elm 代码。
module Foo exposing (..)
type alias Foo =
{ id: Int
, name: String
}
-
示例 2
-
具有可选路径和重命名的结构体
#[macro_use]
extern crate elm_rusty;
mod temp {
pub struct User {}
}
#[derive(Elm)]
#[elm(opts(rename = "ElmUser", path = "/Users/abrarkhan/Documents/github/rust_elm_types"))]
struct User {
name: Option<Vec<i32>>,
id: Vec<std::collections::HashMap<String, Vec<temp::User>>>,
vector: Vec<i32>,
}
module ElmUser exposing (..)
type alias ElmUser =
{ vector: List Int
, name: Maybe(List Int)
, id: List(Dict String(List User))
}
注意点
在这里,我没有处理递归自定义类型生成 Elm,因此它不会创建对应的 User.elm
-
示例 3
-
具有可选路径、Elm 类型重命名和字段重命名选项的结构体
#[macro_use]
extern crate elm_rusty;
mod temp {
pub struct User {}
}
#[derive(Elm)]
#[elm(opts(rename = "ElmUser", path = "/Users/abrarkhan/Documents/github/rust_elm_types"))]
struct User {
#[elm(rename = "foo")]
name: Option<Vec<i32>>,
id: Vec<std::collections::HashMap<String, Vec<temp::User>>>,
vector: Vec<i32>,
}
module ElmUser exposing (..)
type alias ElmUser =
{ id: List(Dict String(List User))
, foo: Maybe(List Int)
, vector: List Int
}
-
示例 4
-
具有可选路径、Elm 类型重命名和字段重命名选项的引用类型结构体
#[macro_use]
extern crate elm_rusty;
mod temp {
pub struct User {}
}
#[derive(Elm)]
#[elm(opts(rename = "ElmUser", path = "/Users/abrarkhan/Documents/github/rust_elm_types"))]
struct User<'a> {
#[elm(rename = "foo")]
name: Option<Vec<i32>>,
id: &'a Vec<std::collections::HashMap<String, Vec<temp::User>>>,
vector: Vec<i32>,
}
module ElmUser exposing (..)
type alias ElmUser =
{ id: List(Dict String(List User))
, foo: Maybe(List Int)
, vector: List Int
}
-
示例 5
-
没有 Elm 选项,将导出路径作为 ELM_TYPES="/Users/abrarkhan/Documents/github/rust_elm_types"
#[macro_use]
extern crate elm_rusty;
mod temp {
pub struct User {}
}
#[derive(Elm)]
struct User<'a> {
#[elm(rename = "foo")]
name: Option<Vec<i32>>,
id: &'a Vec<std::collections::HashMap<String, Vec<temp::User>>>,
vector: Vec<i32>,
}
module User exposing (..)
type alias User =
{ id: List(Dict String(List User))
, foo: Maybe(List Int)
, vector: List Int
}
路线图
- 从 Rust 结构体生成 Elm 类型别名。
- 递归类型检查。
- 自动导入 Elm 模块(如果它位于同一目录中)。
- 从 Rust 类型生成 Elm 类型。
- 从 Rust 类型生成 Elm 编码器。
- 从 Rust 类型生成 Elm 解码器。
依赖项
~2.5MB
~54K SLoC