module Text.JSON.CollectionJSON.Types where
import Data.Aeson hiding (Error)
import Data.Text (Text)
import Control.Applicative
data Collection = Collection {
cVersion :: Text
, cHref :: Text
, cLinks :: [Link]
, cItems :: [Item]
, cQueries :: [Query]
, cTemplate :: Maybe Template
, cError :: Maybe Error
} deriving Show
data Error = Error {
eTitle :: Text
, eCode :: Maybe Text
, eMessage :: Maybe Text
} deriving Show
data Link = Link {
lHref :: Text
, lRel :: Text
, lName :: Maybe Text
, lRender :: Maybe Text
, lPrompt :: Maybe Text
} deriving Show
data Query = Query {
qHref :: Text
, qRel :: Text
, qName :: Maybe Text
, qPrompt :: Maybe Text
, qData :: [Data]
} deriving Show
data Data = Data {
dName :: Text
, dValue :: Maybe Text
, dPrompt :: Maybe Text
} deriving Show
data Item = Item {
iHref :: Text
, iData :: [Data]
, iLinks :: [Link]
} deriving Show
data Template = Template {
tData :: [Data]
} deriving Show
instance FromJSON Template where
parseJSON (Object v) = Template <$> v .: "data"
instance FromJSON Item where
parseJSON (Object v) = Item
<$> v .: "href"
<*> v .:? "data" .!= []
<*> v .:? "links" .!= []
instance FromJSON Data where
parseJSON (Object v) = Data
<$> v .: "name"
<*> v .:? "value"
<*> v .:? "prompt"
instance FromJSON Query where
parseJSON (Object v) = Query
<$> v .: "href"
<*> v .: "rel"
<*> v .:? "name"
<*> v .:? "prompt"
<*> v .:? "data" .!= []
instance FromJSON Link where
parseJSON (Object v) = Link
<$> v .: "href"
<*> v .: "rel"
<*> v .:? "name"
<*> v .:? "render"
<*> v .:? "prompt"
instance FromJSON Error where
parseJSON (Object v) = Error
<$> v .: "title"
<*> v .:? "code"
<*> v .:? "message"
instance FromJSON Collection where
parseJSON (Object v) = Collection
<$> v .: "version"
<*> v .: "href"
<*> v .:? "links" .!= []
<*> v .:? "items" .!= []
<*> v .:? "queries" .!= []
<*> v .:? "template"
<*> v .:? "error"
instance ToJSON Template where
toJSON Template{..} = object [ "data" .= tData ]
instance ToJSON Item where
toJSON Item{..} = object [
"href" .= iHref
, "data" .= iData
, "links" .= iLinks
]
instance ToJSON Data where
toJSON Data{..} = object [
"name" .= dName
, "data" .= dValue
, "prompt" .= dPrompt
]
instance ToJSON Query where
toJSON Query{..} = object [
"href" .= qHref
, "rel" .= qRel
, "name" .= qName
, "prompt" .= qPrompt
, "data" .= qData
]
instance ToJSON Link where
toJSON Link{..} = object [
"href" .= lHref
, "rel" .= lRel
, "name" .= lName
, "render" .= lRender
, "prompt" .= lPrompt
]
instance ToJSON Error where
toJSON Error{..} = object [
"title" .= eTitle
, "code" .= eCode
, "message" .= eMessage
]
instance ToJSON Collection where
toJSON Collection{..} = object [
"version" .= cVersion
, "href" .= cHref
, "links" .= cLinks
, "items" .= cItems
, "queries" .= cQueries
, "template" .= cTemplate
, "error" .= cError
]