-- | -- Module : Data.Git.Internal -- License : BSD-style -- Maintainer : Vincent Hanquez -- Stability : experimental -- Portability : unix -- module Data.Git.Internal ( be32 , be16 , Zipped(..) , readZippedFile , dezip ) where import Control.Applicative import Data.Bits import Data.Word import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as L import Codec.Compression.Zlib import Filesystem.Path import Filesystem.Path.Rules import Prelude hiding (FilePath) be32 :: B.ByteString -> Word32 be32 b = fromIntegral (B.index b 0) `shiftL` 24 + fromIntegral (B.index b 1) `shiftL` 16 + fromIntegral (B.index b 2) `shiftL` 8 + fromIntegral (B.index b 3) be16 :: B.ByteString -> Word16 be16 b = fromIntegral (B.index b 0) `shiftL` 8 + fromIntegral (B.index b 1) newtype Zipped = Zipped { getZippedData :: L.ByteString } deriving (Show,Eq) readZippedFile :: FilePath -> IO Zipped readZippedFile fp = Zipped <$> L.readFile (encodeString posix fp) dezip :: Zipped -> L.ByteString dezip = decompress . getZippedData