packages feed

archive-libarchive-1.0.0.1: src/Archive/FFI.cpphs

module Archive.FFI ( Entry
                   , Error
                   , FP
                   , readArchiveBytes
                   , unpackToDirRaw
                   , writeArchiveBytes
                   , packFilesRaw
                   , versionInfo
                   , toFP
                   ) where

import qualified Codec.Archive                 as FFI
import           Codec.Archive.Foreign.Archive (archiveVersionString)
import           Control.Composition           ((.*))
import qualified Data.ByteString               as BS
import qualified Data.ByteString.Lazy          as BSL
import qualified Data.Version                  as V
import qualified Paths_archive_libarchive      as P

type Entry = FFI.Entry FilePath BS.ByteString

type Error = FFI.ArchiveResult

type FP = FilePath

toFP :: FilePath -> FP
toFP = id

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

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

unpackToDirRaw :: FP -> BSL.ByteString -> IO ()
unpackToDirRaw = FFI.throwArchiveM .* FFI.unpackToDirLazy

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

-- | @since 0.2.2.0
versionInfo :: String
versionInfo =
       "libarchive-hs: " ++ VERSION_libarchive ++ "\n"
    ++ archiveVersionString ++ "\n"
    ++ "archive-libarchive: " ++ V.showVersion P.version