{-# language DataKinds #-}
{-# language NamedFieldPuns #-}
{-# language TypeApplications #-}

module Kafka.Builder.Bounded
  ( int16
  , int32
  , int64
  , word16
  , word32
  , varIntNative
  , apiKey
    -- * Re-exports
  , Builder
  , append
  , word8
  , run
  ) where

import Data.Int (Int8,Int16,Int32,Int64)
import Data.Word (Word16,Word32)
import Data.Bytes.Builder.Bounded (Builder,append,word8,run)
import Data.Word.Zigzag (toZigzagNative)
import Kafka.ApiKey (ApiKey(ApiKey))
import qualified Data.Bytes.Builder.Bounded as Bounded

int64 :: Int64 -> Builder 8
int64 :: Int64 -> Builder 8
int64 = Int64 -> Builder 8
Bounded.int64BE

int32 :: Int32 -> Builder 4
int32 :: Int32 -> Builder 4
int32 = Int32 -> Builder 4
Bounded.int32BE

word32 :: Word32 -> Builder 4
word32 :: Word32 -> Builder 4
word32 = Word32 -> Builder 4
Bounded.word32BE

int16 :: Int16 -> Builder 2
int16 :: Int16 -> Builder 2
int16 = Int16 -> Builder 2
Bounded.int16BE

apiKey :: ApiKey -> Builder 2
apiKey :: ApiKey -> Builder 2
apiKey (ApiKey Int16
k) = Int16 -> Builder 2
Bounded.int16BE Int16
k

word16 :: Word16 -> Builder 2
word16 :: Word16 -> Builder 2
word16 = Word16 -> Builder 2
Bounded.word16BE

varIntNative :: Int -> Builder 10
{-# inline varIntNative #-}
varIntNative :: Int -> Builder 10
varIntNative = Word -> Builder 10
Bounded.wordLEB128 (Word -> Builder 10) -> (Int -> Word) -> Int -> Builder 10
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Word
toZigzagNative