{-# LANGUAGE CPP, OverloadedStrings #-}
module Sound.Freesound.Bookmark (
  BookmarkCategory(..)
) where

import           Data.Aeson
import           Data.Text (Text)
import           Sound.Freesound.API (Resource, URI)
import           Sound.Freesound.List (List)
import qualified Sound.Freesound.Sound.Type as Sound

#if __GLASGOW_HASKELL__ < 710
import           Control.Applicative
#endif

data BookmarkCategory = BookmarkCategory {
    url :: URI
  , name :: Text
  , numSounds :: Int
  , sounds :: Resource (List Sound.Summary)
} deriving (Eq, Show)

instance FromJSON BookmarkCategory where
  parseJSON (Object v) =
    BookmarkCategory
      <$> v .: "url"
      <*> v .: "name"
      <*> v .: "num_sounds"
      <*> v .: "sounds"
  parseJSON _ = fail "Couldn't parse BookmarkCategory"