@@ -287,18 +287,24 @@ defmodule Sentry.Client do
287287 defp render_exception ( % Interfaces.Exception { } = exception ) do
288288 exception
289289 |> Map . from_struct ( )
290+ |> render_stacktrace ( )
290291 |> update_if_present ( :mechanism , & Map . from_struct / 1 )
291- |> update_if_present ( :stacktrace , fn % Interfaces.Stacktrace { frames: frames } ->
292- % { frames: Enum . map ( frames , & Map . from_struct / 1 ) }
293- end )
294292 end
295293
296294 defp render_thread ( % Interfaces.Thread { } = thread ) do
297295 thread
298296 |> Map . from_struct ( )
299- |> update_if_present ( :stacktrace , fn % Interfaces.Stacktrace { frames: frames } ->
300- % { frames: frames && Enum . map ( frames , & Map . from_struct / 1 ) }
301- end )
297+ |> render_stacktrace ( )
298+ end
299+
300+ defp render_stacktrace ( map ) do
301+ case map do
302+ % { stacktrace: % { frames: % Interfaces.Stacktrace { frames: [ _ | _ ] } = stacktrace } } ->
303+ % { stacktrace | frames: Enum . map ( stacktrace . frames , & Map . from_struct / 1 ) }
304+
305+ map_without_stacktrace ->
306+ Map . delete ( map_without_stacktrace , :stacktrace )
307+ end
302308 end
303309
304310 defp remove_nils ( map ) when is_map ( map ) do
@@ -356,8 +362,11 @@ defmodule Sentry.Client do
356362
357363 defp update_if_present ( map , key , fun ) do
358364 case Map . pop ( map , key ) do
359- { nil , _ } -> map
360- { value , map } -> Map . put ( map , key , fun . ( value ) )
365+ { nil , _ } ->
366+ map
367+
368+ { value , map } ->
369+ Map . put ( map , key , fun . ( value ) )
361370 end
362371 end
363372
0 commit comments