{-# language BangPatterns #-}
{-# language NamedFieldPuns #-}
{-# language DataKinds #-}
{-# language DeriveFunctor #-}
{-# language DuplicateRecordFields #-}
{-# language FlexibleContexts #-}
{-# language GeneralizedNewtypeDeriving #-}
{-# language MultiParamTypeClasses #-}
{-# language OverloadedStrings #-}
{-# language PolyKinds #-}
{-# language RankNTypes #-}
{-# language TypeFamilies #-}
{-# language UnboxedTuples #-}
{-# language UndecidableInstances #-}

module Kafka.FindCoordinator.Request.V4
  ( Request(..)
  , toChunks
  ) where

import Prelude hiding (id)

import Data.Primitive (SmallArray)
import Data.Int (Int8)
import Data.Text (Text)
import Data.Bytes.Builder (Builder)
import Data.Bytes.Chunks (Chunks)

import qualified Kafka.Builder as Builder

-- | Kafka API Versions request V3.
data Request = Request
  { Request -> Int8
keyType :: !Int8
  , Request -> SmallArray Text
coordinatorKeys :: !(SmallArray Text)
  }

toChunks :: Request -> Chunks
toChunks :: Request -> Chunks
toChunks = Int -> Builder -> Chunks
Builder.run Int
128 (Builder -> Chunks) -> (Request -> Builder) -> Request -> Chunks
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Request -> Builder
encode

encode :: Request -> Builder
encode :: Request -> Builder
encode Request{Int8
$sel:keyType:Request :: Request -> Int8
keyType :: Int8
keyType,SmallArray Text
$sel:coordinatorKeys:Request :: Request -> SmallArray Text
coordinatorKeys :: SmallArray Text
coordinatorKeys} =
  Int8 -> Builder
Builder.int8 Int8
keyType
  Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>
  (Text -> Builder) -> SmallArray Text -> Builder
forall a. (a -> Builder) -> SmallArray a -> Builder
Builder.compactArray Text -> Builder
Builder.compactString SmallArray Text
coordinatorKeys
  Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>
  Word8 -> Builder
Builder.word8 Word8
0 -- zero tagged fields