module Codec.Picture.Blp.Internal.Data(
    BlpStruct(..)
  , BlpCompression(..)
  , BlpFlag(..)
  , BlpPictureType(..)
  , BlpExt(..)
  ) where

import Codec.Picture
import Data.Bifunctor
import Data.ByteString (ByteString)
import Data.Hashable
import Data.Monoid
import Data.Vector (Vector)
import Data.Word
import GHC.Generics
import TextShow

import qualified Data.ByteString as BS
import qualified Data.Vector as V

data BlpStruct = BlpStruct {
  BlpStruct -> BlpCompression
blpCompression :: !BlpCompression
, BlpStruct -> [BlpFlag]
blpFlags :: ![BlpFlag]
, BlpStruct -> Word32
blpWidth :: !Word32
, BlpStruct -> Word32
blpHeight :: !Word32
, BlpStruct -> BlpPictureType
blpPictureType :: !BlpPictureType
, BlpStruct -> Word32
blpPictureSubType :: !Word32 -- is not used
, BlpStruct -> BlpExt
blpExt :: BlpExt
} deriving (Int -> BlpStruct -> ShowS
[BlpStruct] -> ShowS
BlpStruct -> String
(Int -> BlpStruct -> ShowS)
-> (BlpStruct -> String)
-> ([BlpStruct] -> ShowS)
-> Show BlpStruct
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BlpStruct] -> ShowS
$cshowList :: [BlpStruct] -> ShowS
show :: BlpStruct -> String
$cshow :: BlpStruct -> String
showsPrec :: Int -> BlpStruct -> ShowS
$cshowsPrec :: Int -> BlpStruct -> ShowS
Show, (forall x. BlpStruct -> Rep BlpStruct x)
-> (forall x. Rep BlpStruct x -> BlpStruct) -> Generic BlpStruct
forall x. Rep BlpStruct x -> BlpStruct
forall x. BlpStruct -> Rep BlpStruct x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BlpStruct x -> BlpStruct
$cfrom :: forall x. BlpStruct -> Rep BlpStruct x
Generic)

instance TextShow BlpStruct where
  showb :: BlpStruct -> Builder
showb BlpStruct{..} = "BlpStruct {\n"
    Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "  blpCompression = " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> BlpCompression -> Builder
forall a. TextShow a => a -> Builder
showb BlpCompression
blpCompression Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "\n"
    Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ", blpFlags = " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> [BlpFlag] -> Builder
forall a. TextShow a => a -> Builder
showb [BlpFlag]
blpFlags Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "\n"
    Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ", blpWidth = " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word32 -> Builder
forall a. TextShow a => a -> Builder
showb Word32
blpWidth Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "\n"
    Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ", blpHeight = " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word32 -> Builder
forall a. TextShow a => a -> Builder
showb Word32
blpHeight Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "\n"
    Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ", blpPictureType = " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> BlpPictureType -> Builder
forall a. TextShow a => a -> Builder
showb BlpPictureType
blpPictureType Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "\n"
    Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ", blpPictureSubType = " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word32 -> Builder
forall a. TextShow a => a -> Builder
showb Word32
blpPictureSubType Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "\n"
    Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ", blpExt = " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> BlpExt -> Builder
forall a. TextShow a => a -> Builder
showb BlpExt
blpExt Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "\n"
    Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "}"

data BlpExt =
    BlpJpeg {
      BlpExt -> ByteString
blpJpegHeader :: !ByteString
    , BlpExt -> [ByteString]
blpJpegData :: ![ByteString]
    }
  | BlpUncompressed1 {
      BlpExt -> Vector PixelRGBA8
blpU1Palette :: !(Vector PixelRGBA8)
    , BlpExt -> [(ByteString, ByteString)]
blpU1MipMaps :: ![(ByteString, ByteString)]
    }
  | BlpUncompressed2 {
      BlpExt -> Vector PixelRGBA8
blpU2Palette :: !(Vector PixelRGBA8)
    , BlpExt -> [ByteString]
blpU2MipMaps :: ![ByteString]
    }
  deriving (Int -> BlpExt -> ShowS
[BlpExt] -> ShowS
BlpExt -> String
(Int -> BlpExt -> ShowS)
-> (BlpExt -> String) -> ([BlpExt] -> ShowS) -> Show BlpExt
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BlpExt] -> ShowS
$cshowList :: [BlpExt] -> ShowS
show :: BlpExt -> String
$cshow :: BlpExt -> String
showsPrec :: Int -> BlpExt -> ShowS
$cshowsPrec :: Int -> BlpExt -> ShowS
Show, (forall x. BlpExt -> Rep BlpExt x)
-> (forall x. Rep BlpExt x -> BlpExt) -> Generic BlpExt
forall x. Rep BlpExt x -> BlpExt
forall x. BlpExt -> Rep BlpExt x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BlpExt x -> BlpExt
$cfrom :: forall x. BlpExt -> Rep BlpExt x
Generic)

-- | Helper to display bytestring as placeholder with length
showBinary :: ByteString -> Builder
showBinary :: ByteString -> Builder
showBinary v :: ByteString
v = "<bslength " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
tl ByteString
v Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ">"
  where
    tl :: ByteString -> Builder
tl = Int -> Builder
forall a. TextShow a => a -> Builder
showb (Int -> Builder) -> (ByteString -> Int) -> ByteString -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Int
BS.length

-- | Helper to display bytestring as placeholder with length
showVector :: Vector a -> Builder
showVector :: Vector a -> Builder
showVector v :: Vector a
v = "<veclength " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Vector a -> Builder
forall a. Vector a -> Builder
tl Vector a
v Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ">"
  where
    tl :: Vector a -> Builder
tl = Int -> Builder
forall a. TextShow a => a -> Builder
showb (Int -> Builder) -> (Vector a -> Int) -> Vector a -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Vector a -> Int
forall a. Vector a -> Int
V.length

-- | Helper that works as Data.Text.intercalate
intercalateb :: Builder -> [Builder] -> Builder
intercalateb :: Builder -> [Builder] -> Builder
intercalateb _ [] = Builder
forall a. Monoid a => a
mempty
intercalateb _ [x :: Builder
x] = Builder
x 
intercalateb spacer :: Builder
spacer (x :: Builder
x:xs :: [Builder]
xs) = Builder
x Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Builder
spacer Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Builder -> [Builder] -> Builder
intercalateb Builder
spacer [Builder]
xs

instance TextShow BlpExt where
  showb :: BlpExt -> Builder
showb v :: BlpExt
v = case BlpExt
v of
    BlpJpeg{..} -> "BlpJpeg { \n"
      Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "  blpJpegHeader = " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
showBinary ByteString
blpJpegHeader Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "\n"
      Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ", blpJpegData = [" Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Builder -> [Builder] -> Builder
intercalateb ", " ((ByteString -> Builder) -> [ByteString] -> [Builder]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ByteString -> Builder
showBinary [ByteString]
blpJpegData) Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "]\n"
      Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "}"
    BlpUncompressed1{..} -> "BlpUncompressed1 { \n"
      Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "  blpU1Palette = " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Vector PixelRGBA8 -> Builder
forall a. Vector a -> Builder
showVector Vector PixelRGBA8
blpU1Palette Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "\n"
      Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ", blpU1MipMaps = [" Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Builder -> [Builder] -> Builder
intercalateb ", " ( (\(a :: ByteString
a, b :: ByteString
b) -> "(" Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
showBinary ByteString
a Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ", " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
showBinary ByteString
b Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ")") ((ByteString, ByteString) -> Builder)
-> [(ByteString, ByteString)] -> [Builder]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(ByteString, ByteString)]
blpU1MipMaps) Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "]\n"
      Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "}"
    BlpUncompressed2{..} -> "BlpUncompressed2 { \n"
      Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "  blpU2Palette = " Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Vector PixelRGBA8 -> Builder
forall a. Vector a -> Builder
showVector Vector PixelRGBA8
blpU2Palette Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "\n"
      Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> ", blpU2MipMaps = [" Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Builder -> [Builder] -> Builder
intercalateb ", " ((ByteString -> Builder) -> [ByteString] -> [Builder]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ByteString -> Builder
showBinary [ByteString]
blpU2MipMaps) Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "]\n"
      Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> "}"

data BlpCompression =
    BlpCompressionJPEG
  | BlpCompressionUncompressed
  deriving (BlpCompression -> BlpCompression -> Bool
(BlpCompression -> BlpCompression -> Bool)
-> (BlpCompression -> BlpCompression -> Bool) -> Eq BlpCompression
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BlpCompression -> BlpCompression -> Bool
$c/= :: BlpCompression -> BlpCompression -> Bool
== :: BlpCompression -> BlpCompression -> Bool
$c== :: BlpCompression -> BlpCompression -> Bool
Eq, Eq BlpCompression
Eq BlpCompression =>
(BlpCompression -> BlpCompression -> Ordering)
-> (BlpCompression -> BlpCompression -> Bool)
-> (BlpCompression -> BlpCompression -> Bool)
-> (BlpCompression -> BlpCompression -> Bool)
-> (BlpCompression -> BlpCompression -> Bool)
-> (BlpCompression -> BlpCompression -> BlpCompression)
-> (BlpCompression -> BlpCompression -> BlpCompression)
-> Ord BlpCompression
BlpCompression -> BlpCompression -> Bool
BlpCompression -> BlpCompression -> Ordering
BlpCompression -> BlpCompression -> BlpCompression
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: BlpCompression -> BlpCompression -> BlpCompression
$cmin :: BlpCompression -> BlpCompression -> BlpCompression
max :: BlpCompression -> BlpCompression -> BlpCompression
$cmax :: BlpCompression -> BlpCompression -> BlpCompression
>= :: BlpCompression -> BlpCompression -> Bool
$c>= :: BlpCompression -> BlpCompression -> Bool
> :: BlpCompression -> BlpCompression -> Bool
$c> :: BlpCompression -> BlpCompression -> Bool
<= :: BlpCompression -> BlpCompression -> Bool
$c<= :: BlpCompression -> BlpCompression -> Bool
< :: BlpCompression -> BlpCompression -> Bool
$c< :: BlpCompression -> BlpCompression -> Bool
compare :: BlpCompression -> BlpCompression -> Ordering
$ccompare :: BlpCompression -> BlpCompression -> Ordering
$cp1Ord :: Eq BlpCompression
Ord, Int -> BlpCompression
BlpCompression -> Int
BlpCompression -> [BlpCompression]
BlpCompression -> BlpCompression
BlpCompression -> BlpCompression -> [BlpCompression]
BlpCompression
-> BlpCompression -> BlpCompression -> [BlpCompression]
(BlpCompression -> BlpCompression)
-> (BlpCompression -> BlpCompression)
-> (Int -> BlpCompression)
-> (BlpCompression -> Int)
-> (BlpCompression -> [BlpCompression])
-> (BlpCompression -> BlpCompression -> [BlpCompression])
-> (BlpCompression -> BlpCompression -> [BlpCompression])
-> (BlpCompression
    -> BlpCompression -> BlpCompression -> [BlpCompression])
-> Enum BlpCompression
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: BlpCompression
-> BlpCompression -> BlpCompression -> [BlpCompression]
$cenumFromThenTo :: BlpCompression
-> BlpCompression -> BlpCompression -> [BlpCompression]
enumFromTo :: BlpCompression -> BlpCompression -> [BlpCompression]
$cenumFromTo :: BlpCompression -> BlpCompression -> [BlpCompression]
enumFromThen :: BlpCompression -> BlpCompression -> [BlpCompression]
$cenumFromThen :: BlpCompression -> BlpCompression -> [BlpCompression]
enumFrom :: BlpCompression -> [BlpCompression]
$cenumFrom :: BlpCompression -> [BlpCompression]
fromEnum :: BlpCompression -> Int
$cfromEnum :: BlpCompression -> Int
toEnum :: Int -> BlpCompression
$ctoEnum :: Int -> BlpCompression
pred :: BlpCompression -> BlpCompression
$cpred :: BlpCompression -> BlpCompression
succ :: BlpCompression -> BlpCompression
$csucc :: BlpCompression -> BlpCompression
Enum, BlpCompression
BlpCompression -> BlpCompression -> Bounded BlpCompression
forall a. a -> a -> Bounded a
maxBound :: BlpCompression
$cmaxBound :: BlpCompression
minBound :: BlpCompression
$cminBound :: BlpCompression
Bounded, Int -> BlpCompression -> ShowS
[BlpCompression] -> ShowS
BlpCompression -> String
(Int -> BlpCompression -> ShowS)
-> (BlpCompression -> String)
-> ([BlpCompression] -> ShowS)
-> Show BlpCompression
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BlpCompression] -> ShowS
$cshowList :: [BlpCompression] -> ShowS
show :: BlpCompression -> String
$cshow :: BlpCompression -> String
showsPrec :: Int -> BlpCompression -> ShowS
$cshowsPrec :: Int -> BlpCompression -> ShowS
Show, (forall x. BlpCompression -> Rep BlpCompression x)
-> (forall x. Rep BlpCompression x -> BlpCompression)
-> Generic BlpCompression
forall x. Rep BlpCompression x -> BlpCompression
forall x. BlpCompression -> Rep BlpCompression x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BlpCompression x -> BlpCompression
$cfrom :: forall x. BlpCompression -> Rep BlpCompression x
Generic)

instance TextShow BlpCompression where
  showb :: BlpCompression -> Builder
showb v :: BlpCompression
v = case BlpCompression
v of
    BlpCompressionJPEG -> "BlpCompressionJPEG"
    BlpCompressionUncompressed -> "BlpCompressionUncompressed"

instance Hashable BlpCompression

data BlpFlag = BlpFlagAlphaChannel
  deriving (BlpFlag -> BlpFlag -> Bool
(BlpFlag -> BlpFlag -> Bool)
-> (BlpFlag -> BlpFlag -> Bool) -> Eq BlpFlag
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BlpFlag -> BlpFlag -> Bool
$c/= :: BlpFlag -> BlpFlag -> Bool
== :: BlpFlag -> BlpFlag -> Bool
$c== :: BlpFlag -> BlpFlag -> Bool
Eq, Eq BlpFlag
Eq BlpFlag =>
(BlpFlag -> BlpFlag -> Ordering)
-> (BlpFlag -> BlpFlag -> Bool)
-> (BlpFlag -> BlpFlag -> Bool)
-> (BlpFlag -> BlpFlag -> Bool)
-> (BlpFlag -> BlpFlag -> Bool)
-> (BlpFlag -> BlpFlag -> BlpFlag)
-> (BlpFlag -> BlpFlag -> BlpFlag)
-> Ord BlpFlag
BlpFlag -> BlpFlag -> Bool
BlpFlag -> BlpFlag -> Ordering
BlpFlag -> BlpFlag -> BlpFlag
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: BlpFlag -> BlpFlag -> BlpFlag
$cmin :: BlpFlag -> BlpFlag -> BlpFlag
max :: BlpFlag -> BlpFlag -> BlpFlag
$cmax :: BlpFlag -> BlpFlag -> BlpFlag
>= :: BlpFlag -> BlpFlag -> Bool
$c>= :: BlpFlag -> BlpFlag -> Bool
> :: BlpFlag -> BlpFlag -> Bool
$c> :: BlpFlag -> BlpFlag -> Bool
<= :: BlpFlag -> BlpFlag -> Bool
$c<= :: BlpFlag -> BlpFlag -> Bool
< :: BlpFlag -> BlpFlag -> Bool
$c< :: BlpFlag -> BlpFlag -> Bool
compare :: BlpFlag -> BlpFlag -> Ordering
$ccompare :: BlpFlag -> BlpFlag -> Ordering
$cp1Ord :: Eq BlpFlag
Ord, Int -> BlpFlag
BlpFlag -> Int
BlpFlag -> [BlpFlag]
BlpFlag -> BlpFlag
BlpFlag -> BlpFlag -> [BlpFlag]
BlpFlag -> BlpFlag -> BlpFlag -> [BlpFlag]
(BlpFlag -> BlpFlag)
-> (BlpFlag -> BlpFlag)
-> (Int -> BlpFlag)
-> (BlpFlag -> Int)
-> (BlpFlag -> [BlpFlag])
-> (BlpFlag -> BlpFlag -> [BlpFlag])
-> (BlpFlag -> BlpFlag -> [BlpFlag])
-> (BlpFlag -> BlpFlag -> BlpFlag -> [BlpFlag])
-> Enum BlpFlag
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: BlpFlag -> BlpFlag -> BlpFlag -> [BlpFlag]
$cenumFromThenTo :: BlpFlag -> BlpFlag -> BlpFlag -> [BlpFlag]
enumFromTo :: BlpFlag -> BlpFlag -> [BlpFlag]
$cenumFromTo :: BlpFlag -> BlpFlag -> [BlpFlag]
enumFromThen :: BlpFlag -> BlpFlag -> [BlpFlag]
$cenumFromThen :: BlpFlag -> BlpFlag -> [BlpFlag]
enumFrom :: BlpFlag -> [BlpFlag]
$cenumFrom :: BlpFlag -> [BlpFlag]
fromEnum :: BlpFlag -> Int
$cfromEnum :: BlpFlag -> Int
toEnum :: Int -> BlpFlag
$ctoEnum :: Int -> BlpFlag
pred :: BlpFlag -> BlpFlag
$cpred :: BlpFlag -> BlpFlag
succ :: BlpFlag -> BlpFlag
$csucc :: BlpFlag -> BlpFlag
Enum, BlpFlag
BlpFlag -> BlpFlag -> Bounded BlpFlag
forall a. a -> a -> Bounded a
maxBound :: BlpFlag
$cmaxBound :: BlpFlag
minBound :: BlpFlag
$cminBound :: BlpFlag
Bounded, Int -> BlpFlag -> ShowS
[BlpFlag] -> ShowS
BlpFlag -> String
(Int -> BlpFlag -> ShowS)
-> (BlpFlag -> String) -> ([BlpFlag] -> ShowS) -> Show BlpFlag
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BlpFlag] -> ShowS
$cshowList :: [BlpFlag] -> ShowS
show :: BlpFlag -> String
$cshow :: BlpFlag -> String
showsPrec :: Int -> BlpFlag -> ShowS
$cshowsPrec :: Int -> BlpFlag -> ShowS
Show, (forall x. BlpFlag -> Rep BlpFlag x)
-> (forall x. Rep BlpFlag x -> BlpFlag) -> Generic BlpFlag
forall x. Rep BlpFlag x -> BlpFlag
forall x. BlpFlag -> Rep BlpFlag x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BlpFlag x -> BlpFlag
$cfrom :: forall x. BlpFlag -> Rep BlpFlag x
Generic)

instance TextShow BlpFlag where
  showb :: BlpFlag -> Builder
showb v :: BlpFlag
v = case BlpFlag
v of
    BlpFlagAlphaChannel -> "BlpFlagAlphaChannel"

instance Hashable BlpFlag

data BlpPictureType =
    JPEGType
  | UncompressedWithAlpha
  | UncompressedWithoutAlpha
  deriving (BlpPictureType -> BlpPictureType -> Bool
(BlpPictureType -> BlpPictureType -> Bool)
-> (BlpPictureType -> BlpPictureType -> Bool) -> Eq BlpPictureType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BlpPictureType -> BlpPictureType -> Bool
$c/= :: BlpPictureType -> BlpPictureType -> Bool
== :: BlpPictureType -> BlpPictureType -> Bool
$c== :: BlpPictureType -> BlpPictureType -> Bool
Eq, Eq BlpPictureType
Eq BlpPictureType =>
(BlpPictureType -> BlpPictureType -> Ordering)
-> (BlpPictureType -> BlpPictureType -> Bool)
-> (BlpPictureType -> BlpPictureType -> Bool)
-> (BlpPictureType -> BlpPictureType -> Bool)
-> (BlpPictureType -> BlpPictureType -> Bool)
-> (BlpPictureType -> BlpPictureType -> BlpPictureType)
-> (BlpPictureType -> BlpPictureType -> BlpPictureType)
-> Ord BlpPictureType
BlpPictureType -> BlpPictureType -> Bool
BlpPictureType -> BlpPictureType -> Ordering
BlpPictureType -> BlpPictureType -> BlpPictureType
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: BlpPictureType -> BlpPictureType -> BlpPictureType
$cmin :: BlpPictureType -> BlpPictureType -> BlpPictureType
max :: BlpPictureType -> BlpPictureType -> BlpPictureType
$cmax :: BlpPictureType -> BlpPictureType -> BlpPictureType
>= :: BlpPictureType -> BlpPictureType -> Bool
$c>= :: BlpPictureType -> BlpPictureType -> Bool
> :: BlpPictureType -> BlpPictureType -> Bool
$c> :: BlpPictureType -> BlpPictureType -> Bool
<= :: BlpPictureType -> BlpPictureType -> Bool
$c<= :: BlpPictureType -> BlpPictureType -> Bool
< :: BlpPictureType -> BlpPictureType -> Bool
$c< :: BlpPictureType -> BlpPictureType -> Bool
compare :: BlpPictureType -> BlpPictureType -> Ordering
$ccompare :: BlpPictureType -> BlpPictureType -> Ordering
$cp1Ord :: Eq BlpPictureType
Ord, Int -> BlpPictureType
BlpPictureType -> Int
BlpPictureType -> [BlpPictureType]
BlpPictureType -> BlpPictureType
BlpPictureType -> BlpPictureType -> [BlpPictureType]
BlpPictureType
-> BlpPictureType -> BlpPictureType -> [BlpPictureType]
(BlpPictureType -> BlpPictureType)
-> (BlpPictureType -> BlpPictureType)
-> (Int -> BlpPictureType)
-> (BlpPictureType -> Int)
-> (BlpPictureType -> [BlpPictureType])
-> (BlpPictureType -> BlpPictureType -> [BlpPictureType])
-> (BlpPictureType -> BlpPictureType -> [BlpPictureType])
-> (BlpPictureType
    -> BlpPictureType -> BlpPictureType -> [BlpPictureType])
-> Enum BlpPictureType
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: BlpPictureType
-> BlpPictureType -> BlpPictureType -> [BlpPictureType]
$cenumFromThenTo :: BlpPictureType
-> BlpPictureType -> BlpPictureType -> [BlpPictureType]
enumFromTo :: BlpPictureType -> BlpPictureType -> [BlpPictureType]
$cenumFromTo :: BlpPictureType -> BlpPictureType -> [BlpPictureType]
enumFromThen :: BlpPictureType -> BlpPictureType -> [BlpPictureType]
$cenumFromThen :: BlpPictureType -> BlpPictureType -> [BlpPictureType]
enumFrom :: BlpPictureType -> [BlpPictureType]
$cenumFrom :: BlpPictureType -> [BlpPictureType]
fromEnum :: BlpPictureType -> Int
$cfromEnum :: BlpPictureType -> Int
toEnum :: Int -> BlpPictureType
$ctoEnum :: Int -> BlpPictureType
pred :: BlpPictureType -> BlpPictureType
$cpred :: BlpPictureType -> BlpPictureType
succ :: BlpPictureType -> BlpPictureType
$csucc :: BlpPictureType -> BlpPictureType
Enum, BlpPictureType
BlpPictureType -> BlpPictureType -> Bounded BlpPictureType
forall a. a -> a -> Bounded a
maxBound :: BlpPictureType
$cmaxBound :: BlpPictureType
minBound :: BlpPictureType
$cminBound :: BlpPictureType
Bounded, Int -> BlpPictureType -> ShowS
[BlpPictureType] -> ShowS
BlpPictureType -> String
(Int -> BlpPictureType -> ShowS)
-> (BlpPictureType -> String)
-> ([BlpPictureType] -> ShowS)
-> Show BlpPictureType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BlpPictureType] -> ShowS
$cshowList :: [BlpPictureType] -> ShowS
show :: BlpPictureType -> String
$cshow :: BlpPictureType -> String
showsPrec :: Int -> BlpPictureType -> ShowS
$cshowsPrec :: Int -> BlpPictureType -> ShowS
Show, (forall x. BlpPictureType -> Rep BlpPictureType x)
-> (forall x. Rep BlpPictureType x -> BlpPictureType)
-> Generic BlpPictureType
forall x. Rep BlpPictureType x -> BlpPictureType
forall x. BlpPictureType -> Rep BlpPictureType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep BlpPictureType x -> BlpPictureType
$cfrom :: forall x. BlpPictureType -> Rep BlpPictureType x
Generic)

instance TextShow BlpPictureType where
  showb :: BlpPictureType -> Builder
showb v :: BlpPictureType
v = case BlpPictureType
v of
    JPEGType -> "JPEGType"
    UncompressedWithAlpha -> "UncompressedWithAlpha"
    UncompressedWithoutAlpha -> "UncompressedWithoutAlpha"

instance Hashable BlpPictureType