Packages
ferricstore
0.11.10
0.11.14
0.11.12
0.11.11
0.11.10
0.11.9
0.11.8
0.11.7
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.0
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.2.0
0.1.0
FerricFlow durable workflows and queues with native-protocol storage, Raft durability, and Bitcask persistence.
Current section
Files
Jump to
Current section
Files
lib/ferricstore/term_codec.ex
defmodule Ferricstore.TermCodec do
@moduledoc false
@type decode_error :: {:error, :invalid_external_term}
@spec encode(term()) :: binary()
def encode(term), do: :erlang.term_to_binary(term, [:deterministic])
@spec decode(term()) :: {:ok, term()} | decode_error()
def decode(<<131, 80, _compressed::binary>>), do: {:error, :invalid_external_term}
def decode(binary) when is_binary(binary) do
case :erlang.binary_to_term(binary, [:safe, :used]) do
{term, used} when used == byte_size(binary) -> {:ok, term}
_invalid -> {:error, :invalid_external_term}
end
rescue
ArgumentError -> {:error, :invalid_external_term}
end
def decode(_binary), do: {:error, :invalid_external_term}
end