{-# 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 (Int -> EncodingError -> ShowS
[EncodingError] -> ShowS
EncodingError -> String
(Int -> EncodingError -> ShowS)
-> (EncodingError -> String)
-> ([EncodingError] -> ShowS)
-> Show EncodingError
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [EncodingError] -> ShowS
$cshowList :: [EncodingError] -> ShowS
show :: EncodingError -> String
$cshow :: EncodingError -> String
showsPrec :: Int -> EncodingError -> ShowS
$cshowsPrec :: Int -> EncodingError -> ShowS
Show)

class AsEncodingError s where
  _EncodingError :: Prism' s EncodingError
  _EncodingErrorTransferEncodingError :: Prism' s TransferEncodingError
  _EncodingErrorCharsetError :: Prism' s CharsetError

  _EncodingErrorTransferEncodingError = p EncodingError (f EncodingError) -> p s (f s)
forall s. AsEncodingError s => Prism' s EncodingError
_EncodingError (p EncodingError (f EncodingError) -> p s (f s))
-> (p TransferEncodingError (f TransferEncodingError)
    -> p EncodingError (f EncodingError))
-> p TransferEncodingError (f TransferEncodingError)
-> p s (f s)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p TransferEncodingError (f TransferEncodingError)
-> p EncodingError (f EncodingError)
forall s.
AsTransferEncodingError s =>
Prism' s TransferEncodingError
_TransferEncodingError
  _EncodingErrorCharsetError = p EncodingError (f EncodingError) -> p s (f s)
forall s. AsEncodingError s => Prism' s EncodingError
_EncodingError (p EncodingError (f EncodingError) -> p s (f s))
-> (p CharsetError (f CharsetError)
    -> p EncodingError (f EncodingError))
-> p CharsetError (f CharsetError)
-> p s (f s)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. p CharsetError (f CharsetError)
-> p EncodingError (f EncodingError)
forall s. AsCharsetError s => Prism' s CharsetError
_CharsetError

instance AsEncodingError EncodingError where
  _EncodingError :: p EncodingError (f EncodingError)
-> p EncodingError (f EncodingError)
_EncodingError = p EncodingError (f EncodingError)
-> p EncodingError (f EncodingError)
forall a. a -> a
id
  _EncodingErrorTransferEncodingError :: p TransferEncodingError (f TransferEncodingError)
-> p EncodingError (f EncodingError)
_EncodingErrorTransferEncodingError = (TransferEncodingError -> EncodingError)
-> (EncodingError -> Maybe TransferEncodingError)
-> Prism' EncodingError TransferEncodingError
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' TransferEncodingError -> EncodingError
TransferEncodingError ((EncodingError -> Maybe TransferEncodingError)
 -> Prism' EncodingError TransferEncodingError)
-> (EncodingError -> Maybe TransferEncodingError)
-> Prism' EncodingError TransferEncodingError
forall a b. (a -> b) -> a -> b
$ \case
    TransferEncodingError TransferEncodingError
e -> TransferEncodingError -> Maybe TransferEncodingError
forall a. a -> Maybe a
Just TransferEncodingError
e ; EncodingError
_ -> Maybe TransferEncodingError
forall a. Maybe a
Nothing
  _EncodingErrorCharsetError :: p CharsetError (f CharsetError)
-> p EncodingError (f EncodingError)
_EncodingErrorCharsetError = (CharsetError -> EncodingError)
-> (EncodingError -> Maybe CharsetError)
-> Prism' EncodingError CharsetError
forall b s a. (b -> s) -> (s -> Maybe a) -> Prism s s a b
prism' CharsetError -> EncodingError
CharsetError ((EncodingError -> Maybe CharsetError)
 -> Prism' EncodingError CharsetError)
-> (EncodingError -> Maybe CharsetError)
-> Prism' EncodingError CharsetError
forall a b. (a -> b) -> a -> b
$ \case
    CharsetError CharsetError
e -> CharsetError -> Maybe CharsetError
forall a. a -> Maybe a
Just CharsetError
e ; EncodingError
_ -> Maybe CharsetError
forall a. Maybe a
Nothing

instance AsCharsetError EncodingError where
  _CharsetError :: p CharsetError (f CharsetError)
-> p EncodingError (f EncodingError)
_CharsetError = p CharsetError (f CharsetError)
-> p EncodingError (f EncodingError)
forall s. AsEncodingError s => Prism' s CharsetError
_EncodingErrorCharsetError

instance AsTransferEncodingError EncodingError where
  _TransferEncodingError :: p TransferEncodingError (f TransferEncodingError)
-> p EncodingError (f EncodingError)
_TransferEncodingError = p TransferEncodingError (f TransferEncodingError)
-> p EncodingError (f EncodingError)
forall s. AsEncodingError s => Prism' s TransferEncodingError
_EncodingErrorTransferEncodingError