package bus type Address string type Envelope interface { Message() any Address() Address } type BaseEnvelope struct { msg any addr Address } // Address implements Envelope. func (e *BaseEnvelope) Address() Address { return e.addr } // Message implements Envelope. func (e *BaseEnvelope) Message() any { return e.msg } func NewEnvelope(addr Address, msg any) *BaseEnvelope { return &BaseEnvelope{ addr: addr, msg: msg, } } var _ Envelope = &BaseEnvelope{}