From e1e795e8152c435ca408de3c373c6687f4bf415e Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Tue, 13 Sep 2022 13:10:32 +1000 Subject: separating out video type --- src/Servall/Types.hs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src') diff --git a/src/Servall/Types.hs b/src/Servall/Types.hs index e179e2c..69c2045 100644 --- a/src/Servall/Types.hs +++ b/src/Servall/Types.hs @@ -1,7 +1,16 @@ +{-# LANGUAGE OverloadedStrings #-} module Servall.Types ( WikiTemplate(..) + , Video(..) ) where +import Data.Aeson ( (.:) + , (.=) + , FromJSON(..) + , ToJSON(..) + , Value(..) + , object + ) import qualified Data.HashMap.Lazy as HM import Data.Text ( Text ) @@ -11,3 +20,31 @@ data WikiTemplate = WikiTemplate , 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 + ] -- cgit v1.2.3