lib/riverside/codec/message_pack.ex

defmodule Riverside.Codec.MessagePack do
  @behaviour Riverside.Codec

  @impl Riverside.Codec
  def frame_type do
    :binary
  end

  @impl Riverside.Codec
  def encode(msg) do
    case Msgpax.pack(msg) do
      {:ok, value} ->
        {:ok, value}

      {:error, _exception} ->
        {:error, :invalid_message}
    end
  end

  @impl Riverside.Codec
  def decode(data) do
    case Msgpax.unpack(data) do
      {:ok, value} ->
        {:ok, value}

      {:error, _exception} ->
        {:error, :invalid_message}
    end
  end
end