@@ -311,34 +311,28 @@ defmodule ABI.FunctionSelector do
311
311
end
312
312
end
313
313
314
- @ doc false
315
- def parse_specification_type ( % { "type" => "tuple" , "components" => components } ) do
316
- sub_types = for component <- components , do: parse_specification_type ( component )
317
- { :tuple , sub_types }
314
+ defp replace_tuple ( { :array , inner } , sub_types ) do
315
+ { :array , replace_tuple ( inner , sub_types ) }
318
316
end
319
317
320
- def parse_specification_type ( % { "type" => "tuple[]" , "components" => components } ) do
321
- sub_types = for component <- components , do: parse_specification_type ( component )
322
- { :array , { :tuple , sub_types } }
318
+ defp replace_tuple ( { :array , inner , size } , sub_types ) do
319
+ { :array , replace_tuple ( inner , sub_types ) , size }
323
320
end
324
321
325
- def parse_specification_type ( % { "type" => "tuple[][]" , "components" => components } ) do
326
- sub_types = for component <- components , do: parse_specification_type ( component )
327
- { :array , { :array , { :tuple , sub_types } } }
322
+ defp replace_tuple ( :tuple , sub_types ) do
323
+ { :tuple , sub_types }
328
324
end
329
325
330
- def parse_specification_type ( % {
331
- "type" => "tuple[" <> tail ,
332
- "components" => components
333
- } ) do
334
- sub_types = for component <- components , do: parse_specification_type ( component )
326
+ defp replace_tuple ( other , _ ) do
327
+ other
328
+ end
335
329
336
- size =
337
- tail
338
- |> String . replace ( "]" , "" )
339
- |> String . to_integer ( )
330
+ def parse_specification_type ( % { "type" => "tuple" <> _ = type , "components" => components } ) do
331
+ sub_types = for component <- components , do: parse_specification_type ( component )
340
332
341
- { :array , { :tuple , sub_types } , size }
333
+ type
334
+ |> decode_type ( )
335
+ |> replace_tuple ( sub_types )
342
336
end
343
337
344
338
def parse_specification_type ( % { "type" => type } ) , do: decode_type ( type )
0 commit comments