module Sound.File.Sndfile.Exception (
Exception(..),
catch, throw
) where
import Control.Exception (catchDyn, throwDyn)
import Data.Typeable (Typeable)
import Prelude hiding (catch)
data Exception =
Exception { errorString :: String }
| UnrecognisedFormat { errorString :: String }
| SystemError { errorString :: String }
| MalformedFile { errorString :: String }
| UnsupportedEncoding { errorString :: String }
deriving (Typeable, Show)
fromErrorCode :: Int -> String -> Exception
fromErrorCode 1 = UnrecognisedFormat
fromErrorCode 2 = SystemError
fromErrorCode 3 = MalformedFile
fromErrorCode 4 = UnsupportedEncoding
fromErrorCode _ = Exception
catch :: IO a -> (Exception -> IO a) -> IO a
catch = catchDyn
throw :: Int -> String -> a
throw code str = throwDyn (fromErrorCode code str)