{-# LINE 1 "src/Archive/Tar.cpphs" #-}
# 1 "src/Archive/Tar.cpphs"
# 1 "<built-in>"
# 1 "<command-line>"
# 13 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4

# 17 "/usr/include/stdc-predef.h" 3 4











































# 13 "<command-line>" 2
# 1 "./dist/build/autogen/cabal_macros.h" 1



# 13 "./dist/build/autogen/cabal_macros.h"

# 23 "./dist/build/autogen/cabal_macros.h"

# 33 "./dist/build/autogen/cabal_macros.h"

# 43 "./dist/build/autogen/cabal_macros.h"

# 53 "./dist/build/autogen/cabal_macros.h"


# 64 "./dist/build/autogen/cabal_macros.h"

# 74 "./dist/build/autogen/cabal_macros.h"

# 84 "./dist/build/autogen/cabal_macros.h"

# 94 "./dist/build/autogen/cabal_macros.h"

# 104 "./dist/build/autogen/cabal_macros.h"

# 114 "./dist/build/autogen/cabal_macros.h"

# 124 "./dist/build/autogen/cabal_macros.h"

# 134 "./dist/build/autogen/cabal_macros.h"

# 144 "./dist/build/autogen/cabal_macros.h"

# 154 "./dist/build/autogen/cabal_macros.h"

# 164 "./dist/build/autogen/cabal_macros.h"

# 174 "./dist/build/autogen/cabal_macros.h"

# 184 "./dist/build/autogen/cabal_macros.h"

# 13 "<command-line>" 2
# 1 "/home/builder/.ghcup/ghc/9.2.4/lib/ghc-9.2.4/include/ghcversion.h" 1
















# 13 "<command-line>" 2
# 1 "/tmp/ghc1520065_0/ghc_2.h" 1












































































































































































































# 13 "<command-line>" 2
# 1 "src/Archive/Tar.cpphs"
module Archive.Tar ( Entry
                   , Error
                   , FP
                   , writeArchiveBytes
                   , unpackToDirRaw
                   , readArchiveBytes
                   , packFilesRaw
                   , versionInfo
                   , toFP
                   ) where

import           Codec.Archive.Tar    (Entries, GenEntries (..))
import qualified Codec.Archive.Tar    as Tar
import           Control.Composition  ((.@))
import qualified Data.ByteString.Lazy as BSL
import qualified Data.Version         as V
import qualified Paths_archive_tar    as P

type Entry = Tar.Entry

type Error = Tar.FormatError

type FP = FilePath

toFP :: FilePath -> FP
toFP = id

-- this is bad but libarchive's error handling is vaguely fucked
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 "."

-- | @since 0.2.2.0
versionInfo :: String
versionInfo = "tar: " ++ "0.6.0.0" ++ "\narchive-tar: " ++ V.showVersion P.version