packages feed

liblastfm-0.1.1.1: tests/json.hs

{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE UnicodeSyntax #-}
module Main where

import Control.Applicative
import Data.Monoid
import System.Exit (ExitCode(ExitFailure), exitWith)

import qualified Data.ByteString.Lazy as B
import           Data.Aeson
import           Data.Text (Text)
import           Network.Lastfm
import           Test.Framework

import qualified Album as Album
import qualified Artist as Artist
import qualified Chart as Chart
import qualified Event as Event
import qualified Geo as Geo
import qualified Group as Group
import qualified Library as Library
import qualified Playlist as Playlist
import qualified Tag as Tag
import qualified Tasteometer as Tasteometer
import qualified Track as Track
import qualified User as User
import qualified Venue as Venue


main ∷ IO ()
main =
  do keys ← B.readFile "tests/lastfm-keys.json"
     case decode keys of
       Just (Keys ak sk s) →
         defaultMainWithOpts (auth <> noauth) (mempty { ropt_threads = Just 20 })
          where
           auth = mconcat . map (\f → f (apiKey ak) (sessionKey sk) (Secret s)) $
             [ Album.auth
             , Artist.auth
             , Event.auth
             , Library.auth
             , Playlist.auth
             , Track.auth
             , User.auth
             ]
           noauth = mconcat . map (\f → f (apiKey ak)) $
             [ Album.noauth
             , Artist.noauth
             , Chart.noauth
             , Event.noauth
             , Geo.noauth
             , Group.noauth
             , Library.noauth
             , Tag.noauth
             , Tasteometer.noauth
             , Track.noauth
             , User.noauth
             , Venue.noauth
             ]
       Nothing → exitWith (ExitFailure 1)


data Keys = Keys Text Text Text


instance FromJSON Keys where
  parseJSON (Object o) = Keys <$> (o .: "APIKey") <*> (o .: "SessionKey") <*> (o .: "Secret")
  parseJSON _ = empty