lib/event_store/json_serializer.ex
if Code.ensure_loaded?(Jason) do
defmodule EventStore.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
case Keyword.get(config, :type, nil) do
nil ->
Jason.decode!(binary)
type ->
type
|> String.to_existing_atom()
|> struct(Jason.decode!(binary, keys: :atoms!))
end
end
end
end