module Patrol.Type.Request where

import qualified Data.Aeson as Aeson
import qualified Data.Map as Map
import qualified Data.Text as Text
import qualified Patrol.Extra.Aeson as Aeson

-- | <https://develop.sentry.dev/sdk/event-payloads/types/#request>
data Request = Request
  { Request -> Map Text Text
cookies :: Map.Map Text.Text Text.Text,
    Request -> Value
data_ :: Aeson.Value,
    Request -> Map Text Value
env :: Map.Map Text.Text Aeson.Value,
    Request -> Text
fragment :: Text.Text,
    Request -> Map Text Text
headers :: Map.Map Text.Text Text.Text,
    Request -> Text
inferredContentType :: Text.Text,
    Request -> Text
method :: Text.Text,
    Request -> Map Text Text
queryString :: Map.Map Text.Text Text.Text,
    Request -> Text
url :: Text.Text
  }
  deriving (Request -> Request -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Request -> Request -> Bool
$c/= :: Request -> Request -> Bool
== :: Request -> Request -> Bool
$c== :: Request -> Request -> Bool
Eq, Int -> Request -> ShowS
[Request] -> ShowS
Request -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Request] -> ShowS
$cshowList :: [Request] -> ShowS
show :: Request -> String
$cshow :: Request -> String
showsPrec :: Int -> Request -> ShowS
$cshowsPrec :: Int -> Request -> ShowS
Show)

instance Aeson.ToJSON Request where
  toJSON :: Request -> Value
toJSON Request
request =
    [Pair] -> Value
Aeson.intoObject
      [ forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"cookies" forall a b. (a -> b) -> a -> b
$ Request -> Map Text Text
cookies Request
request,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"data" forall a b. (a -> b) -> a -> b
$ Request -> Value
data_ Request
request,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"env" forall a b. (a -> b) -> a -> b
$ Request -> Map Text Value
env Request
request,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"fragment" forall a b. (a -> b) -> a -> b
$ Request -> Text
fragment Request
request,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"headers" forall a b. (a -> b) -> a -> b
$ Request -> Map Text Text
headers Request
request,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"inferred_content_type" forall a b. (a -> b) -> a -> b
$ Request -> Text
inferredContentType Request
request,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"method" forall a b. (a -> b) -> a -> b
$ Request -> Text
method Request
request,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"query_string" forall a b. (a -> b) -> a -> b
$ Request -> Map Text Text
queryString Request
request,
        forall a. ToJSON a => String -> a -> Pair
Aeson.pair String
"url" forall a b. (a -> b) -> a -> b
$ Request -> Text
url Request
request
      ]

empty :: Request
empty :: Request
empty =
  Request
    { cookies :: Map Text Text
cookies = forall k a. Map k a
Map.empty,
      data_ :: Value
data_ = Value
Aeson.Null,
      env :: Map Text Value
env = forall k a. Map k a
Map.empty,
      fragment :: Text
fragment = Text
Text.empty,
      headers :: Map Text Text
headers = forall k a. Map k a
Map.empty,
      inferredContentType :: Text
inferredContentType = Text
Text.empty,
      method :: Text
method = Text
Text.empty,
      queryString :: Map Text Text
queryString = forall k a. Map k a
Map.empty,
      url :: Text
url = Text
Text.empty
    }