zuul-0.1.0.0: src/Zuul/Project.hs
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Zuul.Project (Project (..), ProjectType (..)) where
import Data.Aeson (FromJSON (..), ToJSON (..), Value (String))
import Data.Aeson.Types (prependFailure, typeMismatch)
import Data.Text (Text)
import GHC.Generics (Generic)
import Zuul.Aeson (zuulParseJSON, zuulToJSON)
data ProjectType = ProjectConfig | ProjectUntrusted
deriving (Show, Eq, Ord, Generic)
data Project = Project
{ projectName :: Text,
projectType :: ProjectType,
projectCanonicalName :: Text,
projectConnectionName :: Text
}
deriving (Show, Eq, Ord, Generic)
instance ToJSON ProjectType where
toJSON v = case v of
ProjectConfig -> "config"
ProjectUntrusted -> "untrusted"
instance FromJSON ProjectType where
parseJSON (String s) = pure $ case s of
"config" -> ProjectConfig
"untrusted" -> ProjectUntrusted
_ -> error "Received unrecognized ProjectType"
parseJSON invalid =
prependFailure
"parsing ProjectType failed, "
(typeMismatch "String" invalid)
instance ToJSON Project where
toJSON = zuulToJSON "project"
instance FromJSON Project where
parseJSON = zuulParseJSON "project"