{-# LANGUAGE GADTs #-}

-- The Kafka worker has the following concurrent workflows:
-- 1. The main thread which handles
--   - gracefully quitting
--   - a single-thread `pollingLoop` that reads new messages from kafka
-- 2. The Kafka `rebalanceCallback` which handles rebalancing partitions, in turn
--    turning on and off worker threads.
-- 3. A single-thread `pauseAndAnalyticsLoop` that tells the kafka library to pause & resume
--    sending us messages from specific partitions (based on a number of factors)
-- 4. Multiple worker-threads (`Partition.processMsgLoop`), one per
--    (topic,partition)

-- | Kafka.Worker is a module for processing a Kafka log.
-- It can be used to build a CLI that will consume and process a user-defined message type
module Kafka.Worker
  ( Internal.process,

    -- * Settings
    Settings.Settings,
    Settings.decoder,

    -- * Subscriptions
    Internal.TopicSubscription,
    Internal.subscription,
    Internal.subscriptionManageOwnOffsets,
    Internal.PartitionOffset (..),
    Partition.SeekCmd (..),
    Internal.CommitToKafkaAsWell (..),
  )
where

import qualified Kafka.Worker.Internal as Internal
import qualified Kafka.Worker.Partition as Partition
import qualified Kafka.Worker.Settings as Settings