edge/pkg/bus/message.go
William Petit 17e2418af6
Some checks failed
arcad/edge/pipeline/head There was a failure building this commit
feat: rewrite bus to prevent deadlocks
2023-11-28 16:35:49 +01:00

53 lines
924 B
Go

package bus
import (
"context"
"strings"
"github.com/pkg/errors"
)
type (
MessageNamespace string
Address string
Message any
)
type Envelope interface {
Message() any
Context() context.Context
Address() Address
}
type BaseEnvelope struct {
msg Message
ctx context.Context
addr Address
}
func NewEnvelope(ctx context.Context, addr Address, msg Message) *BaseEnvelope {
return &BaseEnvelope{
ctx: ctx,
addr: addr,
msg: msg,
}
}
func NewMessageNamespace(namespaces ...MessageNamespace) MessageNamespace {
var sb strings.Builder
for i, ns := range namespaces {
if i != 0 {
if _, err := sb.WriteString(":"); err != nil {
panic(errors.Wrap(err, "could not build new message namespace"))
}
}
if _, err := sb.WriteString(string(ns)); err != nil {
panic(errors.Wrap(err, "could not build new message namespace"))
}
}
return MessageNamespace(sb.String())
}