module Rollbar.Item.Server
( Server(..)
, Root(..)
, Branch(..)
) where
import Data.Aeson (KeyValue, ToJSON, object, pairs, toEncoding, toJSON, (.=))
import Data.Maybe (catMaybes)
import Data.String (IsString)
import GHC.Generics (Generic)
import Network.HostName (HostName)
import Rollbar.Item.CodeVersion (CodeVersion)
import qualified Data.Text as T
data Server
= Server
{ host :: Maybe HostName
, root :: Maybe Root
, branch :: Maybe Branch
, serverCodeVersion :: Maybe CodeVersion
}
deriving (Eq, Generic, Show)
serverKVs :: KeyValue kv => Server -> [Maybe kv]
serverKVs Server{..} =
[ ("host" .=) <$> host
, ("root" .=) <$> root
, ("branch" .=) <$> branch
, ("code_version" .=) <$> serverCodeVersion
]
instance ToJSON Server where
toJSON = object . catMaybes . serverKVs
toEncoding = pairs . mconcat . catMaybes . serverKVs
newtype Root
= Root T.Text
deriving (Eq, IsString, Show, ToJSON)
newtype Branch
= Branch T.Text
deriving (Eq, IsString, Show, ToJSON)