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