{-# OPTIONS_GHC -Wno-orphans #-}
module ClickHaskell.Primitive.TInt
( Int8, Int16, Int32, Int64, Int128, Int256
) where
import ClickHaskell.Primitive.Serialization
import Data.Int (Int8, Int16, Int32, Int64)
import Data.ByteString.Builder (byteString, int8, int16LE, int32LE, int64LE, word64LE)
import Data.ByteString.Char8 as BS8 (pack)
import Data.Binary.Get (getInt8, getInt16le, getInt32le, getInt64le, getWord64le)
import Data.WideWord
instance IsChType Int8 where
chTypeName :: String
chTypeName = String
"Int8"
defaultValueOfTypeName :: Int8
defaultValueOfTypeName = Int8
0
instance Serializable Int8 where
serialize :: ProtocolRevision -> Int8 -> Builder
serialize ProtocolRevision
_ = Int8 -> Builder
int8
deserialize :: ProtocolRevision -> Get Int8
deserialize ProtocolRevision
_ = Get Int8
getInt8
{-# INLINE deserialize #-}
instance ToQueryPart Int8 where
toQueryPart :: Int8 -> Builder
toQueryPart = StrictByteString -> Builder
byteString (StrictByteString -> Builder)
-> (Int8 -> StrictByteString) -> Int8 -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> StrictByteString
BS8.pack (String -> StrictByteString)
-> (Int8 -> String) -> Int8 -> StrictByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int8 -> String
forall a. Show a => a -> String
show
instance IsChType Int16 where
chTypeName :: String
chTypeName = String
"Int16"
defaultValueOfTypeName :: Int16
defaultValueOfTypeName = Int16
0
instance Serializable Int16 where
serialize :: ProtocolRevision -> Int16 -> Builder
serialize ProtocolRevision
_ = Int16 -> Builder
int16LE
deserialize :: ProtocolRevision -> Get Int16
deserialize ProtocolRevision
_ = Get Int16
getInt16le
{-# INLINE deserialize #-}
instance ToQueryPart Int16 where
toQueryPart :: Int16 -> Builder
toQueryPart = StrictByteString -> Builder
byteString (StrictByteString -> Builder)
-> (Int16 -> StrictByteString) -> Int16 -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> StrictByteString
BS8.pack (String -> StrictByteString)
-> (Int16 -> String) -> Int16 -> StrictByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int16 -> String
forall a. Show a => a -> String
show
instance IsChType Int32 where
chTypeName :: String
chTypeName = String
"Int32"
defaultValueOfTypeName :: Int32
defaultValueOfTypeName = Int32
0
instance Serializable Int32 where
serialize :: ProtocolRevision -> Int32 -> Builder
serialize ProtocolRevision
_ = Int32 -> Builder
int32LE
deserialize :: ProtocolRevision -> Get Int32
deserialize ProtocolRevision
_ = Get Int32
getInt32le
{-# INLINE deserialize #-}
instance ToQueryPart Int32 where
toQueryPart :: Int32 -> Builder
toQueryPart = StrictByteString -> Builder
byteString (StrictByteString -> Builder)
-> (Int32 -> StrictByteString) -> Int32 -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> StrictByteString
BS8.pack (String -> StrictByteString)
-> (Int32 -> String) -> Int32 -> StrictByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int32 -> String
forall a. Show a => a -> String
show
instance IsChType Int64 where
chTypeName :: String
chTypeName = String
"Int64"
defaultValueOfTypeName :: Int64
defaultValueOfTypeName = Int64
0
instance Serializable Int64 where
serialize :: ProtocolRevision -> Int64 -> Builder
serialize ProtocolRevision
_ = Int64 -> Builder
int64LE
deserialize :: ProtocolRevision -> Get Int64
deserialize ProtocolRevision
_ = Get Int64
getInt64le
{-# INLINE deserialize #-}
instance ToQueryPart Int64 where
toQueryPart :: Int64 -> Builder
toQueryPart = StrictByteString -> Builder
byteString (StrictByteString -> Builder)
-> (Int64 -> StrictByteString) -> Int64 -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> StrictByteString
BS8.pack (String -> StrictByteString)
-> (Int64 -> String) -> Int64 -> StrictByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> String
forall a. Show a => a -> String
show
instance IsChType Int128 where
chTypeName :: String
chTypeName = String
"Int128"
defaultValueOfTypeName :: Int128
defaultValueOfTypeName = Int128
0
instance Serializable Int128 where
serialize :: ProtocolRevision -> Int128 -> Builder
serialize ProtocolRevision
_ = (\(Int128 Word64
hi Word64
lo) -> Word64 -> Builder
word64LE Word64
lo Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word64 -> Builder
word64LE Word64
hi)
deserialize :: ProtocolRevision -> Get Int128
deserialize ProtocolRevision
_ = do
low <- Get Word64
getWord64le
high <- getWord64le
pure $ Int128 high low
{-# INLINE deserialize #-}
instance ToQueryPart Int128 where
toQueryPart :: Int128 -> Builder
toQueryPart Int128
x = Builder
"'" Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> (StrictByteString -> Builder
byteString (StrictByteString -> Builder)
-> (Int128 -> StrictByteString) -> Int128 -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> StrictByteString
BS8.pack (String -> StrictByteString)
-> (Int128 -> String) -> Int128 -> StrictByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int128 -> String
forall a. Show a => a -> String
show) Int128
x Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Builder
"'"
instance IsChType Int256 where
chTypeName :: String
chTypeName = String
"Int256"
defaultValueOfTypeName :: Int256
defaultValueOfTypeName = Int256
0
instance Serializable Int256 where
serialize :: ProtocolRevision -> Int256 -> Builder
serialize ProtocolRevision
_ = (\(Int256 Word64
a1 Word64
a2 Word64
a3 Word64
a4) -> Word64 -> Builder
word64LE Word64
a4 Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word64 -> Builder
word64LE Word64
a3 Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word64 -> Builder
word64LE Word64
a2 Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word64 -> Builder
word64LE Word64
a1)
deserialize :: ProtocolRevision -> Get Int256
deserialize ProtocolRevision
_ = do
low <- Get Word64
getWord64le
mid1 <- getWord64le
mid2 <- getWord64le
high <- getWord64le
pure $ Int256 high mid2 mid1 low
{-# INLINE deserialize #-}
instance ToQueryPart Int256 where
toQueryPart :: Int256 -> Builder
toQueryPart Int256
x = Builder
"'" Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> (StrictByteString -> Builder
byteString (StrictByteString -> Builder)
-> (Int256 -> StrictByteString) -> Int256 -> Builder
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> StrictByteString
BS8.pack (String -> StrictByteString)
-> (Int256 -> String) -> Int256 -> StrictByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int256 -> String
forall a. Show a => a -> String
show) Int256
x Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Builder
"'"