{-# LANGUAGE DeriveDataTypeable #-}
module Data.Encoding.Exception where

import Control.Exception.Extensible
import Data.Word
import Data.Typeable
import Control.Monad.Identity

-- | This exception type is thrown whenever something went wrong during the
--   encoding-process.
data EncodingException
    = HasNoRepresentation Char  -- ^ Thrown if a specific character
                                --   is not representable in an encoding.
    deriving (Eq,Ord,Show,Read,Typeable)

instance Exception EncodingException

-- | This exception type is thrown whenever something went wrong during the
--   decoding-process.
data DecodingException
    = IllegalCharacter Word8    -- ^ The sequence contained an illegal
                                --   byte that couldn't be decoded.
    | UnexpectedEnd             -- ^ more bytes were needed to allow a
                                --   successfull decoding.
    | OutOfRange                -- ^ the decoded value was out of the unicode range
    | IllegalRepresentation [Word8]     -- ^ The character sequence encodes a
                                        --   character, but is illegal.
    deriving (Eq,Ord,Show,Read,Typeable)

instance Exception DecodingException