{-# 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.OffsetFetch.Request.V8
( Request(..)
, Group(..)
, Topic(..)
, toChunks
) where
import Prelude hiding (id)
import Data.Int (Int32)
import Data.Text (Text)
import Data.Bytes.Builder (Builder)
import Data.Bytes.Chunks (Chunks)
import Data.Primitive (SmallArray,PrimArray)
import qualified Kafka.Builder as Builder
data Request = Request
{ Request -> SmallArray Group
groups :: !(SmallArray Group)
, Request -> Bool
requireStable :: !Bool
}
data Group = Group
{ Group -> Text
id :: !Text
, Group -> SmallArray Topic
topics :: !(SmallArray Topic)
}
data Topic = Topic
{ Topic -> Text
name :: !Text
, Topic -> PrimArray Int32
partitions :: !(PrimArray Int32)
}
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{SmallArray Group
$sel:groups:Request :: Request -> SmallArray Group
groups :: SmallArray Group
groups,Bool
$sel:requireStable:Request :: Request -> Bool
requireStable :: Bool
requireStable} =
(Group -> Builder) -> SmallArray Group -> Builder
forall a. (a -> Builder) -> SmallArray a -> Builder
Builder.compactArray Group -> Builder
encodeGroup SmallArray Group
groups
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>
Bool -> Builder
Builder.boolean Bool
requireStable
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>
Word8 -> Builder
Builder.word8 Word8
0
encodeGroup :: Group -> Builder
encodeGroup :: Group -> Builder
encodeGroup Group{Text
$sel:id:Group :: Group -> Text
id :: Text
id,SmallArray Topic
$sel:topics:Group :: Group -> SmallArray Topic
topics :: SmallArray Topic
topics} =
Text -> Builder
Builder.compactString Text
id
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>
(Topic -> Builder) -> SmallArray Topic -> Builder
forall a. (a -> Builder) -> SmallArray a -> Builder
Builder.compactArray Topic -> Builder
encodeTopic SmallArray Topic
topics
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>
Word8 -> Builder
Builder.word8 Word8
0
encodeTopic :: Topic -> Builder
encodeTopic :: Topic -> Builder
encodeTopic Topic{Text
$sel:name:Topic :: Topic -> Text
name :: Text
name,PrimArray Int32
$sel:partitions:Topic :: Topic -> PrimArray Int32
partitions :: PrimArray Int32
partitions} =
Text -> Builder
Builder.compactString Text
name
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>
PrimArray Int32 -> Builder
Builder.compactInt32Array PrimArray Int32
partitions
Builder -> Builder -> Builder
forall a. Semigroup a => a -> a -> a
<>
Word8 -> Builder
Builder.word8 Word8
0