@@ -126,47 +126,49 @@ defmodule Mimic.Module do
126126 module
127127 end
128128
129- if @ elixir_version >= 1.18 do
130- defp generate_mimic_struct ( module ) do
131- if function_exported? ( module , :__info__ , 1 ) && module . __info__ ( :struct ) != nil do
132- struct_info = module . __info__ ( :struct ) || [ ]
129+ defp generate_mimic_struct ( module ) do
130+ if function_exported? ( module , :__info__ , 1 ) do
131+ do_generate_mimic_struct ( module , module . __info__ ( :struct ) )
132+ end
133+ end
133134
134- struct_template = Map . from_struct ( module . __struct__ ( ) )
135+ defp do_generate_mimic_struct ( _module , nil ) , do: nil
135136
136- struct_params =
137- for % { field: field } <- struct_info ,
138- do: { field , Macro . escape ( struct_template [ field ] ) }
137+ if @ elixir_version >= 1.18 do
138+ defp do_generate_mimic_struct ( module , struct_info ) do
139+ struct_template = Map . from_struct ( module . __struct__ ( ) )
139140
140- quote do
141- defstruct unquote ( struct_params )
142- end
141+ struct_params =
142+ for % { field: field } <- struct_info ,
143+ do: { field , Macro . escape ( struct_template [ field ] ) }
144+
145+ quote do
146+ defstruct unquote ( struct_params )
143147 end
144148 end
145149 else
146- defp generate_mimic_struct ( module ) do
147- if function_exported? ( module , :__info__ , 1 ) && module . __info__ ( :struct ) != nil do
148- struct_info =
149- module . __info__ ( :struct )
150- |> Enum . split_with ( & & 1 . required )
151- |> Tuple . to_list ( )
152- |> List . flatten ( )
153-
154- required_fields = for % { field: field , required: true } <- struct_info , do: field
155- struct_template = Map . from_struct ( module . __struct__ ( ) )
156-
157- struct_params =
158- for % { field: field , required: required } <- struct_info do
159- if required do
160- field
161- else
162- { field , Macro . escape ( struct_template [ field ] ) }
163- end
150+ defp do_generate_mimic_struct ( module , struct_info ) do
151+ struct_info =
152+ module . __info__ ( :struct )
153+ |> Enum . split_with ( & & 1 . required )
154+ |> Tuple . to_list ( )
155+ |> List . flatten ( )
156+
157+ required_fields = for % { field: field , required: true } <- struct_info , do: field
158+ struct_template = Map . from_struct ( module . __struct__ ( ) )
159+
160+ struct_params =
161+ for % { field: field , required: required } <- struct_info do
162+ if required do
163+ field
164+ else
165+ { field , Macro . escape ( struct_template [ field ] ) }
164166 end
165-
166- quote do
167- @ enforce_keys unquote ( required_fields )
168- defstruct unquote ( struct_params )
169167 end
168+
169+ quote do
170+ @ enforce_keys unquote ( required_fields )
171+ defstruct unquote ( struct_params )
170172 end
171173 end
172174 end
0 commit comments