module JSDOM.Custom.SQLError (
module Generated
, SQLErrorCode(..)
, SQLException(..)
, throwSQLException
) where
import Prelude ()
import Prelude.Compat
import Data.Typeable (Typeable)
import Control.Exception (Exception, throwIO)
import Control.Monad.IO.Class (MonadIO(..))
import JSDOM.Types (MonadDOM(..))
import JSDOM.Generated.SQLError as Generated
data SQLErrorCode = SQLErrorUnknown
| SQLErrorDatabase
| SQLErrorVersion
| SQLErrorTooLarge
| SQLErrorQuota
| SQLErrorSyntax
| SQLErrorConstraint
| SQLErrorTimeout
deriving (Show, Eq, Enum, Typeable)
data SQLException = SQLException { sqlErrorCode :: SQLErrorCode, sqlErrorMessage :: String } deriving (Show, Eq, Typeable)
instance Exception SQLException
throwSQLException :: MonadDOM m => SQLError -> m a
throwSQLException error = do
sqlErrorCode <- (toEnum . subtract 1 . fromIntegral) <$> getCode error
sqlErrorMessage <- getMessage error
liftIO $ throwIO (SQLException{..})