summaryrefslogtreecommitdiff
path: root/src/Servall/Types.hs
blob: 69c20450222e44ef89c3f051af3b519c8bde1341 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{-# 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 )

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
    ]