{-# LANGUAGE OverloadedStrings #-} module Archive.Tar ( Entry , Error , FP , writeArchiveBytes , unpackToDirRaw , readArchiveBytes , packFilesRaw , versionInfo , toFP ) where import Codec.Archive.Tar (Entries (..)) import qualified Codec.Archive.Tar as Tar import Control.Composition ((.@)) import qualified Data.ByteString.Lazy as BSL import qualified Data.Text as T import Data.Text.Encoding (encodeUtf8) import qualified Data.Version as V import qualified Paths_archive_tar_bytestring as P import System.Posix.ByteString.FilePath (RawFilePath) type Entry = Tar.Entry type Error = Tar.FormatError type FP = RawFilePath toFP :: FilePath -> FP toFP = encodeUtf8 . T.pack coerceToList :: Entries a -> Either a [Entry] coerceToList (Next e es) = (e :) <$> coerceToList es coerceToList Done = Right [] coerceToList (Fail ex) = Left ex writeArchiveBytes :: [Entry] -> BSL.ByteString writeArchiveBytes = Tar.write readArchiveBytes :: BSL.ByteString -> Either Error [Entry] readArchiveBytes = coerceToList . Tar.read unpackToDirRaw :: FP -> BSL.ByteString -> IO () unpackToDirRaw = Tar.read .@ Tar.unpack packFilesRaw :: [FP] -> IO BSL.ByteString packFilesRaw = fmap Tar.write . Tar.pack "." versionInfo :: String versionInfo = "tar-bytestring: " ++ VERSION_tar_bytestring ++ "\narchive-tar-bytestring: " ++ V.showVersion P.version