module Kafka.Producer.Convert ( copyMsgFlags , producePartitionInt , producePartitionCInt , handleProduceErr ) where import Foreign.C.Error (getErrno) import Foreign.C.Types (CInt) import Kafka.Internal.RdKafka (rdKafkaMsgFlagCopy) import Kafka.Internal.Shared (kafkaRespErr) import Kafka.Types (KafkaError(..)) import Kafka.Producer.Types (ProducePartition(..)) copyMsgFlags :: Int copyMsgFlags = rdKafkaMsgFlagCopy {-# INLINE copyMsgFlags #-} producePartitionInt :: ProducePartition -> Int producePartitionInt UnassignedPartition = -1 producePartitionInt (SpecifiedPartition n) = n {-# INLINE producePartitionInt #-} producePartitionCInt :: ProducePartition -> CInt producePartitionCInt = fromIntegral . producePartitionInt {-# INLINE producePartitionCInt #-} handleProduceErr :: Int -> IO (Maybe KafkaError) handleProduceErr (- 1) = (Just . kafkaRespErr) <$> getErrno handleProduceErr 0 = return Nothing handleProduceErr _ = return $ Just KafkaInvalidReturnValue {-# INLINE handleProduceErr #-}