@@ -70,7 +70,7 @@ defmodule Sentry.Event do
7070 contexts: Interfaces . context ( ) ,
7171 exception: [ Interfaces.Exception . t ( ) ] ,
7272 message: String . t ( ) | nil ,
73- request: Interfaces . request ( ) ,
73+ request: Interfaces.Request . t ( ) | nil ,
7474 sdk: Interfaces.SDK . t ( ) | nil ,
7575 user: Interfaces . user ( ) | nil ,
7676
@@ -113,7 +113,7 @@ defmodule Sentry.Event do
113113 modules: % { } ,
114114 platform: :elixir ,
115115 release: nil ,
116- request: % { } ,
116+ request: % Interfaces.Request { } ,
117117 sdk: nil ,
118118 server_name: nil ,
119119 tags: % { } ,
@@ -212,7 +212,7 @@ defmodule Sentry.Event do
212212 @ spec create_event ( [ option ] ) :: t ( )
213213 when option:
214214 { :user , Interfaces . user ( ) }
215- | { :request , Interfaces . request ( ) }
215+ | { :request , map ( ) }
216216 | { :extra , Context . extra ( ) }
217217 | { :breadcrumbs , Context . breadcrumb ( ) }
218218 | { :tags , Context . tags ( ) }
@@ -274,7 +274,7 @@ defmodule Sentry.Event do
274274 modules: Map . new ( @ deps , & { & 1 , to_string ( Application . spec ( & 1 , :vsn ) ) } ) ,
275275 original_exception: exception ,
276276 release: Config . release ( ) ,
277- request: request ,
277+ request: coerce_request ( request ) ,
278278 sdk: @ sdk ,
279279 server_name: Config . server_name ( ) || to_string ( :net_adm . localhost ( ) ) ,
280280 source: source ,
@@ -321,6 +321,18 @@ defmodule Sentry.Event do
321321 end
322322 end
323323
324+ @ request_fields % Interfaces.Request { } |> Map . from_struct ( ) |> Map . keys ( ) |> MapSet . new ( )
325+
326+ defp coerce_request ( request ) do
327+ Enum . reduce ( request , % Interfaces.Request { } , fn { key , value } , acc ->
328+ if key in @ request_fields do
329+ Map . replace! ( acc , key , value )
330+ else
331+ raise ArgumentError , "unknown field for the request interface: #{ inspect ( key ) } "
332+ end
333+ end )
334+ end
335+
324336 @ doc """
325337 Transforms an exception to a Sentry event.
326338
0 commit comments