module Archive.FFI ( Entry
                   , Error
                   , readArchiveBytes
                   , unpackToDir
                   , writeArchiveBytes
                   , packFiles
                   ) where

import qualified Codec.Archive        as FFI
import           Control.Composition  ((.*))
import qualified Data.ByteString.Lazy as BSL

type Entry = FFI.Entry

type Error = FFI.ArchiveResult

writeArchiveBytes :: [Entry] -> BSL.ByteString
writeArchiveBytes = FFI.entriesToBSL

readArchiveBytes :: BSL.ByteString -> Either Error [Entry]
readArchiveBytes = FFI.readArchiveBSL

unpackToDir :: FilePath -> BSL.ByteString -> IO ()
unpackToDir = fmap (either (error . show) id) .* FFI.runArchiveM .* FFI.unpackToDirLazy

packFiles :: [FilePath] -> IO BSL.ByteString
packFiles = FFI.packFiles