diff --git a/arch/micro/message.go b/arch/micro/message.go index e3a3617..20fa281 100755 --- a/arch/micro/message.go +++ b/arch/micro/message.go @@ -1,5 +1,10 @@ package micro +import ( + "encoding/json" + "errors" +) + type Message[T any] struct { Data T `json:"data,omitempty"` Error *string `json:"error,omitempty"` @@ -32,3 +37,17 @@ func NewMessage[T any](data T, err error) *Message[T] { Error: e, } } + +func ParseMsg[T any](data []byte) (*T, error) { + var msg Message[*T] + err := json.Unmarshal(data, &msg) + if err != nil { + return nil, err + } + + if msg.Error != nil { + err = errors.New(*msg.Error) + } + + return msg.Data, err +}