packages feed

liblastfm-0.0.3.4: examples/json-auth.hs

module Main where

import Control.Applicative (empty)
import System.Exit (ExitCode(ExitFailure), exitSuccess, exitWith)

import qualified Data.ByteString.Lazy as B
import Data.Aeson
import Network.Lastfm
import Test.HUnit
import qualified JSON.Album as Album
import qualified JSON.Artist as Artist
import qualified JSON.Event as Event
import qualified JSON.Library as Library
import qualified JSON.Playlist as Playlist
import qualified JSON.Radio as Radio
import qualified JSON.User as User
import qualified JSON.Track as Track


main ∷ IO ()
main =
  do keys ← B.readFile "examples/lastfm-keys.json"
     case decode keys of
       Just (Keys ak sk s) →
         do rs ← mapM (runTestTT . TestList . \f → f ak sk s)
              [ Album.private
              , Artist.private
              , Event.private
              , Library.private
              , Playlist.private
              , Radio.private
              , User.private
              , Track.private
              ]
            let fs = sum $ map failures rs
            case fs of
              0 → exitSuccess
              n → exitWith (ExitFailure n)
       Nothing → exitWith (ExitFailure 127)


data Keys = Keys APIKey SessionKey Secret


instance FromJSON Keys where
  parseJSON (Object o) =
    do ak ← o .: "APIKey"
       sk ← o .: "SessionKey"
       s ← o .: "Secret"
       return $ Keys (APIKey ak) (SessionKey sk) (Secret s)
  parseJSON _ = empty