hstar-0.1.0.5: src/Compression.cpphs
module Compression ( compressionByFileExt
, decompressor
, compressor
) where
#ifdef BROTLI
import qualified Codec.Compression.Brotli as Brotli
#endif
import qualified Codec.Compression.BZip as BZip
import qualified Codec.Compression.GZip as GZip
import qualified Codec.Compression.Lzma as Lzma
import qualified Codec.Compression.Lzo as Lzo
#ifdef SNAPPY
import qualified Codec.Compression.Snappy.BSL as Snappy
#endif
import qualified Codec.Compression.Zlib as Zlib
import qualified Codec.Compression.Zstd.Lazy as Zstd
import qualified Codec.Lz4 as Lz4
import Codec.Lzip as Lzip
import Compression.Level
import qualified Compression.Lrzip as Lrzip
import Compression.Type
import qualified Data.ByteString.Lazy as BSL
import Data.List (isSuffixOf)
-- shar? .vba.gz?
compressionByFileExt :: FilePath -> Archive
compressionByFileExt fp | ".tgz" `isSuffixOf` fp = Tar GZip
| ".cpio.gz" `isSuffixOf` fp = Cpio GZip
| ".tar.bz2" `isSuffixOf` fp = Tar Bz2
| ".tar.bz" `isSuffixOf` fp = Tar Bz2
| ".tbz2" `isSuffixOf` fp = Tar Bz2
| ".tbz" `isSuffixOf` fp = Tar Bz2
| ".tar.gz" `isSuffixOf` fp = Tar GZip
| ".tar.xz" `isSuffixOf` fp = Tar Lzma
| ".txz" `isSuffixOf` fp = Tar Lzma
| ".tar.lzma" `isSuffixOf` fp = Tar Lzma
| ".tar.lz" `isSuffixOf` fp = Tar Lz
| ".tlz" `isSuffixOf` fp = Tar Lz
| ".tar.zst" `isSuffixOf` fp = Tar Zstd
| ".tar.Z" `isSuffixOf` fp = Tar Deflate
| ".tar.lz4" `isSuffixOf` fp = Tar Lz4
| ".tar.lzo" `isSuffixOf` fp = Tar Lzo
| ".tzo" `isSuffixOf` fp = Tar Lzo
| ".tar.lrz" `isSuffixOf` fp = Tar Lrzip
#ifdef BROTLI
| ".tbr" `isSuffixOf` fp = Tar Brotli
| ".tar.br" `isSuffixOf` fp = Tar Brotli
#endif
#ifdef SNAPPY
| ".tar.sz" `isSuffixOf` fp = Tar Snappy
| ".tsz" `isSuffixOf` fp = Tar Snappy
#endif
| ".tar" `isSuffixOf` fp = Tar None
| ".7z" `isSuffixOf` fp = SevenZip
| otherwise = error "Suffix not supported or invalid."
decompressor :: Compressor -> (BSL.ByteString -> BSL.ByteString)
decompressor Lzma = Lzma.decompress
decompressor Bz2 = BZip.decompress
decompressor GZip = GZip.decompress
decompressor Lz = Lzip.decompress
decompressor Zstd = Zstd.decompress
decompressor Deflate = Zlib.decompress
decompressor Lz4 = Lz4.decompress
decompressor Lzo = Lzo.decompressFile
decompressor Lrzip = Lrzip.decompress . BSL.toStrict
#ifdef BROTLI
decompressor Brotli = Brotli.decompress
#endif
#ifdef SNAPPY
decompressor Snappy = Snappy.decompress
#endif
decompressor None = id