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