Packages

ExMsgpax is a library for packing and unpacking Elixir data structures using MessagePack format. It provides support for various Elixir types, including tuples, structs, and exceptions, by utilizing MessagePack's extension types.

Current section

Files

Jump to
ex_msgpax lib ex_msgpax data.ex
Raw

lib/ex_msgpax/data.ex

defmodule ExMsgpax.Data do
@moduledoc ~S"""
Defines a message packed data.
## Examples
iex> new(nil)
#ExMsgpax.Data<size:1>
iex> new(1) |> size()
1
iex> new(999) |> extract()
999
"""
defstruct content: ""
alias ExMsgpax.Data
@type t :: %__MODULE__{content: binary}
@spec new(term) :: t
def new(data) do
%Data{content: ExMsgpax.pack!(data)}
end
@spec extract(t) :: term
def extract(%Data{} = data) do
ExMsgpax.unpack!(data.content)
end
@spec size(t) :: integer
def size(%Data{content: content}), do: byte_size(content)
defimpl Msgpax.Packer do
def pack(%ExMsgpax.Data{content: content}), do: content
end
defimpl Inspect do
import Inspect.Algebra
def inspect(%{content: content}, opts) do
size = byte_size(content)
concat(["#ExMsgpax.Data<size:", to_doc(size, opts), ">"])
end
end
end