packages feed

patrol-0.1.0.1: source/library/Patrol/Type/User.hs

module Patrol.Type.User 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
import qualified Patrol.Type.Geo as Geo

-- | <https://develop.sentry.dev/sdk/event-payloads/types/#user>
data User = User
  { data_ :: Map.Map Text.Text Aeson.Value,
    email :: Text.Text,
    geo :: Maybe Geo.Geo,
    id :: Text.Text,
    ipAddress :: Text.Text,
    name :: Text.Text,
    segment :: Text.Text,
    username :: Text.Text
  }
  deriving (Eq, Show)

instance Aeson.ToJSON User where
  toJSON user =
    Aeson.intoObject
      [ Aeson.pair "data" $ data_ user,
        Aeson.pair "email" $ email user,
        Aeson.pair "geo" $ geo user,
        Aeson.pair "id" $ Patrol.Type.User.id user,
        Aeson.pair "ip_address" $ ipAddress user,
        Aeson.pair "name" $ name user,
        Aeson.pair "segment" $ segment user,
        Aeson.pair "username" $ username user
      ]

empty :: User
empty =
  User
    { data_ = Map.empty,
      email = Text.empty,
      geo = Nothing,
      Patrol.Type.User.id = Text.empty,
      ipAddress = Text.empty,
      name = Text.empty,
      segment = Text.empty,
      username = Text.empty
    }