{-# LANGUAGE DeriveDataTypeable #-}

{- |
   Maintainer:  simons@cryp.to
   Stability:   provisional
   Portability: portable
 -}

module Distribution.Hackage.DB.Errors where

import Codec.Archive.Tar
import Control.Exception
import Data.Typeable ( Typeable )
import Distribution.Package
import Distribution.Version

data HackageDBTarball a = HackageDBTarball FilePath a deriving (Show, Typeable)
instance (Show a, Typeable a) => Exception (HackageDBTarball a)

data HackageDBPackageName a = HackageDBPackageName PackageName a deriving (Show, Typeable)
instance (Show a, Typeable a) => Exception (HackageDBPackageName a)

data HackageDBPackageVersion a = HackageDBPackageVersion Version a deriving (Show, Typeable)
instance (Show a, Typeable a) => Exception (HackageDBPackageVersion a)

newtype IncorrectTarfile = IncorrectTarfile FormatError deriving (Show, Typeable)
instance Exception IncorrectTarfile

newtype UnsupportedTarEntry = UnsupportedTarEntry Entry deriving (Show, Typeable)
instance Exception UnsupportedTarEntry

newtype InvalidMetaFile = InvalidMetaFile String deriving (Show, Typeable)
instance Exception InvalidMetaFile

newtype InvalidCabalFile = InvalidCabalFile String deriving (Show, Typeable)
instance Exception InvalidCabalFile

data InvalidRepresentationOfType = InvalidRepresentationOfType String String deriving (Show, Typeable)
instance Exception InvalidRepresentationOfType

data NoHackageTarballFound = NoHackageTarballFound deriving (Show, Typeable)
instance Exception NoHackageTarballFound