{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} module Kafka.Types where import Control.Exception import Data.Int import Data.Typeable import Kafka.Internal.RdKafka newtype BrokerId = BrokerId Int deriving (Show, Eq, Ord, Read) newtype PartitionId = PartitionId Int deriving (Show, Eq, Read, Ord, Enum) newtype Millis = Millis Int64 deriving (Show, Read, Eq, Ord, Num) newtype ClientId = ClientId String deriving (Show, Eq, Ord) -- | Topic name to be consumed -- -- Wildcard (regex) topics are supported by the /librdkafka/ assignor: -- any topic name in the topics list that is prefixed with @^@ will -- be regex-matched to the full list of topics in the cluster and matching -- topics will be added to the subscription list. newtype TopicName = TopicName String -- ^ a simple topic name or a regex if started with @^@ deriving (Show, Eq, Ord, Read) -- | Kafka broker address string (e.g. @broker1:9092@) newtype BrokerAddress = BrokerAddress String deriving (Show, Eq) -- | Timeout in milliseconds newtype Timeout = Timeout Int deriving (Show, Eq, Read) -- | Log levels for /librdkafka/. data KafkaLogLevel = KafkaLogEmerg | KafkaLogAlert | KafkaLogCrit | KafkaLogErr | KafkaLogWarning | KafkaLogNotice | KafkaLogInfo | KafkaLogDebug deriving (Show, Eq) instance Enum KafkaLogLevel where toEnum 0 = KafkaLogEmerg toEnum 1 = KafkaLogAlert toEnum 2 = KafkaLogCrit toEnum 3 = KafkaLogErr toEnum 4 = KafkaLogWarning toEnum 5 = KafkaLogNotice toEnum 6 = KafkaLogInfo toEnum 7 = KafkaLogDebug toEnum _ = undefined fromEnum KafkaLogEmerg = 0 fromEnum KafkaLogAlert = 1 fromEnum KafkaLogCrit = 2 fromEnum KafkaLogErr = 3 fromEnum KafkaLogWarning = 4 fromEnum KafkaLogNotice = 5 fromEnum KafkaLogInfo = 6 fromEnum KafkaLogDebug = 7 -- -- | Any Kafka errors data KafkaError = KafkaError String | KafkaInvalidReturnValue | KafkaBadSpecification String | KafkaResponseError RdKafkaRespErrT | KafkaInvalidConfigurationValue String | KafkaUnknownConfigurationKey String | KakfaBadConfiguration deriving (Eq, Show, Typeable) instance Exception KafkaError data KafkaDebug = DebugGeneric | DebugBroker | DebugTopic | DebugMetadata | DebugQueue | DebugMsg | DebugProtocol | DebugCgrp | DebugSecurity | DebugFetch | DebugFeature | DebugAll deriving (Eq, Show, Typeable) kafkaDebugToString :: KafkaDebug -> String kafkaDebugToString d =case d of DebugGeneric -> "generic" DebugBroker -> "broker" DebugTopic -> "topic" DebugMetadata -> "metadata" DebugQueue -> "queue" DebugMsg -> "msg" DebugProtocol -> "protocol" DebugCgrp -> "cgrp" DebugSecurity -> "security" DebugFetch -> "fetch" DebugFeature -> "feature" DebugAll -> "all" data KafkaCompressionCodec = NoCompression | Gzip | Snappy | Lz4 deriving (Eq, Show, Typeable) kafkaCompressionCodecToString :: KafkaCompressionCodec -> String kafkaCompressionCodecToString c = case c of NoCompression -> "none" Gzip -> "gzip" Snappy -> "snappy" Lz4 -> "lz4"