rollbar-hs-0.1.0.0: src/Rollbar/Item/Person.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}
{-|
Module : Rollbar.Item.Person
Description : The user this item affects.
Copyright : (c) Hardy Jones, 2017
License : BSD3
Maintainer : jones3.hardy@gmail.com
Stability : experimental
-}
module Rollbar.Item.Person
( Person(..)
, Id(..)
, Username(..)
, Email(..)
) where
import Data.Aeson
( FromJSON
, ToJSON
, defaultOptions
, genericToEncoding
, genericToJSON
, toEncoding
, toJSON
)
import Data.Aeson.Types (omitNothingFields)
import Data.String (IsString)
import GHC.Generics (Generic)
import qualified Data.Text as T
-- | The affected user.
--
-- The 'Email' and 'Username' associated with the latest 'Id'
-- will overwrite any previous.
data Person
= Person
{ id :: Id
, username :: Maybe Username
, email :: Maybe Email
}
deriving (Eq, Generic, Show)
instance FromJSON Person
instance ToJSON Person where
toJSON = genericToJSON defaultOptions { omitNothingFields = True }
toEncoding = genericToEncoding defaultOptions { omitNothingFields = True }
-- | The user's identifier. This uniquely identifies a 'Person' to Rollbar.
newtype Id
= Id T.Text
deriving (Eq, FromJSON, IsString, Show, ToJSON)
-- | The user's name.
newtype Username
= Username T.Text
deriving (Eq, FromJSON, IsString, Show, ToJSON)
-- | The user's email.
newtype Email
= Email T.Text
deriving (Eq, FromJSON, IsString, Show, ToJSON)