Proposal for Custom Beholder Messages
The default custom message utility uses a BaseMessage proto with the message data expected to be a string and labels added to the proto message.
Instead, a proto message itself can be sent where the message and schema details are packaged together by an interface. This promotes the design that any particular entity can be emitted given that it satisfies the interface.
As a temporary measure, the Emit interface accepts an any type to allow for existing string types or the ProtoMessage interface. This could be reworked using generics on the Labeler.
One more upcoming feature of beholder is the ability to have delivery guarantees as an option. This will require mechanisms for retry, possibly with persistence. The Labeler entity could be expanded for this use case.