hstar-0.1.0.3: 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
#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 qualified Data.ByteString.Lazy as BSL
import Data.List (isSuffixOf)
data Compressor = Lzma
| Lz
| Bz2
| GZip
| Zstd
| Deflate
| Lz4
#ifdef BROTLI
| Brotli
#endif
#ifdef SNAPPY
| Snappy
#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
#ifdef SNAPPY
| ".tar.sz" `isSuffixOf` fp = Snappy
#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
#ifdef SNAPPY
decompressor Snappy = Snappy.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
#ifdef SNAPPY
compressor Snappy = Snappy.compress
#endif
compressor None = id