Skip to content

Commit 1bab5cc

Browse files
Adds 'Utils' module to generated output (#70)
Also streamlines the markup in all eex template files.
1 parent 544b926 commit 1bab5cc

31 files changed

+294
-259
lines changed

lib/printer/printer.ex

+13
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,22 @@ defmodule JS2E.Printer do
6262
@elm_package_location
6363
)
6464

65+
@utils_location Path.join(
66+
@templates_location,
67+
"utils/utils.elm.eex"
68+
)
69+
EEx.function_from_file(
70+
:defp,
71+
:utils_template,
72+
@utils_location,
73+
[:prefix]
74+
)
75+
6576
@spec print_schemas(Types.schemaDictionary(), String.t()) :: SchemaResult.t()
6677
def print_schemas(schema_dict, module_name \\ "") do
6778
init_file_dict = %{
79+
"./#{@output_location}/#{module_name}/Utils.elm" =>
80+
utils_template(module_name),
6881
"./#{@output_location}/package.json" => package_template(),
6982
"./#{@output_location}/elm-package.json" => elm_package_template()
7083
}

priv/templates/all_of/decoder.elm.eex

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<%= decoder_name %> : Decoder <%= type_name %>
22
<%= decoder_name %> =
3-
decode <%= type_name %><%#
4-
%><%= for clause <- clauses do %><%#
5-
%><%= if Map.has_key?(clause, :property_decoder) do %>
6-
|> custom (<%= clause.property_decoder %> |> andThen <%= clause.decoder %>)<%#
7-
%><% else %>
8-
|> custom <%= clause.decoder_name %><%#
9-
%><% end %><%#
10-
%><% end %>
3+
succeed <%= type_name %><%#
4+
%><%= for clause <- clauses do %>
5+
<%= if Map.has_key?(clause, :property_decoder) do %><%#
6+
%>|> custom (<%= clause.property_decoder %> |> andThen <%= clause.decoder %>)<%#
7+
%><% else %><%#
8+
%>|> custom <%= clause.decoder_name %><%#
9+
%><% end %><%#
10+
%><% end %>

priv/templates/all_of/encoder.elm.eex

+9-13
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
<%= encoder_name %> : <%= type_name %> -> Value
22
<%= encoder_name %> <%= argument_name %> =
3-
let<%= for property <- properties do %>
4-
<%= property.name %> =<%= if property.required == true do %>
5-
[ ( "<%= property.name %>", <%= property.encoder_name %> <%= argument_name %>.<%= property.parent_name %>.<%= property.name %> ) ]<% else %>
6-
<%= argument_name %>.<%= property.parent_name %>.<%= property.name %>
7-
|> Maybe.map
8-
(\<%= property.name %> ->
9-
[ ( "<%= property.name %>", <%= property.encoder_name %> <%= property.name %> ) ]
10-
)
11-
|> Maybe.withDefault []<% end %>
12-
<% end %><%#
13-
%> in
14-
object <|
15-
<%= Enum.map_join(properties, " ++ ", fn property -> property.name end) %>
3+
[]<%#
4+
%><%= for property <- properties do %>
5+
<%= if property.required == true do %><%#
6+
%>|> encodeRequired "<%= property.name %>" <%= argument_name %>.<%= property.parent_name %>.<%= property.name %> <%= property.encoder_name %><%#
7+
%><% else %><%#
8+
%>|> encodeOptional "<%= property.name %>" <%= argument_name %>.<%= property.parent_name %>.<%= property.name %> <%= property.encoder_name %><%#
9+
%><% end %><%#
10+
%><% end %>
11+
|> Encode.object

priv/templates/all_of/type.elm.eex

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
11
type alias <%= type_name %> =
2-
{ <%= for {field, idx} <- Enum.with_index(fields) do %><%#
3-
%><%= if idx == 0 do %><%#
4-
%><%= field.name %> : <%= field.type %><%#
5-
%><% else %>
6-
, <%= field.name %> : <%= field.type %><%#
7-
%><% end %><%#
8-
%><% end %>
2+
{ <%= Enum.map_join(fields, "\n , ", fn field -> "#{field.name} : #{field.type}" end) %>
93
}

priv/templates/any_of/decoder.elm.eex

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<%= decoder_name %> : Decoder <%= type_name %>
22
<%= decoder_name %> =
3-
decode <%= type_name %><%#
4-
%><%= for clause <- clauses do %><%#
5-
%><%= if Map.has_key?(clause, :property_decoder) do %>
6-
|> custom (nullable (<%= clause.property_decoder %> |> andThen <%= clause.decoder %>))<%#
7-
%><% else %>
8-
|> custom (nullable <%= clause.decoder_name %>)<%#
9-
%><% end %><%#
10-
%><% end %>
3+
succeed <%= type_name %><%#
4+
%><%= for clause <- clauses do %>
5+
<%= if Map.has_key?(clause, :property_decoder) do %><%#
6+
%>|> custom (nullable (<%= clause.property_decoder %> |> andThen <%= clause.decoder %>))<%#
7+
%><% else %><%#
8+
%>|> custom (nullable <%= clause.decoder_name %>)<%#
9+
%><% end %><%#
10+
%><% end %>

priv/templates/any_of/encoder.elm.eex

+9-18
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
11
<%= encoder_name %> : <%= type_name %> -> Value
22
<%= encoder_name %> <%= argument_name %> =
3-
let<%= for property <- properties do %>
4-
<%= property.name %> =
5-
<%= argument_name %>.<%= property.parent_name %>
6-
|> Maybe.map
7-
(\<%= property.parent_name %> -><%= if property.required == true do %>
8-
[ ( "<%= property.name %>", <%= property.encoder_name %> <%= property.parent_name %>.<%= property.name %> ) ]<% else %>
9-
<%= property.parent_name %>.<%= property.name %>
10-
|> Maybe.map
11-
(\<%= property.name %> ->
12-
[ ( "<%= property.name %>", <%= property.encoder_name %> <%= property.name %> ) ]
13-
)
14-
|> Maybe.withDefault []<% end %>
15-
)
16-
|> Maybe.withDefault []
17-
<% end %><%#
18-
%> in
19-
object <|
20-
<%= Enum.map_join(properties, " ++ ", fn property -> property.name end) %>
3+
[]<%#
4+
%><%= for property <- properties do %>
5+
<%= if property.required == true do %><%#
6+
%>|> encodeNestedRequired "<%= property.name %>" <%= argument_name %>.<%= property.parent_name %> .<%= property.name %> <%= property.encoder_name %><%#
7+
%><% else %><%#
8+
%>|> encodeNestedOptional "<%= property.name %>" <%= argument_name %>.<%= property.parent_name %> .<%= property.name %> <%= property.encoder_name %><%#
9+
%><% end %><%#
10+
%><% end %>
11+
|> Encode.object

priv/templates/any_of/type.elm.eex

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
11
type alias <%= type_name %> =
2-
{ <%= for {field, idx} <- Enum.with_index(fields) do %><%#
3-
%><%= if idx == 0 do %><%#
4-
%><%= field.name %> : <%= field.type %><%#
5-
%><% else %>
6-
, <%= field.name %> : <%= field.type %><%#
7-
%><% end %><%#
8-
%><% end %>
2+
{ <%= Enum.map_join(fields, "\n , ", fn field -> "#{field.name} : #{field.type}" end) %>
93
}

priv/templates/array/encoder.elm.eex

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
<%= encoder_name %> : List <%= items_type_name %> -> Value
22
<%= encoder_name %> <%= argument_name %> =
3-
Encode.list <| List.map <%= items_encoder_name %> <| <%= argument_name %>
3+
<%= argument_name %>
4+
|> List.map <%= items_encoder_name %>
5+
|> Encode.list

priv/templates/enum/decoder.elm.eex

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
|> andThen
55
(\<%= argument_name %> ->
66
case <%= argument_name %> of<%#
7-
%><%= for case <- cases do %>
7+
%><%= for case <- cases do %>
88
<%= case.raw_value %> ->
99
succeed <%= case.parsed_value %>
10-
<% end %>
10+
<%# %><% end %>
1111
_ ->
1212
fail <| "Unknown <%= argument_name %> type: " ++ <%= argument_name %>
1313
)

priv/templates/enum/encoder.elm.eex

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
%><%= for case <- cases do %>
55
<%= case.elm_value %> ->
66
<%= case.json_value %>
7-
<% end %>
7+
<%# %><% end %>

priv/templates/enum/type.elm.eex

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,2 @@
11
type <%= type_name %>
2-
= <%= for {clause, idx} <- Enum.with_index(clauses) do %><%#
3-
%><%= if idx == 0 do %><%#
4-
%><%= clause %><%#
5-
%><% else %>
6-
| <%= clause %><%#
7-
%><% end %><%#
8-
%><% end %>
2+
= <%= Enum.join(clauses, "\n | ") %>

priv/templates/object/decoder.elm.eex

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<%= decoder_name %> : Decoder <%= type_name %>
22
<%= decoder_name %> =
3-
decode <%= type_name %><%#
4-
%><%= for clause <- clauses do %>
3+
succeed <%= type_name %><%#
4+
%><%= for clause <- clauses do %>
55
|> <%= clause.option %> "<%= clause.property_name %>" <%= clause.decoder %><%#
6-
%><% end %>
6+
%><% end %>

priv/templates/object/encoder.elm.eex

+9-13
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
<%= encoder_name %> : <%= type_name %> -> Value
22
<%= encoder_name %> <%= argument_name %> =
3-
let<%= for property <- properties do %>
4-
<%= property.name %> =<%= if property.required == true do %>
5-
[ ( "<%= property.name %>", <%= property.encoder_name %> <%= argument_name %>.<%= property.name %> ) ]<% else %>
6-
case <%= argument_name %>.<%= property.name %> of
7-
Just <%= property.name %> ->
8-
[ ( "<%= property.name %>", <%= property.encoder_name %> <%= property.name %> ) ]
9-
10-
Nothing ->
11-
[]<% end %>
12-
<% end %><%#
13-
%> in
14-
object <|
15-
<%= Enum.map_join(properties, " ++ ", fn property -> property.name end) %>
3+
[]<%#
4+
%><%= for property <- properties do %>
5+
<%= if property.required == true do %><%#
6+
%>|> encodeRequired "<%= property.name %>" <%= argument_name %>.<%= property.name %> <%= property.encoder_name %><%#
7+
%><% else %><%#
8+
%>|> encodeOptional "<%= property.name %>" <%= argument_name %>.<%= property.name %> <%= property.encoder_name %><%#
9+
%><% end %><%#
10+
%><% end %>
11+
|> Encode.object

priv/templates/object/type.elm.eex

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
11
type alias <%= type_name %> =
2-
{ <%= for {field, idx} <- Enum.with_index(fields) do %><%#
3-
%><%= if idx == 0 do %><%#
4-
%><%= field.name %> : <%= field.type %><%#
5-
%><% else %>
6-
, <%= field.name %> : <%= field.type %><%#
7-
%><% end %><%#
8-
%><% end %>
2+
{ <%= Enum.map_join(fields, "\n , ", fn field -> "#{field.name} : #{field.type}" end) %>
93
}

priv/templates/one_of/decoder.elm.eex

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
11
<%= decoder_name %> : Decoder <%= decoder_type %>
22
<%= decoder_name %> =
3-
oneOf [ <%= for {clause_decoder, idx} <- Enum.with_index(clause_decoders) do %><%#
4-
%><%= if idx == 0 do %><%#
5-
%><%= clause_decoder %><%#
6-
%><% else %>
7-
, <%= clause_decoder %><%#
8-
%><% end %><%#
9-
%><% end %>
3+
oneOf [ <%= Enum.join(clause_decoders, "\n , ") %>
104
]

priv/templates/one_of/encoder.elm.eex

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
<%= encoder_name %> : <%= type_name %> -> Value
22
<%= encoder_name %> <%= argument_name %> =
3-
case <%= argument_name %> of
4-
<%= for case <- cases do %><%#
5-
%> <%= case.constructor %> ->
3+
case <%= argument_name %> of<%#
4+
%><%= for case <- cases do %>
5+
<%= case.constructor %> ->
66
<%= case.encoder %>
7-
8-
<% end %>
7+
<%# %><% end %>

priv/templates/one_of/type.elm.eex

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,2 @@
11
type <%= type_name %>
2-
= <%= for {clause, idx} <- Enum.with_index(clauses) do %><%#
3-
%><%= if idx == 0 do %><%#
4-
%><%= clause.name %> <%= clause.type %><%#
5-
%><% else %>
6-
| <%= clause.name %> <%= clause.type %><%#
7-
%><% end %><%#
8-
%><% end %>
2+
= <%= Enum.map_join(clauses, "\n | ", fn clause -> "#{clause.name} #{clause.type}" end) %>

priv/templates/preamble/preamble.elm.eex

+8-1
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,11 @@ import Json.Encode as Encode
3131
)
3232
<%= for import_name <- imports do %><%#
3333
%>import <%= prefix %><%= import_name %> as <%= import_name %>
34-
<% end %>
34+
<% end %><%#
35+
%>import <%= prefix %>Utils
36+
exposing
37+
( encodeNestedOptional
38+
, encodeNestedRequired
39+
, encodeOptional
40+
, encodeRequired
41+
)

priv/templates/tuple/decoder.elm.eex

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<%= decoder_name %> : Decoder <%= type_name %>
22
<%= decoder_name %> =
3-
Decode.map<%= Enum.count(clauses) %> (<%= Enum.map_join(clauses, ",", fn _ -> "" end)%>)<%#
4-
%><%= for {clause, idx} <- Enum.with_index(clauses) do %><%#
3+
Decode.map<%= Enum.count(clauses) %> (<%= Enum.map_join(clauses, ",", fn _ -> "" end) %>)<%#
4+
%><%= for {clause, idx} <- Enum.with_index(clauses) do %><%#
55
%><%= if Map.has_key?(clause, :property_decoder) do %>
66
(index <%= idx %> <%= clause.property_decoder %>) |> andThen <%= clause.decoder %>)<%#
77
%><% else %>
88
(index <%= idx %> <%= clause.decoder_name %>)<%#
99
%><% end %><%#
10-
%><% end %>
10+
%><% end %>

priv/templates/tuple/encoder.elm.eex

+5-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
<%= encoder_name %> : <%= type_name %> -> Value
22
<%= encoder_name %> (<%= Enum.map_join(properties, ", ", fn property -> property.name end) %>) =
3-
let<%= for property <- properties do %>
4-
encoded<%= property.name %> =
5-
<%= property.encoder_name %> <%= property.name %>
6-
<% end %><%#
7-
%> in
8-
list [<%= Enum.map_join(properties, ", ", fn property -> "encoded#{property.name}" end) %>]
9-
3+
[]<%#
4+
%><%= for property <- properties do %>
5+
|> (::) <%= property.encoder_name %> <%= property.name %><%#
6+
%><% end %>
7+
|> Encode.list

priv/templates/tuple/type.elm.eex

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
11
type alias <%= type_name %> =
2-
( <%= for {type_field, idx} <- Enum.with_index(type_fields) do %><%#
3-
%><%= if idx == 0 do %><%#
4-
%><%= type_field %><%#
5-
%><% else %>
6-
, <%= type_field %><%#
7-
%><% end %><%#
8-
%><% end %>
2+
( <%= Enum.join(type_fields, "\n , ") %>
93
)

priv/templates/union/decoder.elm.eex

+3-9
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
<%= decoder_name %> : Decoder <%= decoder_type %>
22
<%= decoder_name %> =
3-
oneOf [ <%= for {clause, idx} <- Enum.with_index(clauses) do %><%#
4-
%><%= if idx == 0 do %><%#
5-
%><%= clause.decoder_name %> |> andThen (<%= clause.wrapper %> << <%= clause.constructor_name %>)<%#
6-
%><% else %>
7-
, <%= clause.decoder_name %> |> andThen (<%= clause.wrapper %> << <%= clause.constructor_name %>)<%#
8-
%><% end %><%#
9-
%><% end %><%#
10-
%><%= if nullable? do %>
3+
oneOf [ <%= Enum.map_join(clauses, "\n , ", fn clause -> "#{clause.decoder_name} |> andThen (#{clause.wrapper} << #{clause.constructor_name})" end) %><%#
4+
%><%= if nullable? do %>
115
, null Nothing<%#
12-
%><% end %>
6+
%><% end %>
137
]

priv/templates/union/encoder.elm.eex

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
<%= encoder_name %> : <%= type_name %> -> Value
22
<%= encoder_name %> <%= argument_name %> =
3-
case <%= argument_name %> of
4-
<%= for case <- cases do %><%#
5-
%> <%= case.constructor %> ->
3+
case <%= argument_name %> of<%#
4+
%><%= for case <- cases do %>
5+
<%= case.constructor %> ->
66
<%= case.encoder %>
7-
8-
<% end %>
7+
<%# %><% end %>

priv/templates/union/type.elm.eex

+1-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,2 @@
11
type <%= type_name %>
2-
= <%= for {clause, idx} <- Enum.with_index(clauses) do %><%#
3-
%><%= if idx == 0 do %><%#
4-
%><%= clause.name %> <%= clause.type %><%#
5-
%><% else %>
6-
| <%= clause.name %> <%= clause.type %><%#
7-
%><% end %><%#
8-
%><% end %>
2+
= <%= Enum.map_join(clauses, "\n | ", fn clause -> "#{clause.name} #{clause.type}" end) %>

0 commit comments

Comments
 (0)