{-# LANGUAGE DeriveDataTypeable #-}
module Network.MPD.Core.Error where
import qualified Control.Exception as E
import Control.Monad.Error (Error(..))
import Data.Typeable
data MPDError = NoMPD
| ConnectionError E.IOException
| Unexpected String
| Custom String
| ACK ACKType String
deriving (MPDError -> MPDError -> Bool
(MPDError -> MPDError -> Bool)
-> (MPDError -> MPDError -> Bool) -> Eq MPDError
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MPDError -> MPDError -> Bool
$c/= :: MPDError -> MPDError -> Bool
== :: MPDError -> MPDError -> Bool
$c== :: MPDError -> MPDError -> Bool
Eq, Typeable)
instance E.Exception MPDError
instance Show MPDError where
show :: MPDError -> String
show NoMPD = "Could not connect to MPD"
show (ConnectionError e :: IOException
e) = "Connection error (" String -> ShowS
forall a. [a] -> [a] -> [a]
++ IOException -> String
forall a. Show a => a -> String
show IOException
e String -> ShowS
forall a. [a] -> [a] -> [a]
++ ")"
show (Unexpected s :: String
s) = "MPD returned an unexpected response: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ [String] -> String
unlines [
String
s
, ""
, "This is most likely a bug in libmpd! Please report it here:"
, ""
, "https://github.com/vimus/libmpd-haskell/issues/new"
]
show (Custom s :: String
s) = String
s
show (ACK _ s :: String
s) = String
s
instance Error MPDError where
noMsg :: MPDError
noMsg = String -> MPDError
Custom "An error occurred"
strMsg :: String -> MPDError
strMsg = String -> MPDError
Custom
data ACKType = InvalidArgument
| InvalidPassword
| Auth
| UnknownCommand
| FileNotFound
| PlaylistMax
| System
| PlaylistLoad
| Busy
| NotPlaying
| FileExists
| UnknownACK
deriving ACKType -> ACKType -> Bool
(ACKType -> ACKType -> Bool)
-> (ACKType -> ACKType -> Bool) -> Eq ACKType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ACKType -> ACKType -> Bool
$c/= :: ACKType -> ACKType -> Bool
== :: ACKType -> ACKType -> Bool
$c== :: ACKType -> ACKType -> Bool
Eq