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