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

t()

All the types that implement this protocol.

Functions

Given the initial message, and the decoded Protobuf struct, returns the decoded term.

Returns the module name of the Protobuf struct.

Given a struct, returns a Protobuf struct.

Types

t()

@type t() :: term()

All the types that implement this protocol.

Functions

from_proto_message(message, term)

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.

proto_module(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.

to_proto_message(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.