module Codec.Compression.Zlib.Lens
(
gzipped,
zlibbed,
deflated,
compressed,
Format,
gzip,
zlib,
deflate,
zlibbed',
gzipped',
deflated',
compressed',
Params,
defaultParams,
levelC,
methodC,
windowBitsC,
windowBitsD,
memoryLevelC,
strategyC,
bufferSizeC,
bufferSizeD,
dictionary,
CompressionLevel,
defaultCompression,
noCompression,
bestSpeed,
bestCompression,
compressionLevel,
Method,
deflateMethod,
WindowBits,
defaultWindowBits,
windowBits,
MemoryLevel,
defaultMemoryLevel,
minMemoryLevel,
maxMemoryLevel,
memoryLevel,
CompressionStrategy,
defaultStrategy,
filteredStrategy,
huffmanOnlyStrategy
) where
import Control.Applicative
import Codec.Compression.Zlib.Internal
import qualified Data.ByteString as S (ByteString)
import qualified Data.ByteString.Lazy as L (ByteString)
import Data.Profunctor (Profunctor(dimap))
type Lens' s a = Functor f => (a -> f a) -> s -> f s
type Iso' s a = (Functor f, Profunctor p) => p a (f a) -> p s (f s)
zlib :: Format
zlib = zlibFormat
gzip :: Format
gzip = gzipFormat
deflate :: Format
deflate = rawFormat
gzipped :: Iso' L.ByteString L.ByteString
gzipped = compressed gzip
zlibbed :: Iso' L.ByteString L.ByteString
zlibbed = compressed zlib
deflated :: Iso' L.ByteString L.ByteString
deflated = compressed deflate
compressed :: Format -> Iso' L.ByteString L.ByteString
compressed fmt = compressed' fmt defaultParams
gzipped' :: Params -> Iso' L.ByteString L.ByteString
gzipped' = compressed' gzip
zlibbed' :: Params -> Iso' L.ByteString L.ByteString
zlibbed' = compressed' zlib
deflated' :: Params -> Iso' L.ByteString L.ByteString
deflated' = compressed' deflate
compressed' :: Format -> Params -> Iso' L.ByteString L.ByteString
compressed' fmt (Params c d) = dimap (compress fmt c) (fmap (decompress fmt d))
data Params = Params !CompressParams !DecompressParams
defaultParams :: Params
defaultParams = Params defaultCompressParams defaultDecompressParams
levelC :: Lens' Params CompressionLevel
levelC = \ f (Params c d) -> (\l -> Params (c {compressLevel = l}) d) <$> f (compressLevel c)
methodC :: Lens' Params Method
methodC = \ f (Params c d) -> (\m -> Params (c {compressMethod = m}) d) <$> f (compressMethod c)
windowBitsC :: Lens' Params WindowBits
windowBitsC = \ f (Params c d) -> (\wb -> Params (c {compressWindowBits = wb}) d) <$> f (compressWindowBits c)
windowBitsD :: Lens' Params WindowBits
windowBitsD = \ f (Params c d) -> (\wb -> Params c (d {decompressWindowBits = wb})) <$> f (decompressWindowBits d)
memoryLevelC :: Lens' Params MemoryLevel
memoryLevelC = \ f (Params c d) -> (\ml -> Params (c {compressMemoryLevel = ml}) d) <$> f (compressMemoryLevel c)
strategyC :: Lens' Params CompressionStrategy
strategyC = \ f (Params c d) -> (\s -> Params (c {compressStrategy = s}) d) <$> f (compressStrategy c)
bufferSizeC :: Lens' Params Int
bufferSizeC = \ f (Params c d) -> (\bs -> Params (c {compressBufferSize = bs}) d) <$> f (compressBufferSize c)
bufferSizeD :: Lens' Params Int
bufferSizeD = \ f (Params c d) -> (\bs -> Params c (d {decompressBufferSize = bs})) <$> f (decompressBufferSize d)
dictionary :: Lens' Params (Maybe S.ByteString)
dictionary = \f (Params c d) -> (\mbs -> Params (c {compressDictionary = mbs}) (d {decompressDictionary = mbs})) <$> f (compressDictionary c <|> decompressDictionary d)