packages feed

hs-multiaddr-0.1.0.0: src/Data/Multiaddr/VarInt.hs

module Data.Multiaddr.VarInt
  (
    VarInt (..),
    encode,
    encodeWith,
    decode,
    decodeSize,
    decodeSizeVar
  ) where

import qualified Data.ByteString as BSStrict

import Data.Bytes.VarInt (VarInt (..))
import Data.Bytes.Get (getByteString)
import Data.Bytes.Put (runPutS)
import Data.Bytes.Serial (serialize, deserialize)
import Data.Serialize.Get (Get)

encode :: VarInt Int -> BSStrict.ByteString
encode = runPutS . serialize

encodeWith :: BSStrict.ByteString -> BSStrict.ByteString
encodeWith b =
  BSStrict.append ((encode . fromIntegral . BSStrict.length) b) b

decode :: Get (VarInt Int)
decode = deserialize

decodeSize :: Integral n => n -> Get BSStrict.ByteString
decodeSize n = getByteString $ fromIntegral $ div n 8

decodeSizeVar :: Get BSStrict.ByteString
decodeSizeVar = getByteString . fromIntegral =<< decode