core/internal/watermill/watermillmsg/marshaler_json.go

38 lines
724 B
Go

package watermillmsg
import (
"context"
"encoding/json"
"github.com/ThreeDotsLabs/watermill"
"github.com/ThreeDotsLabs/watermill/message"
)
type JSONMarshaler struct {
NewUUID func() string
}
func (m JSONMarshaler) Marshal(ctx context.Context, v any) (*message.Message, error) {
b, err := json.Marshal(v)
if err != nil {
return nil, err
}
msg := message.NewMessage(m.newUUID(), b)
msg.SetContext(ctx)
msg.Metadata.Set("Content-Type", "application/json")
return msg, nil
}
func (m JSONMarshaler) newUUID() string {
if m.NewUUID != nil {
return m.NewUUID()
}
return watermill.NewUUID()
}
func (m JSONMarshaler) Unmarshal(msg *message.Message, v any) error {
return json.Unmarshal(msg.Payload, v)
}