{-# LANGUAGE OverloadedStrings, RecordWildCards #-} module YQL.Y ( decompress , deflate , inflate , rest ) where import qualified Codec.Compression.GZip as GZip import qualified Codec.Compression.Zlib as Zlib import Control.Lens import Data.ByteString.Lazy import qualified Data.ByteString.Base64.Lazy as Base64 import Network.HTTP.Conduit (parseUrl) import qualified Data.YQL as Data import qualified Data.YQL.Rest as Data decompress :: ByteString -> (Maybe ByteString) decompress e = either (const Nothing) (Just . GZip.decompress) (Base64.decode e) deflate :: ByteString -> Int -> ByteString deflate string level = Base64.encode $ Zlib.compressWith Zlib.defaultCompressParams { Zlib.compressLevel = Zlib.compressionLevel level } string inflate :: ByteString -> Maybe ByteString inflate e = case Base64.decode e of Right string -> Just $ Zlib.decompress string _ -> Nothing rest :: String -> Data.YQLM () rest url = do req <- parseUrl url Data.rest . Data.httpRequest .= req