-- GENERATED by C->Haskell Compiler, version 0.28.6 Switcheroo, 25 November 2017 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "src/Codec/Archive/Types/Foreign.chs" #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric  #-}

module Codec.Archive.Types.Foreign ( -- * Callbacks
                                     ArchiveReadCallback
                                   , ArchiveSkipCallback
                                   , ArchiveSeekCallback
                                   , ArchiveWriteCallback
                                   , ArchiveCloseCallbackRaw
                                   , ArchiveOpenCallbackRaw
                                   , ArchiveSwitchCallbackRaw
                                   , ArchivePassphraseCallback
                                   -- * Abstract types
                                   , Archive
                                   , ArchiveEntry
                                   , Stat
                                   , LinkResolver
                                   -- * Enum types
                                   , ArchiveResult (..)
                                   , FileType (..)
                                   , Symlink (..)
                                   -- * Macros
                                   , Flags (..)
                                   , ArchiveFilter (..)
                                   , ArchiveFormat (..)
                                   , ArchiveCapabilities (..)
                                   , ReadDiskFlags (..)
                                   , TimeFlag (..)
                                   , EntryACL (..)
                                   -- * libarchive types
                                   , LaInt64
                                   , LaSSize
                                   ) where
import qualified Foreign.C.Types as C2HSImp



import           Control.DeepSeq    (NFData)
import           Control.Exception  (Exception)
import           Data.Bits          (Bits (..))
import           Foreign.C.String   (CString)
import           Foreign.C.Types    (CInt, CSize)
import           Foreign.Ptr        (Ptr)
import           GHC.Generics       (Generic)




type LaInt64 = (C2HSImp.CLLong)
{-# LINE 46 "src/Codec/Archive/Types/Foreign.chs" #-}

type LaSSize = (C2HSImp.CLong)
{-# LINE 47 "src/Codec/Archive/Types/Foreign.chs" #-}


data ArchiveResult = ArchiveFatal
                   | ArchiveFailed
                   | ArchiveWarn
                   | ArchiveRetry
                   | ArchiveOk
                   | ArchiveEOF
  deriving (Eq,Show,Generic,NFData,Exception)
instance Enum ArchiveResult where
  succ :: ArchiveResult -> ArchiveResult
succ ArchiveFatal = ArchiveResult
ArchiveFailed
  succ ArchiveFailed = ArchiveResult
ArchiveWarn
  succ ArchiveWarn = ArchiveResult
ArchiveRetry
  succ ArchiveRetry = ArchiveResult
ArchiveOk
  succ ArchiveOk = ArchiveResult
ArchiveEOF
  succ ArchiveEOF = String -> ArchiveResult
forall a. HasCallStack => String -> a
error "ArchiveResult.succ: ArchiveEOF has no successor"

  pred :: ArchiveResult -> ArchiveResult
pred ArchiveFailed = ArchiveResult
ArchiveFatal
  pred ArchiveWarn = ArchiveResult
ArchiveFailed
  pred ArchiveRetry = ArchiveResult
ArchiveWarn
  pred ArchiveOk = ArchiveResult
ArchiveRetry
  pred ArchiveEOF = ArchiveResult
ArchiveOk
  pred ArchiveFatal = String -> ArchiveResult
forall a. HasCallStack => String -> a
error "ArchiveResult.pred: ArchiveFatal has no predecessor"

  enumFromTo :: ArchiveResult -> ArchiveResult -> [ArchiveResult]
enumFromTo from :: ArchiveResult
from to :: ArchiveResult
to = ArchiveResult -> [ArchiveResult]
forall t. Enum t => t -> [t]
go ArchiveResult
from
    where
      end :: Int
end = ArchiveResult -> Int
forall a. Enum a => a -> Int
fromEnum ArchiveResult
to
      go :: t -> [t]
go v :: t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
                 LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
                 EQ -> [t
v]
                 GT -> []

  enumFrom :: ArchiveResult -> [ArchiveResult]
enumFrom from :: ArchiveResult
from = ArchiveResult -> ArchiveResult -> [ArchiveResult]
forall a. Enum a => a -> a -> [a]
enumFromTo ArchiveResult
from ArchiveResult
ArchiveEOF

  fromEnum :: ArchiveResult -> Int
fromEnum ArchiveFatal = (-30)
  fromEnum ArchiveFailed = (-25)
  fromEnum ArchiveWarn = (-20)
  fromEnum ArchiveRetry = (-10)
  fromEnum ArchiveOk = 0
  fromEnum ArchiveEOF = 1

  toEnum :: Int -> ArchiveResult
toEnum (-30) = ArchiveResult
ArchiveFatal
  toEnum (-25) = ArchiveResult
ArchiveFailed
  toEnum (-20) = ArchiveResult
ArchiveWarn
  toEnum (-10) = ArchiveResult
ArchiveRetry
  toEnum 0 = ArchiveResult
ArchiveOk
  toEnum 1 = ArchiveResult
ArchiveEOF
  toEnum unmatched = error ("ArchiveResult.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

{-# LINE 56 "src/Codec/Archive/Types/Foreign.chs" #-}


data FileType = FtFifo
              | FtCharacter
              | FtDirectory
              | FtBlock
              | FtRegular
              | FtLink
              | FtSocket
  deriving (Eq,Ord)
instance Enum FileType where
  succ FtFifo = FtCharacter
  succ FtCharacter = FtDirectory
  succ FtDirectory = FtBlock
  succ FtBlock = FtRegular
  succ FtRegular = FtLink
  succ FtLink = FtSocket
  succ FtSocket = error "FileType.succ: FtSocket has no successor"

  pred FtCharacter = FtFifo
  pred FtDirectory = FtCharacter
  pred FtBlock = FtDirectory
  pred FtRegular = FtBlock
  pred FtLink = FtRegular
  pred FtSocket = FtLink
  pred FtFifo = error "FileType.pred: FtFifo has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from FtSocket

  fromEnum FtFifo = 4096
  fromEnum FtCharacter = 8192
  fromEnum FtDirectory = 16384
  fromEnum FtBlock = 24576
  fromEnum FtRegular = 32768
  fromEnum FtLink = 40960
  fromEnum FtSocket = 49152

  toEnum 4096 = FtFifo
  toEnum 8192 = FtCharacter
  toEnum 16384 = FtDirectory
  toEnum 24576 = FtBlock
  toEnum 32768 = FtRegular
  toEnum 40960 = FtLink
  toEnum 49152 = FtSocket
  toEnum unmatched = error ("FileType.toEnum: Cannot match " ++ show unmatched)

{-# LINE 66 "src/Codec/Archive/Types/Foreign.chs" #-}


data Symlink = SymlinkUndefined
             | SymlinkFile
             | SymlinkDirectory
  deriving (Show,Eq,Ord)
instance Enum Symlink where
  succ SymlinkUndefined = SymlinkFile
  succ SymlinkFile = SymlinkDirectory
  succ SymlinkDirectory = error "Symlink.succ: SymlinkDirectory has no successor"

  pred SymlinkFile = SymlinkUndefined
  pred SymlinkDirectory = SymlinkFile
  pred SymlinkUndefined = error "Symlink.pred: SymlinkUndefined has no predecessor"

  enumFromTo from to = go from
    where
      end = fromEnum to
      go v = case compare (fromEnum v) end of
                 LT -> v : go (succ v)
                 EQ -> [v]
                 GT -> []

  enumFrom from = enumFromTo from SymlinkDirectory

  fromEnum SymlinkUndefined = 0
  fromEnum SymlinkFile = 1
  fromEnum SymlinkDirectory = 2

  toEnum 0 = SymlinkUndefined
  toEnum 1 = SymlinkFile
  toEnum 2 = SymlinkDirectory
  toEnum unmatched = error ("Symlink.toEnum: Cannot match " ++ show unmatched)

{-# LINE 72 "src/Codec/Archive/Types/Foreign.chs" #-}


data ArchiveFilter = ArchiveFilterNone
                   | ArchiveFilterGzip
                   | ArchiveFilterBzip2
                   | ArchiveFilterCompress
                   | ArchiveFilterProgram
                   | ArchiveFilterLzma
                   | ArchiveFilterXz
                   | ArchiveFilterUu
                   | ArchiveFilterRpm
                   | ArchiveFilterLzip
                   | ArchiveFilterLrzip
                   | ArchiveFilterLzop
                   | ArchiveFilterGrzip
                   | ArchiveFilterLz4
                   | ArchiveFilterZstd
instance Enum ArchiveFilter where
  succ ArchiveFilterNone = ArchiveFilterGzip
  succ ArchiveFilterGzip = ArchiveFilterBzip2
  succ ArchiveFilterBzip2 = ArchiveFilterCompress
  succ ArchiveFilterCompress = ArchiveFilterProgram
  succ ArchiveFilterProgram = ArchiveFilterLzma
  succ ArchiveFilterLzma = ArchiveFilterXz
  succ ArchiveFilterXz = ArchiveFilterUu
  succ ArchiveFilterUu = ArchiveFilterRpm
  succ ArchiveFilterRpm = ArchiveFilterLzip
  succ ArchiveFilterLzip = ArchiveFilterLrzip
  succ ArchiveFilterLrzip = ArchiveFilterLzop
  succ ArchiveFilterLzop = ArchiveFilterGrzip
  succ ArchiveFilterGrzip = ArchiveFilterLz4
  succ ArchiveFilterLz4 = ArchiveFilterZstd
  succ ArchiveFilterZstd = error "ArchiveFilter.succ: ArchiveFilterZstd has no successor"

  pred ArchiveFilterGzip = ArchiveFilterNone
  pred ArchiveFilterBzip2 = ArchiveFilterGzip
  pred ArchiveFilterCompress = ArchiveFilterBzip2
  pred ArchiveFilterProgram = ArchiveFilterCompress
  pred ArchiveFilterLzma = ArchiveFilterProgram
  pred ArchiveFilterXz = ArchiveFilterLzma
  pred ArchiveFilterUu = ArchiveFilterXz
  pred ArchiveFilterRpm = ArchiveFilterUu
  pred ArchiveFilterLzip = ArchiveFilterRpm
  pred ArchiveFilterLrzip = ArchiveFilterLzip
  pred ArchiveFilterLzop = ArchiveFilterLrzip
  pred ArchiveFilterGrzip = ArchiveFilterLzop
  pred ArchiveFilterLz4 = ArchiveFilterGrzip
  pred ArchiveFilterZstd = ArchiveFilterLz4
  pred ArchiveFilterNone = error "ArchiveFilter.pred: ArchiveFilterNone has no predecessor"

  enumFromTo :: ArchiveFilter -> ArchiveFilter -> [ArchiveFilter]
enumFromTo from :: ArchiveFilter
from to :: ArchiveFilter
to = ArchiveFilter -> [ArchiveFilter]
forall t. Enum t => t -> [t]
go ArchiveFilter
from
    where
      end :: Int
end = ArchiveFilter -> Int
forall a. Enum a => a -> Int
fromEnum ArchiveFilter
to
      go :: t -> [t]
go v :: t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
                 LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
                 EQ -> [t
v]
                 GT -> []

  enumFrom :: ArchiveFilter -> [ArchiveFilter]
enumFrom from :: ArchiveFilter
from = ArchiveFilter -> ArchiveFilter -> [ArchiveFilter]
forall a. Enum a => a -> a -> [a]
enumFromTo ArchiveFilter
from ArchiveFilter
ArchiveFilterZstd

  fromEnum :: ArchiveFilter -> Int
fromEnum ArchiveFilterNone = 0
  fromEnum ArchiveFilterGzip = 1
  fromEnum ArchiveFilterBzip2 = 2
  fromEnum ArchiveFilterCompress = 3
  fromEnum ArchiveFilterProgram = 4
  fromEnum ArchiveFilterLzma = 5
  fromEnum ArchiveFilterXz = 6
  fromEnum ArchiveFilterUu = 7
  fromEnum ArchiveFilterRpm = 8
  fromEnum ArchiveFilterLzip = 9
  fromEnum ArchiveFilterLrzip = 10
  fromEnum ArchiveFilterLzop = 11
  fromEnum ArchiveFilterGrzip = 12
  fromEnum ArchiveFilterLz4 = 13
  fromEnum ArchiveFilterZstd = 14

  toEnum 0 = ArchiveFilterNone
  toEnum 1 = ArchiveFilterGzip
  toEnum 2 = ArchiveFilterBzip2
  toEnum 3 = ArchiveFilterCompress
  toEnum 4 = ArchiveFilterProgram
  toEnum 5 = ArchiveFilterLzma
  toEnum 6 = ArchiveFilterXz
  toEnum 7 = ArchiveFilterUu
  toEnum 8 = ArchiveFilterRpm
  toEnum 9 = ArchiveFilterLzip
  toEnum 10 = ArchiveFilterLrzip
  toEnum 11 = ArchiveFilterLzop
  toEnum 12 = ArchiveFilterGrzip
  toEnum 13 = ArchiveFilterLz4
  toEnum 14 = ArchiveFilterZstd
  toEnum unmatched = error ("ArchiveFilter.toEnum: Cannot match " ++ show unmatched)

{-# LINE 90 "src/Codec/Archive/Types/Foreign.chs" #-}


data ArchiveFormat = ArchiveFormatCpio
                   | ArchiveFormatCpioPosix
                   | ArchiveFormatCpioBinLe
                   | ArchiveFormatCpioBinBe
                   | ArchiveFormatCpioSvr4Nocrc
                   | ArchiveFormatCpioSvr4Crc
                   | ArchiveFormatCpioAfioLarge
                   | ArchiveFormatShar
                   | ArchiveFormatSharBase
                   | ArchiveFormatSharDump
                   | ArchiveFormatTar
                   | ArchiveFormatTarUstar
                   | ArchiveFormatTarPaxInterchange
                   | ArchiveFormatTarPaxRestricted
                   | ArchiveFormatTarGnutar
                   | ArchiveFormatIso9660
                   | ArchiveFormatIso9660Rockridge
                   | ArchiveFormatZip
                   | ArchiveFormatEmpty
                   | ArchiveFormatAr
                   | ArchiveFormatArGnu
                   | ArchiveFormatArBsd
                   | ArchiveFormatMtree
                   | ArchiveFormatRaw
                   | ArchiveFormatXar
                   | ArchiveFormatLha
                   | ArchiveFormatCab
                   | ArchiveFormatRar
                   | ArchiveFormat7zip
                   | ArchiveFormatWarc
                   | ArchiveFormatRarV5
  deriving (Eq)
instance Enum ArchiveFormat where
  succ ArchiveFormatCpio = ArchiveFormatCpioPosix
  succ ArchiveFormatCpioPosix = ArchiveFormatCpioBinLe
  succ ArchiveFormatCpioBinLe = ArchiveFormatCpioBinBe
  succ ArchiveFormatCpioBinBe = ArchiveFormatCpioSvr4Nocrc
  succ ArchiveFormatCpioSvr4Nocrc = ArchiveFormatCpioSvr4Crc
  succ ArchiveFormatCpioSvr4Crc = ArchiveFormatCpioAfioLarge
  succ ArchiveFormatCpioAfioLarge = ArchiveFormatShar
  succ ArchiveFormatShar = ArchiveFormatSharBase
  succ ArchiveFormatSharBase = ArchiveFormatSharDump
  succ ArchiveFormatSharDump = ArchiveFormatTar
  succ ArchiveFormatTar = ArchiveFormatTarUstar
  succ ArchiveFormatTarUstar = ArchiveFormatTarPaxInterchange
  succ ArchiveFormatTarPaxInterchange = ArchiveFormatTarPaxRestricted
  succ ArchiveFormatTarPaxRestricted = ArchiveFormatTarGnutar
  succ ArchiveFormatTarGnutar = ArchiveFormatIso9660
  succ ArchiveFormatIso9660 = ArchiveFormatIso9660Rockridge
  succ ArchiveFormatIso9660Rockridge = ArchiveFormatZip
  succ ArchiveFormatZip = ArchiveFormatEmpty
  succ ArchiveFormatEmpty = ArchiveFormatAr
  succ ArchiveFormatAr = ArchiveFormatArGnu
  succ ArchiveFormatArGnu = ArchiveFormatArBsd
  succ ArchiveFormatArBsd = ArchiveFormatMtree
  succ ArchiveFormatMtree = ArchiveFormatRaw
  succ ArchiveFormatRaw = ArchiveFormatXar
  succ ArchiveFormatXar = ArchiveFormatLha
  succ ArchiveFormatLha = ArchiveFormatCab
  succ ArchiveFormatCab = ArchiveFormatRar
  succ ArchiveFormatRar = ArchiveFormat7zip
  succ ArchiveFormat7zip = ArchiveFormatWarc
  succ ArchiveFormatWarc = ArchiveFormatRarV5
  succ ArchiveFormatRarV5 = error "ArchiveFormat.succ: ArchiveFormatRarV5 has no successor"

  pred ArchiveFormatCpioPosix = ArchiveFormatCpio
  pred ArchiveFormatCpioBinLe = ArchiveFormatCpioPosix
  pred ArchiveFormatCpioBinBe = ArchiveFormatCpioBinLe
  pred ArchiveFormatCpioSvr4Nocrc = ArchiveFormatCpioBinBe
  pred ArchiveFormatCpioSvr4Crc = ArchiveFormatCpioSvr4Nocrc
  pred ArchiveFormatCpioAfioLarge = ArchiveFormatCpioSvr4Crc
  pred ArchiveFormatShar = ArchiveFormatCpioAfioLarge
  pred ArchiveFormatSharBase = ArchiveFormatShar
  pred ArchiveFormatSharDump = ArchiveFormatSharBase
  pred ArchiveFormatTar = ArchiveFormatSharDump
  pred ArchiveFormatTarUstar = ArchiveFormatTar
  pred ArchiveFormatTarPaxInterchange = ArchiveFormatTarUstar
  pred ArchiveFormatTarPaxRestricted = ArchiveFormatTarPaxInterchange
  pred ArchiveFormatTarGnutar = ArchiveFormatTarPaxRestricted
  pred ArchiveFormatIso9660 = ArchiveFormatTarGnutar
  pred ArchiveFormatIso9660Rockridge = ArchiveFormatIso9660
  pred ArchiveFormatZip = ArchiveFormatIso9660Rockridge
  pred ArchiveFormatEmpty = ArchiveFormatZip
  pred ArchiveFormatAr = ArchiveFormatEmpty
  pred ArchiveFormatArGnu = ArchiveFormatAr
  pred ArchiveFormatArBsd = ArchiveFormatArGnu
  pred ArchiveFormatMtree = ArchiveFormatArBsd
  pred ArchiveFormatRaw = ArchiveFormatMtree
  pred ArchiveFormatXar = ArchiveFormatRaw
  pred ArchiveFormatLha = ArchiveFormatXar
  pred ArchiveFormatCab = ArchiveFormatLha
  pred ArchiveFormatRar = ArchiveFormatCab
  pred ArchiveFormat7zip = ArchiveFormatRar
  pred ArchiveFormatWarc = ArchiveFormat7zip
  pred ArchiveFormatRarV5 = ArchiveFormatWarc
  pred ArchiveFormatCpio = error "ArchiveFormat.pred: ArchiveFormatCpio has no predecessor"

  enumFromTo :: ArchiveFormat -> ArchiveFormat -> [ArchiveFormat]
enumFromTo from :: ArchiveFormat
from to :: ArchiveFormat
to = ArchiveFormat -> [ArchiveFormat]
forall t. Enum t => t -> [t]
go ArchiveFormat
from
    where
      end :: Int
end = ArchiveFormat -> Int
forall a. Enum a => a -> Int
fromEnum ArchiveFormat
to
      go :: t -> [t]
go v :: t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
                 LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
                 EQ -> [t
v]
                 GT -> []

  enumFrom :: ArchiveFormat -> [ArchiveFormat]
enumFrom from :: ArchiveFormat
from = ArchiveFormat -> ArchiveFormat -> [ArchiveFormat]
forall a. Enum a => a -> a -> [a]
enumFromTo ArchiveFormat
from ArchiveFormat
ArchiveFormatRarV5

  fromEnum :: ArchiveFormat -> Int
fromEnum ArchiveFormatCpio = 65536
  fromEnum ArchiveFormatCpioPosix = 65537
  fromEnum ArchiveFormatCpioBinLe = 65538
  fromEnum ArchiveFormatCpioBinBe = 65539
  fromEnum ArchiveFormatCpioSvr4Nocrc = 65540
  fromEnum ArchiveFormatCpioSvr4Crc = 65541
  fromEnum ArchiveFormatCpioAfioLarge = 65542
  fromEnum ArchiveFormatShar = 131072
  fromEnum ArchiveFormatSharBase = 131073
  fromEnum ArchiveFormatSharDump = 131074
  fromEnum ArchiveFormatTar = 196608
  fromEnum ArchiveFormatTarUstar = 196609
  fromEnum ArchiveFormatTarPaxInterchange = 196610
  fromEnum ArchiveFormatTarPaxRestricted = 196611
  fromEnum ArchiveFormatTarGnutar = 196612
  fromEnum ArchiveFormatIso9660 = 262144
  fromEnum ArchiveFormatIso9660Rockridge = 262145
  fromEnum ArchiveFormatZip = 327680
  fromEnum ArchiveFormatEmpty = 393216
  fromEnum ArchiveFormatAr = 458752
  fromEnum ArchiveFormatArGnu = 458753
  fromEnum ArchiveFormatArBsd = 458754
  fromEnum ArchiveFormatMtree = 524288
  fromEnum ArchiveFormatRaw = 589824
  fromEnum ArchiveFormatXar = 655360
  fromEnum ArchiveFormatLha = 720896
  fromEnum ArchiveFormatCab = 786432
  fromEnum ArchiveFormatRar = 851968
  fromEnum ArchiveFormat7zip = 917504
  fromEnum ArchiveFormatWarc = 983040
  fromEnum ArchiveFormatRarV5 = 1048576

  toEnum :: Int -> ArchiveFormat
toEnum 65536 = ArchiveFormat
ArchiveFormatCpio
  toEnum 65537 = ArchiveFormat
ArchiveFormatCpioPosix
  toEnum 65538 = ArchiveFormat
ArchiveFormatCpioBinLe
  toEnum 65539 = ArchiveFormat
ArchiveFormatCpioBinBe
  toEnum 65540 = ArchiveFormat
ArchiveFormatCpioSvr4Nocrc
  toEnum 65541 = ArchiveFormat
ArchiveFormatCpioSvr4Crc
  toEnum 65542 = ArchiveFormat
ArchiveFormatCpioAfioLarge
  toEnum 131072 = ArchiveFormat
ArchiveFormatShar
  toEnum 131073 = ArchiveFormat
ArchiveFormatSharBase
  toEnum 131074 = ArchiveFormat
ArchiveFormatSharDump
  toEnum 196608 = ArchiveFormat
ArchiveFormatTar
  toEnum 196609 = ArchiveFormat
ArchiveFormatTarUstar
  toEnum 196610 = ArchiveFormat
ArchiveFormatTarPaxInterchange
  toEnum 196611 = ArchiveFormat
ArchiveFormatTarPaxRestricted
  toEnum 196612 = ArchiveFormat
ArchiveFormatTarGnutar
  toEnum 262144 = ArchiveFormat
ArchiveFormatIso9660
  toEnum 262145 = ArchiveFormat
ArchiveFormatIso9660Rockridge
  toEnum 327680 = ArchiveFormat
ArchiveFormatZip
  toEnum 393216 = ArchiveFormat
ArchiveFormatEmpty
  toEnum 458752 = ArchiveFormat
ArchiveFormatAr
  toEnum 458753 = ArchiveFormat
ArchiveFormatArGnu
  toEnum 458754 = ArchiveFormat
ArchiveFormatArBsd
  toEnum 524288 = ArchiveFormat
ArchiveFormatMtree
  toEnum 589824 = ArchiveFormat
ArchiveFormatRaw
  toEnum 655360 = ArchiveFormat
ArchiveFormatXar
  toEnum 720896 = ArchiveFormat
ArchiveFormatLha
  toEnum 786432 = ArchiveFormat
ArchiveFormatCab
  toEnum 851968 = ArchiveFormat
ArchiveFormatRar
  toEnum 917504 = ArchiveFormat
ArchiveFormat7zip
  toEnum 983040 = ArchiveFormat
ArchiveFormatWarc
  toEnum 1048576 = ArchiveFormat
ArchiveFormatRarV5
  toEnum unmatched :: Int
unmatched = String -> ArchiveFormat
forall a. HasCallStack => String -> a
error ("ArchiveFormat.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)

{-# LINE 124 "src/Codec/Archive/Types/Foreign.chs" #-}


-- | Abstract type
data Archive

-- | Abstract type
data ArchiveEntry

data Stat

data LinkResolver

type ArchiveReadCallback a b = Ptr Archive -> Ptr a -> Ptr (Ptr b) -> IO LaSSize
type ArchiveSkipCallback a = Ptr Archive -> Ptr a -> LaInt64 -> IO LaInt64
type ArchiveSeekCallback a = Ptr Archive -> Ptr a -> LaInt64 -> CInt -> IO LaInt64
type ArchiveWriteCallback a b = Ptr Archive -> Ptr a -> Ptr b -> CSize -> IO LaSSize
type ArchiveOpenCallbackRaw a = Ptr Archive -> Ptr a -> IO CInt
type ArchiveCloseCallbackRaw a = Ptr Archive -> Ptr a -> IO CInt
type ArchiveSwitchCallbackRaw a b = Ptr Archive -> Ptr a -> Ptr b -> IO CInt
type ArchivePassphraseCallback a = Ptr Archive -> Ptr a -> IO CString

newtype Flags = Flags CInt

newtype ReadDiskFlags = ReadDiskFlags CInt

newtype TimeFlag = TimeFlag CInt

newtype EntryACL = EntryACL CInt

newtype ArchiveCapabilities = ArchiveCapabilities CInt
    deriving (Eq)

instance Semigroup ArchiveCapabilities where
    (<>) (ArchiveCapabilities x) (ArchiveCapabilities y) = ArchiveCapabilities (x .|. y)

instance Monoid ArchiveCapabilities where
    mempty = ArchiveCapabilities 0
    mappend = (<>)

instance Semigroup ReadDiskFlags where
    (<>) (ReadDiskFlags x) (ReadDiskFlags y) = ReadDiskFlags (x .|. y)

instance Semigroup Flags where
    (<>) (Flags x) (Flags y) = Flags (x .|. y)

instance Monoid Flags where
    mempty = Flags 0
    mappend = (<>)

instance Semigroup EntryACL where
    (<>) (EntryACL x) (EntryACL y) = EntryACL (x .|. y)

-- TODO: `has` function for EntryACL