View Source OnePiece.Commanded.ProtobufMapper protocol (OnePiece.Commanded v0.24.0)
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.