Skip to content

Commit bed83c0

Browse files
#40: Adds explicit handling of 'boolean' json type (#42)
Closes #40
1 parent 39db031 commit bed83c0

File tree

9 files changed

+197
-48
lines changed

9 files changed

+197
-48
lines changed

lib/printers/all_of_printer.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ defmodule JS2E.Printers.AllOfPrinter do
6464
type: field_type}
6565
end
6666

67+
6768
@spec create_type_name(Types.typeDefinition) :: String.t
6869
defp create_type_name(property_type) do
6970

@@ -77,6 +78,9 @@ defmodule JS2E.Printers.AllOfPrinter do
7778
"number" ->
7879
"Float"
7980

81+
"boolean" ->
82+
"Bool"
83+
8084
_ ->
8185
upcase_first property_type_value
8286
end
@@ -156,6 +160,9 @@ defmodule JS2E.Printers.AllOfPrinter do
156160
"number" ->
157161
"Decode.float"
158162

163+
"boolean" ->
164+
"Decode.bool"
165+
159166
_ ->
160167
"Decode.#{property_type_value}"
161168
end

lib/printers/any_of_printer.ex

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ defmodule JS2E.Printers.AnyOfPrinter do
7878
"number" ->
7979
"Float"
8080

81+
"boolean" ->
82+
"Bool"
83+
8184
_ ->
8285
upcase_first property_type_value
8386
end
@@ -157,6 +160,9 @@ defmodule JS2E.Printers.AnyOfPrinter do
157160
"number" ->
158161
"Decode.float"
159162

163+
"boolean" ->
164+
"Decode.bool"
165+
160166
_ ->
161167
"Decode.#{property_type_value}"
162168
end

lib/printers/array_printer.ex

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,20 @@ defmodule JS2E.Printers.ArrayPrinter do
5353
@spec determine_decoder_name(Types.typeDefinition) :: String.t
5454
defp determine_decoder_name(items_type) do
5555

56-
if get_string_name(items_type) == "PrimitiveType" do
56+
if primitive_type?(items_type) do
5757
items_type_value = items_type.type
5858

59-
cond do
60-
items_type_value == "integer" ->
59+
case items_type do
60+
"integer" ->
6161
"Decode.int"
6262

63-
items_type_value == "number" ->
63+
"number" ->
6464
"Decode.float"
6565

66-
true ->
66+
"boolean" ->
67+
"Decode.bool"
68+
69+
_ ->
6770
"Decode.#{downcase_first items_type_value}"
6871
end
6972

@@ -81,17 +84,20 @@ defmodule JS2E.Printers.ArrayPrinter do
8184
@spec determine_type_name(Types.typeDefinition) :: String.t
8285
defp determine_type_name(items_type) do
8386

84-
if get_string_name(items_type) == "PrimitiveType" do
87+
if primitive_type?(items_type) do
8588
items_type_value = items_type.type
8689

87-
cond do
88-
items_type_value == "integer" ->
90+
case items_type_value do
91+
"integer" ->
8992
"Int"
9093

91-
items_type_value == "number" ->
94+
"number" ->
9295
"Float"
9396

94-
true ->
97+
"boolean" ->
98+
"Bool"
99+
100+
_ ->
95101
upcase_first items_type_value
96102
end
97103

@@ -131,16 +137,19 @@ defmodule JS2E.Printers.ArrayPrinter do
131137
@spec determine_encoder_name(Types.typeDefinition) :: String.t
132138
defp determine_encoder_name(items_type) do
133139

134-
if get_string_name(items_type) == "PrimitiveType" do
140+
if primitive_type?(items_type) do
135141
items_type_value = items_type.type
136142

137-
cond do
138-
items_type_value == "integer" ->
143+
case items_type_value do
144+
"integer" ->
139145
"Encode.int"
140146

141-
items_type_value == "number" ->
147+
"number" ->
142148
"Encode.float"
143149

150+
"boolean" ->
151+
"Encode.bool"
152+
144153
true ->
145154
"Encode.#{downcase_first items_type_value}"
146155
end

lib/printers/enum_printer.ex

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ defmodule JS2E.Printers.EnumPrinter do
3333
values: values}, _type_dict, _schema_dict) do
3434

3535
type_name = upcase_first name
36-
clauses = values |> Enum.map(&(create_elm_value(&1, type)))
36+
clauses = values |> Enum.map(&(create_elm_value!(&1, type)))
3737

3838
type_template(type_name, clauses)
3939
end
@@ -69,7 +69,7 @@ defmodule JS2E.Printers.EnumPrinter do
6969
"Float"
7070

7171
_ ->
72-
raise "Unknown enum type: #{type}"
72+
raise "Unknown or unsupported enum type: #{type}"
7373
end
7474
end
7575

@@ -78,7 +78,7 @@ defmodule JS2E.Printers.EnumPrinter do
7878

7979
values |> Enum.map(fn value ->
8080
raw_value = create_decoder_case(value, type)
81-
parsed_value = create_elm_value(value, type)
81+
parsed_value = create_elm_value!(value, type)
8282

8383
%{raw_value: raw_value,
8484
parsed_value: parsed_value}
@@ -125,7 +125,7 @@ defmodule JS2E.Printers.EnumPrinter do
125125

126126
values |> Enum.map(fn value ->
127127

128-
elm_value = create_elm_value(value, type)
128+
elm_value = create_elm_value!(value, type)
129129
json_value = create_encoder_case(value, type)
130130

131131
%{elm_value: elm_value,
@@ -145,13 +145,19 @@ defmodule JS2E.Printers.EnumPrinter do
145145
"number" ->
146146
"Encode.float #{value}"
147147

148+
"boolean" ->
149+
"Encode.bool #{value}"
150+
151+
"null" ->
152+
"Encode.null"
153+
148154
_ ->
149155
raise "Unknown or unsupported enum type: #{type}"
150156
end
151157
end
152158

153-
@spec create_elm_value(String.t, String.t) :: String.t
154-
defp create_elm_value(value, type) do
159+
@spec create_elm_value!(String.t, String.t) :: String.t
160+
defp create_elm_value!(value, type) do
155161
Logger.debug "Value: #{value}, Type: #{type}"
156162

157163
case type do

lib/printers/object_printer.ex

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,18 @@ defmodule JS2E.Printers.ObjectPrinter do
8787
property_type_value = property_type.type
8888

8989
case property_type_value do
90+
"string" ->
91+
"String"
92+
9093
"integer" ->
9194
"Int"
9295

9396
"number" ->
9497
"Float"
9598

99+
"boolean" ->
100+
"Bool"
101+
96102
_ ->
97103
upcase_first property_type_value
98104
end
@@ -175,7 +181,7 @@ defmodule JS2E.Printers.ObjectPrinter do
175181
enum_type?(property_type) ->
176182
property_type_decoder =
177183
property_type.type
178-
|> determine_primitive_type_decoder()
184+
|> determine_primitive_type_decoder!()
179185

180186
create_decoder_enum_clause(property_name, property_type_decoder,
181187
decoder_name, is_required)
@@ -185,25 +191,12 @@ defmodule JS2E.Printers.ObjectPrinter do
185191
end
186192
end
187193

188-
@spec determine_primitive_type_decoder(String.t) :: String.t
189-
defp determine_primitive_type_decoder(property_type_value) do
190-
case property_type_value do
191-
"integer" ->
192-
"Decode.int"
193-
194-
"number" ->
195-
"Decode.float"
196-
197-
_ ->
198-
"Decode.#{property_type_value}"
199-
end
200-
end
201-
202194
@spec create_decoder_name(Types.typeDefinition) :: String.t
203195
defp create_decoder_name(property_type) do
204196

205197
if primitive_type?(property_type) do
206-
determine_primitive_type_decoder(property_type.type)
198+
primitive_type_name = property_type.type
199+
determine_primitive_type_decoder!(primitive_type_name)
207200
else
208201

209202
property_type_name = property_type.name

0 commit comments

Comments
 (0)