Serialization
JSON serialization is used by default for event and snapshot data.
The included Commanded.Serialization.JsonSerializer
module provides an extension point to allow additional decoding of the deserialized value. This can be used for parsing data into valid structures, such as date/time parsing from a string.
The example event below has an implementation of the Commanded.Serialization.JsonDecoder
protocol to parse the date into a NaiveDateTime
struct.
defmodule ExampleEvent do
defstruct [:name, :date]
end
defimpl Commanded.Serialization.JsonDecoder, for: ExampleEvent do
@doc """
Parse the date included in the event
"""
def decode(%ExampleEvent{date: date} = event) do
%ExampleEvent{event |
date: NaiveDateTime.from_iso8601!(date)
}
end
end
You can implement the EventStore.Serializer
behaviour to use an alternative serialization format if preferred.