{-# LANGUAGE LambdaCase #-} module Data.MIME.Error where import Control.Lens (Prism', prism') import Data.MIME.Charset import Data.MIME.TransferEncoding -- | Transfer or character encoding errors -- data EncodingError = TransferEncodingError TransferEncodingError | CharsetError CharsetError deriving (Show) class AsEncodingError s where _EncodingError :: Prism' s EncodingError _EncodingErrorTransferEncodingError :: Prism' s TransferEncodingError _EncodingErrorCharsetError :: Prism' s CharsetError _EncodingErrorTransferEncodingError = _EncodingError . _TransferEncodingError _EncodingErrorCharsetError = _EncodingError . _CharsetError instance AsEncodingError EncodingError where _EncodingError = id _EncodingErrorTransferEncodingError = prism' TransferEncodingError $ \case TransferEncodingError e -> Just e ; _ -> Nothing _EncodingErrorCharsetError = prism' CharsetError $ \case CharsetError e -> Just e ; _ -> Nothing instance AsCharsetError EncodingError where _CharsetError = _EncodingErrorCharsetError instance AsTransferEncodingError EncodingError where _TransferEncodingError = _EncodingErrorTransferEncodingError