lib/message_store/json_serializer.ex

if Code.ensure_loaded?(Jason) do
  defmodule MessageStore.JsonSerializer do
    @moduledoc """
    A serializer that uses the JSON format.
    """

    @behaviour EventStore.Serializer

    @doc """
    Serialize given term to JSON binary data.
    """
    def serialize(term) do
      Jason.encode!(term)
    end

    @doc """
    Deserialize given JSON binary data to the expected type.
    """
    def deserialize(binary, _config) do
      keys_setting = get_keys_setting()

      Jason.decode!(binary, keys: keys_setting)
    end

    defp get_keys_setting() do
      :message_store
      |> Application.get_env(__MODULE__, [])
      |> Keyword.get(:keys, :atoms!)
    end
  end
end