{-# 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.ApiVersions.Request.V3
  ( Request(..)
  , toChunks
  , apiVersion
  ) where

import Data.Int (Int16)
import Data.Text (Text)
import Data.Bytes.Chunks (Chunks)

import qualified Kafka.Builder as Builder

apiVersion :: Int16
apiVersion :: Int16
apiVersion = Int16
3

-- | Kafka API Versions request V3.
data Request = Request
  { Request -> Text
clientSoftwareName :: !Text
  , Request -> Text
clientSoftwareVersion :: !Text
  }

toChunks :: Request -> Chunks
toChunks :: Request -> Chunks
toChunks Request{Text
$sel:clientSoftwareName:Request :: Request -> Text
clientSoftwareName :: Text
clientSoftwareName,Text
$sel:clientSoftwareVersion:Request :: Request -> Text
clientSoftwareVersion :: Text
clientSoftwareVersion} =
  Int -> Builder -> Chunks
Builder.run Int
128 (Builder -> Chunks) -> Builder -> Chunks
forall a b. (a -> b) -> a -> b
$
    Text -> Builder
Builder.compactString Text
clientSoftwareName
    Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>
    Text -> Builder
Builder.compactString Text
clientSoftwareVersion
    Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>
    Word8 -> Builder
Builder.word8 Word8
0 -- tag buffer with zero entries