{-# OPTIONS_GHC -Wno-orphans #-}
module ClickHaskell.Primitive.TBool where

-- Internal
import ClickHaskell.Primitive.Serialization

-- GHC included
import Data.ByteString.Builder (int8)
import Data.Bool ( bool )

-- External
import Data.Binary.Get (getInt8)


instance IsChType Bool where
  chTypeName :: String
chTypeName = String
"Bool"
  defaultValueOfTypeName :: Bool
defaultValueOfTypeName = Bool
False

instance Serializable Bool where
  serialize :: ProtocolRevision -> Bool -> Builder
serialize ProtocolRevision
_ = Int8 -> Builder
int8 (Int8 -> Builder) -> (Bool -> Int8) -> Bool -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int8 -> Int8 -> Bool -> Int8
forall a. a -> a -> Bool -> a
bool Int8
0 Int8
1
  deserialize :: ProtocolRevision -> Get Bool
deserialize ProtocolRevision
_ = (\Int8
int -> case Int8
int of Int8
0->Bool
False; Int8
_->Bool
True) (Int8 -> Bool) -> Get Int8 -> Get Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Get Int8
getInt8
  {-# INLINE deserialize #-}

instance ToQueryPart Bool where
  toQueryPart :: Bool -> Builder
toQueryPart = Builder -> Builder -> Bool -> Builder
forall a. a -> a -> Bool -> a
bool Builder
"false" Builder
"true"