{-# LANGUAGE TypeSynonymInstances #-}

{-|
Description: Error Types
-}

module Crypto.PubKey.Xml.Errors where

import Control.Exception
import Data.Either

data XmlVerifyError = XmlSecInitFailed -- -2
                    | XmlSecIncomp     -- -3
                    | XmlSecCryptoFail -- -4
                    | CryptoInitFailed -- -5
                    | XmlCryptoFailed  -- -6
                    | XmlParseFail     -- -7
                    | XmlNoStartNode   -- -8
                    | XmlSigCreateFail -- -9
                    | XmlPemLoadFail   -- -10
                    | XmlPemNameFail   -- -11
                    | VeryifyFail      -- -12

instance Show XmlVerifyError where
  show :: XmlVerifyError -> String
show XmlVerifyError
XmlSecInitFailed = String
"xmlsec initialization failed"
  show XmlVerifyError
XmlSecIncomp     = String
"loaded xmlsec library version is not compatible"
  show XmlVerifyError
XmlSecCryptoFail = String
"unable to load default xmlsec-crypto library"
  show XmlVerifyError
CryptoInitFailed = String
"crypto initialization failed"
  show XmlVerifyError
XmlCryptoFailed  = String
"xmlsec-crypto initialization failed"
  show XmlVerifyError
XmlParseFail     = String
"unable to parse file"
  show XmlVerifyError
XmlNoStartNode   = String
"start node not found"
  show XmlVerifyError
XmlSigCreateFail = String
"failed to create signature context"
  show XmlVerifyError
XmlPemLoadFail   = String
"failed to load public pem key"
  show XmlVerifyError
XmlPemNameFail   = String
"failed to set key name for key"
  show XmlVerifyError
VeryifyFail      = String
"signature verify fail"

instance Exception XmlVerifyError

throwXmlError :: IO (Either XmlVerifyError a) -> IO a
throwXmlError :: IO (Either XmlVerifyError a) -> IO a
throwXmlError IO (Either XmlVerifyError a)
res = IO (Either XmlVerifyError a)
res IO (Either XmlVerifyError a)
-> (Either XmlVerifyError a -> IO a) -> IO a
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (XmlVerifyError -> IO a)
-> (a -> IO a) -> Either XmlVerifyError a -> IO a
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either XmlVerifyError -> IO a
forall e a. Exception e => e -> IO a
throwIO a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return