module Kafka.Producer.Convert
( copyMsgFlags
, producePartitionInt
, producePartitionCInt
, handleProduceErr
, handleProduceErr'
, handleProduceErrT
)
where

import           Foreign.C.Error        (getErrno)
import           Foreign.C.Types        (CInt)
import           Kafka.Internal.RdKafka (RdKafkaRespErrT(..), rdKafkaMsgFlagCopy)
import           Kafka.Internal.Shared  (kafkaRespErr)
import           Kafka.Types            (KafkaError(..))
import           Kafka.Producer.Types   (ProducePartition(..))

copyMsgFlags :: Int
copyMsgFlags :: Int
copyMsgFlags = Int
rdKafkaMsgFlagCopy
{-# INLINE copyMsgFlags  #-}

producePartitionInt :: ProducePartition -> Int
producePartitionInt :: ProducePartition -> Int
producePartitionInt UnassignedPartition = -1
producePartitionInt (SpecifiedPartition n :: Int
n) = Int
n
{-# INLINE producePartitionInt #-}

producePartitionCInt :: ProducePartition -> CInt
producePartitionCInt :: ProducePartition -> CInt
producePartitionCInt = Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt)
-> (ProducePartition -> Int) -> ProducePartition -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ProducePartition -> Int
producePartitionInt
{-# INLINE producePartitionCInt #-}

handleProduceErr :: Int -> IO (Maybe KafkaError)
handleProduceErr :: Int -> IO (Maybe KafkaError)
handleProduceErr (- 1) = KafkaError -> Maybe KafkaError
forall a. a -> Maybe a
Just (KafkaError -> Maybe KafkaError)
-> (Errno -> KafkaError) -> Errno -> Maybe KafkaError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Errno -> KafkaError
kafkaRespErr (Errno -> Maybe KafkaError) -> IO Errno -> IO (Maybe KafkaError)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO Errno
getErrno
handleProduceErr 0 = Maybe KafkaError -> IO (Maybe KafkaError)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe KafkaError
forall a. Maybe a
Nothing
handleProduceErr _ = Maybe KafkaError -> IO (Maybe KafkaError)
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe KafkaError -> IO (Maybe KafkaError))
-> Maybe KafkaError -> IO (Maybe KafkaError)
forall a b. (a -> b) -> a -> b
$ KafkaError -> Maybe KafkaError
forall a. a -> Maybe a
Just KafkaError
KafkaInvalidReturnValue
{-# INLINE handleProduceErr #-}

handleProduceErrT :: RdKafkaRespErrT -> IO (Maybe KafkaError)
handleProduceErrT :: RdKafkaRespErrT -> IO (Maybe KafkaError)
handleProduceErrT RdKafkaRespErrUnknown = KafkaError -> Maybe KafkaError
forall a. a -> Maybe a
Just (KafkaError -> Maybe KafkaError)
-> (Errno -> KafkaError) -> Errno -> Maybe KafkaError
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Errno -> KafkaError
kafkaRespErr (Errno -> Maybe KafkaError) -> IO Errno -> IO (Maybe KafkaError)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO Errno
getErrno
handleProduceErrT RdKafkaRespErrNoError = Maybe KafkaError -> IO (Maybe KafkaError)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe KafkaError
forall a. Maybe a
Nothing
handleProduceErrT e :: RdKafkaRespErrT
e = Maybe KafkaError -> IO (Maybe KafkaError)
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe KafkaError -> IO (Maybe KafkaError))
-> Maybe KafkaError -> IO (Maybe KafkaError)
forall a b. (a -> b) -> a -> b
$ KafkaError -> Maybe KafkaError
forall a. a -> Maybe a
Just (RdKafkaRespErrT -> KafkaError
KafkaResponseError RdKafkaRespErrT
e)
{-# INLINE handleProduceErrT #-}

handleProduceErr' :: Int -> IO (Either KafkaError ())
handleProduceErr' :: Int -> IO (Either KafkaError ())
handleProduceErr' (- 1) = KafkaError -> Either KafkaError ()
forall a b. a -> Either a b
Left (KafkaError -> Either KafkaError ())
-> (Errno -> KafkaError) -> Errno -> Either KafkaError ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Errno -> KafkaError
kafkaRespErr (Errno -> Either KafkaError ())
-> IO Errno -> IO (Either KafkaError ())
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> IO Errno
getErrno
handleProduceErr' 0 = Either KafkaError () -> IO (Either KafkaError ())
forall (m :: * -> *) a. Monad m => a -> m a
return (() -> Either KafkaError ()
forall a b. b -> Either a b
Right ())
handleProduceErr' _ = Either KafkaError () -> IO (Either KafkaError ())
forall (m :: * -> *) a. Monad m => a -> m a
return (Either KafkaError () -> IO (Either KafkaError ()))
-> Either KafkaError () -> IO (Either KafkaError ())
forall a b. (a -> b) -> a -> b
$ KafkaError -> Either KafkaError ()
forall a b. a -> Either a b
Left KafkaError
KafkaInvalidReturnValue
{-# INLINE handleProduceErr' #-}