{-# LANGUAGE TemplateHaskell #-}
module Web.Mackerel.Types.User where

import Data.Aeson
import qualified Data.Aeson as Aeson
import Data.Aeson.TH (deriveJSON)
import Data.Aeson.Types (typeMismatch)
import qualified Data.Text as Text

import Web.Mackerel.Internal.TH

data UserId = UserId String
            deriving (Eq, Show)

instance FromJSON UserId where
  parseJSON (Aeson.String alertId) = return $ UserId $ Text.unpack alertId
  parseJSON o = typeMismatch "UserId" o

instance ToJSON UserId where
  toJSON (UserId alertId) = toJSON alertId

data User
  = User {
    userId :: UserId,
    userScreenName :: String,
    userEmail :: String
  } deriving (Eq, Show)

$(deriveJSON options ''User)