payload improvements: methods, conversions

This commit is contained in:
Helmut Merz 2023-07-05 15:10:52 +02:00
parent 31bdedc031
commit 4ad87d635c
3 changed files with 17 additions and 8 deletions

View file

@ -82,7 +82,8 @@ type Address interface {
type Payload interface {
fmt.Stringer
//Data() interface{}
Data() interface{}
FromJson(string) Payload
}
// action

View file

@ -100,15 +100,23 @@ func (pl *payload) String() string {
return string(b)
}
func (pl *payload) Data() interface{} {
return pl.data
}
func (pl *payload) FromJson(s string) lib.Payload {
err := json.Unmarshal([]byte(s), &pl.data)
if err != nil {
log.Error().Err(err).Msg("payload.FromJson()")
}
return pl
}
func Payload(d interface{}) lib.Payload {
return &payload{d}
}
func FromJson[T any](s string) lib.Payload {
func PayloadFromJson[T any](s string) lib.Payload {
pl := &payload{new(T)}
err := json.Unmarshal([]byte(s), &pl.data)
if err != nil {
log.Error().Err(err).Msg("payload: FromJson()")
}
return pl
return pl.FromJson(s)
}

View file

@ -54,6 +54,6 @@ func PayloadTest(t *testing.T) {
pl2 := message.Payload(map[string]string{"activity": "development"})
t.AssertEqual(fmt.Sprint(pl2), `{"activity":"development"}`)
msg.WithPayload(pl2)
pl3 := message.FromJson[map[string]any](`{"activity": "development"}`)
pl3 := message.PayloadFromJson[map[string]any](`{"activity": "development"}`)
t.AssertEqual(fmt.Sprint(pl3), `{"activity":"development"}`)
}