hit-0.4.0: Data/Git/Internal.hs
-- |
-- Module : Data.Git.Internal
-- License : BSD-style
-- Maintainer : Vincent Hanquez <vincent@snarc.org>
-- 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