@@ -108,7 +108,7 @@ defmodule PhoenixIconify.Manifest do
108108 end
109109
110110 defp decode! ( json ) do
111- % { version: @ version , icons: icons } = Jason . decode! ( json , keys: :atoms! )
111+ % { " version" => @ version , " icons" => icons } = Jason . decode! ( json )
112112
113113 unless is_list ( icons ) do
114114 raise ArgumentError , "invalid PhoenixIconify manifest: expected icons to be a list"
@@ -117,8 +117,30 @@ defmodule PhoenixIconify.Manifest do
117117 Map . new ( icons , & icon_entry / 1 )
118118 end
119119
120- defp icon_entry ( icon ) do
121- icon = struct! ( Iconify.Icon , icon )
120+ defp icon_entry ( icon ) when is_map ( icon ) do
121+ icon = struct! ( Iconify.Icon , normalize_icon ( icon ) )
122122 { icon . name , icon }
123123 end
124+
125+ defp normalize_icon ( icon ) do
126+ % {
127+ name: required_icon_value ( icon , "name" ) ,
128+ body: required_icon_value ( icon , "body" ) ,
129+ width: Map . get ( icon , "width" , 16 ) ,
130+ height: Map . get ( icon , "height" , 16 ) ,
131+ left: Map . get ( icon , "left" , 0 ) ,
132+ top: Map . get ( icon , "top" , 0 ) ,
133+ rotate: Map . get ( icon , "rotate" , 0 ) ,
134+ h_flip: Map . get ( icon , "h_flip" , false ) ,
135+ v_flip: Map . get ( icon , "v_flip" , false ) ,
136+ hidden: Map . get ( icon , "hidden" , false )
137+ }
138+ end
139+
140+ defp required_icon_value ( icon , key ) do
141+ case Map . fetch ( icon , key ) do
142+ { :ok , value } -> value
143+ :error -> raise ArgumentError , "invalid PhoenixIconify manifest: icon missing #{ key } "
144+ end
145+ end
124146end
0 commit comments