1- module Kafka.Admin (
1+ module Kafka.Topic (
22module X
3- , newKAdmin
43, createTopic
54, deleteTopic
6- , closeKAdmin
75) where
86
9- import Control.Monad
10- import Control.Monad.IO.Class
11- import Data.Text
12- import Data.List.NonEmpty
13- import qualified Data.List.NonEmpty as NEL
14- import qualified Data.Text as T
7+ import Control.Monad.IO.Class
8+ import Data.List.NonEmpty
9+ import qualified Data.List.NonEmpty as NEL
10+ import Data.Text
11+ import qualified Data.Text as T
1512
1613import Kafka.Internal.RdKafka
1714import Kafka.Internal.Setup
1815
19- import Kafka.Types as X
20- import Kafka.Admin.AdminProperties as X
21- import Kafka.Admin.Types as X
16+ import Kafka.Topic.Types as X
17+ import Kafka.Types as X
2218
23- newKAdmin :: ( MonadIO m )
24- => AdminProperties
25- -> m (Either KafkaError KAdmin )
26- newKAdmin properties = liftIO $ do
27- kafkaConfig@ (KafkaConf kafkaConf' _ _) <- kafkaConf ( KafkaProps $ adminProps properties)
28- maybeKafka <- newRdKafkaT RdKafkaConsumer kafkaConf'
29- case maybeKafka of
30- Left err -> pure $ Left $ KafkaError err
31- Right kafka -> pure $ Right $ KAdmin (Kafka kafka) kafkaConfig
32-
33- closeKAdmin :: KAdmin
34- -> IO ()
35- closeKAdmin ka = void $ rdKafkaConsumerClose (getRdKafka ka)
3619--- CREATE TOPIC ---
37- createTopic :: KAdmin
38- -> NewTopic
39- -> IO (Either KafkaError TopicName )
40- createTopic kAdmin topic = liftIO $ do
41- let kafkaPtr = getRdKafka kAdmin
20+ createTopic :: HasKafka k => k -> NewTopic -> IO (Either KafkaError TopicName )
21+ createTopic k topic = do
22+ let kafkaPtr = getRdKafka k
4223 queue <- newRdKafkaQueue kafkaPtr
43- opts <- newRdKAdminOptions kafkaPtr RdKafkaAdminOpAny
24+ opts <- newRdKAdminOptions kafkaPtr RdKafkaAdminOpAny
4425
4526 topicRes <- withNewTopic topic $ \ topic' -> rdKafkaCreateTopic kafkaPtr topic' opts queue
4627 case topicRes of
47- Left err -> do
28+ Left err -> do
4829 pure $ Left (NEL. head err)
4930 Right _ -> do
5031 pure $ Right $ topicName topic
5132
5233--- DELETE TOPIC ---
53- deleteTopic :: KAdmin
34+ deleteTopic :: HasKafka k
35+ => k
5436 -> TopicName
5537 -> IO (Either KafkaError TopicName )
56- deleteTopic kAdmin topic = liftIO $ do
57- let kafkaPtr = getRdKafka kAdmin
38+ deleteTopic k topic = liftIO $ do
39+ let kafkaPtr = getRdKafka k
5840 queue <- newRdKafkaQueue kafkaPtr
5941 opts <- newRdKAdminOptions kafkaPtr RdKafkaAdminOpAny
6042
@@ -65,15 +47,15 @@ deleteTopic kAdmin topic = liftIO $ do
6547 Right _ -> do
6648 pure $ Right topic
6749
68- withNewTopic :: NewTopic
50+ withNewTopic :: NewTopic
6951 -> (RdKafkaNewTopicTPtr -> IO a )
7052 -> IO (Either (NonEmpty KafkaError ) a )
7153withNewTopic t transform = do
7254 mkNewTopicRes <- mkNewTopic t newTopicPtr
7355 case mkNewTopicRes of
7456 Left err -> do
7557 return $ Left err
76- Right topic -> do
58+ Right topic -> do
7759 res <- transform topic
7860 return $ Right res
7961
@@ -93,23 +75,23 @@ newTopicPtr :: NewTopic -> IO (Either KafkaError RdKafkaNewTopicTPtr)
9375newTopicPtr topic = do
9476 ptrRes <- newRdKafkaNewTopic (unpack $ unTopicName $ topicName topic) (unPartitionCount $ topicPartitionCount topic) (unReplicationFactor $ topicReplicationFactor topic)
9577 case ptrRes of
96- Left str -> pure $ Left (KafkaError $ T. pack str)
78+ Left str -> pure $ Left (KafkaError $ T. pack str)
9779 Right ptr -> pure $ Right ptr
9880
9981oldTopicPtr :: TopicName -> IO (Either KafkaError RdKafkaDeleteTopicTPtr )
10082oldTopicPtr tName = do
10183 res <- newRdKafkaDeleteTopic $ unpack . unTopicName $ tName
10284 case res of
103- Left str -> pure $ Left (KafkaError $ T. pack str)
85+ Left str -> pure $ Left (KafkaError $ T. pack str)
10486 Right ptr -> pure $ Right ptr
10587
106- mkNewTopic :: NewTopic
88+ mkNewTopic :: NewTopic
10789 -> (NewTopic -> IO (Either KafkaError a ))
10890 -> IO (Either (NonEmpty KafkaError ) a )
10991mkNewTopic topic create = do
11092 res <- create topic
11193 case res of
112- Left err -> pure $ Left (NEL. singleton err)
94+ Left err -> pure $ Left (singletonList err)
11395 Right resource -> pure $ Right resource
11496
11597rmOldTopic :: TopicName
@@ -118,5 +100,8 @@ rmOldTopic :: TopicName
118100rmOldTopic tName remove = do
119101 res <- remove tName
120102 case res of
121- Left err -> pure $ Left (NEL. singleton err)
103+ Left err -> pure $ Left (singletonList err)
122104 Right resource -> pure $ Right resource
105+
106+ singletonList :: a -> NonEmpty a
107+ singletonList x = x :| []
0 commit comments