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

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














































# 12 "<command-line>" 2
# 1 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h" 1



# 13 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 24 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 35 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 46 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 57 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 68 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 79 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 90 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 101 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 112 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 123 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 134 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 145 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 156 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 167 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 178 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"


# 189 "/home/vanessa/programming/haskell/current/archive-backpack/dist-newstyle/build/x86_64-linux/ghc-8.8.3/archive-tar-bytestring-1.0.0.0/build/autogen/cabal_macros.h"

# 12 "<command-line>" 2
# 1 "/opt/ghc/8.8.3/lib/ghc-8.8.3/include/ghcversion.h" 1















# 12 "<command-line>" 2
# 1 "src/Archive/Tar.cpphs"
{-# 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: " ++ "0.6.3.1" ++ "\narchive-tar-bytestring: " ++ V.showVersion P.version