content: {-# LANGUAGE RecordWildCards #-}
  module GHCJS.DOM.JSFFI.SQLError (
      module Generated
    , SQLErrorCode(..)
    , SQLException(..)
    , throwSQLException
  ) where
  
  import Control.Exception (Exception, throwIO)
  import Control.Monad.IO.Class (MonadIO(..))
  
  import GHCJS.DOM.JSFFI.Generated.SQLError as Generated
  
  data SQLErrorCode = SQLErrorUnknown
                    | SQLErrorDatabase
                    | SQLErrorVersion
                    | SQLErrorTooLarge
                    | SQLErrorQuota
                    | SQLErrorSyntax
                    | SQLErrorConstraint
                    | SQLErrorTimeout
                    deriving (Show, Eq, Enum)
  data SQLException = SQLException { sqlErrorCode :: SQLErrorCode, sqlErrorMessage :: String } deriving (Show, Eq)
  
  instance Exception SQLException
  
  throwSQLException :: MonadIO m => SQLError -> m a
  throwSQLException error = do
      sqlErrorCode <- (toEnum . subtract 1 . fromIntegral) <$> getCode error
      sqlErrorMessage <- getMessage error
      liftIO $ throwIO (SQLException{..})
  
  