Packages

Neo4j driver for Elixir, using the fast Bolt protocol

Current section

Files

Jump to
boltx lib bolt_sips internals pack_stream.ex
Raw

lib/bolt_sips/internals/pack_stream.ex

defmodule Bolt.Sips.Internals.PackStream do
@moduledoc false
# The PackStream implementation for Bolt.
#
# This module defines a decode function, that will take a binary stream of data
# and recursively turn it into a list of Elixir data types.
#
# It further defines a function for encoding Elixir data types into a binary
# stream, using the Bolt.Sips.Internals.PackStream.Encoder protocol.
@type value :: <<_::8, _::_*8>>
@doc """
Encodes a list of items into their binary representation.
As developers tend to be lazy, single objects may be passed.
## Examples
iex> Bolt.Sips.Internals.PackStream.encode "hello world"
<<0x8B, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, 0x6F, 0x72, 0x6C, 0x64>>
"""
@spec encode(any(), integer()) :: Bolt.Sips.Internals.PackStream.value() | <<_::16, _::_*8>>
def encode(item, bolt_version) do
Bolt.Sips.Internals.PackStream.Encoder.encode(item, bolt_version)
end
@doc """
Decode data from Bolt binary format to Elixir type
## Example
iex> Bolt.Sips.Internals.PackStream.decode(<<0xC3>>)
[true]
"""
@spec decode(binary(), integer()) :: list()
def decode(data, bolt_version) do
Bolt.Sips.Internals.PackStream.Decoder.decode(data, bolt_version)
end
end