hstar-0.1.0.2: 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.Zlib as Zlib
import qualified Codec.Compression.Zstd.Lazy as Zstd
import qualified Codec.Lz4 as Lz4
import Codec.Lzip as Lzip
import qualified Data.ByteString.Lazy as BSL
import Data.List (isSuffixOf)
data Compressor = Lzma
| Lz
| Bz2
| GZip
| Zstd
| Deflate
| Lz4
#ifdef BROTLI
| Brotli
#endif
| None
compressionByFileExt :: FilePath -> Compressor
compressionByFileExt fp | ".tgz" `isSuffixOf` fp = GZip
| ".tar.bz2" `isSuffixOf` fp = Bz2
| ".tar.bz" `isSuffixOf` fp = Bz2
| ".tbz2" `isSuffixOf` fp = Bz2
| ".tbz" `isSuffixOf` fp = Bz2
| ".tar.gz" `isSuffixOf` fp = GZip
| ".tar.xz" `isSuffixOf` fp = Lzma
| ".txz" `isSuffixOf` fp = Lzma
| ".tar.lz" `isSuffixOf` fp = Lz
| ".tlz" `isSuffixOf` fp = Lz
| ".tar.zst" `isSuffixOf` fp = Zstd
| ".tar.Z" `isSuffixOf` fp = Deflate
| ".tar.lz4" `isSuffixOf` fp = Lz4
#ifdef BROTLI
| ".tbr" `isSuffixOf` fp = Brotli
| ".tar.br" `isSuffixOf` fp = Brotli
#endif
| ".tar" `isSuffixOf` fp = None
| 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
#ifdef BROTLI
decompressor Brotli = Brotli.decompress
#endif
decompressor None = id
compressor :: Compressor -> (BSL.ByteString -> BSL.ByteString)
compressor Lzma = Lzma.compress
compressor Bz2 = BZip.compress
compressor GZip = GZip.compress
compressor Lz = Lzip.compress
compressor Zstd = Zstd.compress 3
compressor Deflate = Zlib.compress
compressor Lz4 = Lz4.compress
#ifdef BROTLI
compressor Brotli = Brotli.compress
#endif
compressor None = id