View Source OnePiece.Commanded.ProtobufMapper protocol (OnePiece.Commanded v0.25.1)
Protocol for encoding and decoding Protobuf
structs.
The protocol is required when using the OnePiece.Commanded.EventStore.ProtobufJsonbSerializer
serializer and
working with Aggregate snapshotting. Since the Aggregates are not Protobuf
structs, the serializer needs to
encode and decode them to a Protobuf
struct.
Example
defmodule MyApp.MyAggregate do
alias MyApp.Proto.MyAggregateProto
use OnePiece.Commanded.Aggregate, identifier: :id
embedded_schema do
field(:initiated?, :boolean, default: false)
end
end
defimpl OnePiece.Commanded.ProtobufMapper, for: MyApp.MyAggregate do
alias MyApp.MyAggregate
alias MyApp.Proto.MyAggregateProto
def message_module(%MyAggregate{} = _aggregate), do: MyAggregateProto
def to_proto_message(%MyAggregate{} = aggregate) do
%MyAggregateProto{
id: aggregate.id,
initiated: aggregate.initiated?
}
end
def from_proto_message(%MyAggregate{} = aggregate, %MyAggregateProto{} = proto_message) do
aggregate
|> Map.put(:id, proto_message.id)
|> Map.put(:initiated?, proto_message.initiated)
end
end
Summary
Types
@type t() :: term()
All the types that implement this protocol.
Functions
Given the initial message, and the decoded Protobuf
struct, returns the decoded term.
The default implementation returns the decoded term itself because implicitly expects the initial message to be a
Protobuf
struct. No need to map the decoded term to the initial message.
Returns the module name of the Protobuf
struct.
The default implementation returns the struct name of the message because implicitly expects the struct to be a
Protobuf
struct. No need to map the struct to the message.
Given a struct, returns a Protobuf
struct.
The default implementation returns the message itself because implicitly expects the struct to be a
Protobuf
struct. No need to map the struct to the message.