elm_rusty

Crates.ioelm_rusty
lib.rselm_rusty
version0.1.0
sourcesrc
created_at2019-09-10 09:19:46.618052
updated_at2019-09-10 09:19:46.618052
descriptionAuto generate Rust models to Elm models
homepage
repositoryhttps://github.com/AbrarNitk/rust_elm_types
max_upload_size
id163771
size16,721
Abrar Khan (AbrarNitk)

documentation

README

Rust to Elm Type Generator

This repo contains simple rust struct to elm type generator.

Examples

  1. File Path may be set into env variable called (ELM_TYPES).
  2. File path may be passed as elm options, this will override env path.
  • Example 1

  • struct with option path(path is mandatory option)

#[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,
}

After change into models, When ever run cargo build, check or test first time it will generated corresponding Elm code.

module Foo exposing (..)

type alias Foo =
	{ id: Int
	, name: String
	}

  • Example 2

  • struct with option path and rename

 #[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))
	}

Note Point

Here, I did not handle recursively custom type derive Elm, so it won't create corresponding User.elm

  • Example 3

  • struct with option path, elm type rename and field rename option

#[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
	}

  • Example 4

  • struct(reference types) with option path, elm type rename and field rename option


#[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
	}

  • Example 5

  • without elm options and export path as 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
	}

RoadMap

  • Generate Elm types alias from Rust struct.
  • Make recursively type checks.
  • Auto Import of Elm modules, if it exists inside same dir.
  • Generate Elm types from Rust types.
  • Generate Elm encoders from Rust types.
  • Generate Elm decoders from Rust types.
Commit count: 23

cargo fmt