{-# 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 (Int -> Compression -> ShowS
[Compression] -> ShowS
Compression -> String
(Int -> Compression -> ShowS)
-> (Compression -> String)
-> ([Compression] -> ShowS)
-> Show Compression
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Compression] -> ShowS
$cshowList :: [Compression] -> ShowS
show :: Compression -> String
$cshow :: Compression -> String
showsPrec :: Int -> Compression -> ShowS
$cshowsPrec :: Int -> Compression -> ShowS
Show, Compression -> Compression -> Bool
(Compression -> Compression -> Bool)
-> (Compression -> Compression -> Bool) -> Eq Compression
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Compression -> Compression -> Bool
$c/= :: Compression -> Compression -> Bool
== :: Compression -> Compression -> Bool
$c== :: Compression -> Compression -> Bool
Eq)


instance Binary Compression where
 get :: Get Compression
get
  = do  Word32
c       <- Get Word32
getWord32le
        case Word32
c of
         0      -> Compression -> Get Compression
forall (m :: * -> *) a. Monad m => a -> m a
return (Compression -> Get Compression) -> Compression -> Get Compression
forall a b. (a -> b) -> a -> b
$ Compression
CompressionRGB
         1      -> Compression -> Get Compression
forall (m :: * -> *) a. Monad m => a -> m a
return (Compression -> Get Compression) -> Compression -> Get Compression
forall a b. (a -> b) -> a -> b
$ Compression
CompressionRLE8
         2      -> Compression -> Get Compression
forall (m :: * -> *) a. Monad m => a -> m a
return (Compression -> Get Compression) -> Compression -> Get Compression
forall a b. (a -> b) -> a -> b
$ Compression
CompressionRLE4
         3      -> Compression -> Get Compression
forall (m :: * -> *) a. Monad m => a -> m a
return (Compression -> Get Compression) -> Compression -> Get Compression
forall a b. (a -> b) -> a -> b
$ Compression
CompressionBitFields
         4      -> Compression -> Get Compression
forall (m :: * -> *) a. Monad m => a -> m a
return (Compression -> Get Compression) -> Compression -> Get Compression
forall a b. (a -> b) -> a -> b
$ Compression
CompressionJPEG
         5      -> Compression -> Get Compression
forall (m :: * -> *) a. Monad m => a -> m a
return (Compression -> Get Compression) -> Compression -> Get Compression
forall a b. (a -> b) -> a -> b
$ Compression
CompressionPNG
         _      -> Compression -> Get Compression
forall (m :: * -> *) a. Monad m => a -> m a
return (Compression -> Get Compression) -> Compression -> Get Compression
forall a b. (a -> b) -> a -> b
$ Word32 -> Compression
CompressionUnknown Word32
c
        
 put :: Compression -> Put
put c :: Compression
c
  = case Compression
c of
        CompressionRGB          -> Word32 -> Put
putWord32le 0
        CompressionRLE8         -> Word32 -> Put
putWord32le 1
        CompressionRLE4         -> Word32 -> Put
putWord32le 2
        CompressionBitFields    -> Word32 -> Put
putWord32le 3
        CompressionJPEG         -> Word32 -> Put
putWord32le 4
        CompressionPNG          -> Word32 -> Put
putWord32le 5
        CompressionUnknown x :: Word32
x    -> Word32 -> Put
putWord32le Word32
x