{-# language BangPatterns #-}
{-# language NamedFieldPuns #-}
{-# language DataKinds #-}
{-# language DeriveFunctor #-}
{-# language DuplicateRecordFields #-}
{-# language FlexibleContexts #-}
{-# language GeneralizedNewtypeDeriving #-}
{-# language MultiParamTypeClasses #-}
{-# language OverloadedRecordDot #-}
{-# language OverloadedStrings #-}
{-# language PolyKinds #-}
{-# language RankNTypes #-}
{-# language TypeFamilies #-}
{-# language UnboxedTuples #-}
{-# language UndecidableInstances #-}
module Kafka.JoinGroup.Request.V9
( Request(..)
, Protocol(..)
, toChunks
) where
import Prelude hiding (id)
import Data.Int (Int16,Int32)
import Data.Bytes (Bytes)
import Data.Text (Text)
import Data.Bytes.Builder (Builder)
import Data.Bytes.Chunks (Chunks)
import Data.WideWord (Word128)
import Data.Primitive (SmallArray)
import qualified Kafka.Builder as Builder
data Request = Request
{ Request -> Text
groupId :: !Text
, Request -> Int32
sessionTimeoutMilliseconds :: !Int32
, Request -> Int32
rebalanceTimeoutMilliseconds :: !Int32
, Request -> Text
memberId :: !Text
, Request -> Maybe Text
groupInstanceId :: !(Maybe Text)
, Request -> Text
protocolType :: !Text
, Request -> SmallArray Protocol
protocols :: !(SmallArray Protocol)
, Request -> Text
reason :: !Text
}
data Protocol = Protocol
{ Protocol -> Text
name :: {-# UNPACK #-} !Text
, Protocol -> Bytes
metadata :: {-# UNPACK #-} !Bytes
}
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
r =
Text -> Builder
Builder.compactString Request
r.groupId
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Int32 -> Builder
Builder.int32 Request
r.sessionTimeoutMilliseconds
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Int32 -> Builder
Builder.int32 Request
r.rebalanceTimeoutMilliseconds
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Text -> Builder
Builder.compactString Request
r.memberId
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Maybe Text -> Builder
Builder.compactNullableString Request
r.groupInstanceId
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Text -> Builder
Builder.compactString Request
r.protocolType
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> (Protocol -> Builder) -> SmallArray Protocol -> Builder
forall a. (a -> Builder) -> SmallArray a -> Builder
Builder.compactArray Protocol -> Builder
encodeProtocol Request
r.protocols
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Text -> Builder
Builder.compactString Request
r.reason
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word8 -> Builder
Builder.word8 Word8
0
encodeProtocol :: Protocol -> Builder
encodeProtocol :: Protocol -> Builder
encodeProtocol Protocol{Text
$sel:name:Protocol :: Protocol -> Text
name :: Text
name,Bytes
$sel:metadata:Protocol :: Protocol -> Bytes
metadata :: Bytes
metadata} =
Text -> Builder
Builder.compactString Text
name
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Bytes -> Builder
Builder.compactBytes Bytes
metadata
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<> Word8 -> Builder
Builder.word8 Word8
0