{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} module Servall.Types where import Data.Aeson ( (.:) , (.=) , FromJSON(..) , ToJSON(..) , Value(..) , object ) import qualified Data.HashMap.Lazy as HM import Data.Text ( Text ) import GHC.Generics ( Generic ) data WikiTemplate = WikiTemplate { wtName :: Text -- , wtSubName :: Maybe Text , wtFields :: HM.HashMap Text Text } deriving Show data Video = Video { vid :: Text , vtitle :: Text , vdesc :: Text , vduration :: Int } deriving (Eq, Show) instance FromJSON Video where parseJSON (Object o) = Video <$> o .: "id" <*> o .: "title" <*> o .: "description" <*> o .: "duration" instance ToJSON Video where toJSON (Video vid title desc duration) = object [ "id" .= vid , "title" .= title , "description" .= desc , "duration" .= duration ] data WikiSummary = WikiSummary { wsTitle :: Text , wsWikbase :: Text , wsPageId :: Int } deriving (Show, Eq, Generic) instance FromJSON WikiSummary where parseJSON (Object o) = WikiSummary <$> o .: "title" <*> o .: "wikibase_item" <*> o .: "pageid" instance ToJSON WikiSummary where toJSON (WikiSummary title wikibase pageid) = object ["title" .= title, "wikibase" .= wikibase, "pageid" .= pageid]