2022-08-23 21:32:04 +03:00

33 lines
829 B
Go

package handler
import (
"context"
"github.com/anytypeio/go-anytype-infrastructure-experiments/app/logger"
"github.com/anytypeio/go-anytype-infrastructure-experiments/service/net/pool"
"github.com/gogo/protobuf/proto"
"go.uber.org/zap"
)
var log = logger.NewNamed("replyHandler")
type ReplyHandler interface {
Handle(ctx context.Context, req []byte) (rep proto.Marshaler, err error)
}
type Reply struct {
ReplyHandler
}
func (r Reply) Handle(ctx context.Context, msg *pool.Message) error {
rep, e := r.ReplyHandler.Handle(ctx, msg.GetData())
if msg.GetHeader().RequestId == 0 {
if e != nil {
log.Error("handler returned error", zap.Error(e))
} else if rep != nil {
log.Debug("sender didn't expect a reply, but the handler made")
}
return nil
}
return msg.ReplyType(msg.GetHeader().GetType(), rep)
}