packages feed

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