{-# OPTIONS_HADDOCK hide #-}
module Codec.BMP.Compression
        (Compression(..))
where
import Data.Word
import Data.Binary
import Data.Binary.Get  
import Data.Binary.Put


-- | The Compression mode says how the image data is encoded in the file.
data Compression
        = CompressionRGB
        | CompressionRLE8
        | CompressionRLE4
        | CompressionBitFields
        | CompressionJPEG
        | CompressionPNG
        | CompressionUnknown Word32
        deriving (Show, Eq)


instance Binary Compression where
 get
  = do  c       <- getWord32le
        case c of
         0      -> return $ CompressionRGB
         1      -> return $ CompressionRLE8
         2      -> return $ CompressionRLE4
         3      -> return $ CompressionBitFields
         4      -> return $ CompressionJPEG
         5      -> return $ CompressionPNG
         _      -> return $ CompressionUnknown c
        
 put c
  = case c of
        CompressionRGB          -> putWord32le 0
        CompressionRLE8         -> putWord32le 1
        CompressionRLE4         -> putWord32le 2
        CompressionBitFields    -> putWord32le 3
        CompressionJPEG         -> putWord32le 4
        CompressionPNG          -> putWord32le 5
        CompressionUnknown x    -> putWord32le x