bytes-0.11.2: Sharing code for serialization between binary and cereal

Portabilitytype-families, generalized newtype deriving
Stabilityexperimental
Safe HaskellNone

Data.Bytes.VarInt

Description

This module provides a VarInt wrapper with a Serial instance that generates base-128 variable-width ints. Values are encoded 7 bits at a time, with the most significant being a continuation bit. Thus, the numbers from 0 to 127 require only a single byte to encode, those from 128 to 16383 require two bytes, etc.

This format is taken from Google's Protocol Buffers, which provides a bit more verbiage on the encoding: https://developers.google.com/protocol-buffers/docs/encoding#varints.

Synopsis

Documentation

newtype VarInt n Source

Integer/Word types serialized to base-128 variable-width ints.

>>> runPutL $ serialize (97 :: Word64)
"a\NUL\NUL\NUL\NUL\NUL\NUL\NUL"
>>> runPutL $ serialize (97 :: VarInt Word64)
"a"

Constructors

VarInt 

Fields

unVarInt :: n
 

Instances

Bounded n => Bounded (VarInt n) 
Enum n => Enum (VarInt n) 
Eq n => Eq (VarInt n) 
Integral n => Integral (VarInt n) 
Num n => Num (VarInt n) 
Ord n => Ord (VarInt n) 
Real n => Real (VarInt n) 
Show n => Show (VarInt n) 
Bits n => Bits (VarInt n) 
(Bits n, Integral n, Bits (Unsigned n), Integral (Unsigned n)) => Serial (VarInt n)