[#11] accounting: Define service executor

Defines ServiceExecutor interface of the executor that handles service
request bodies and returns service response bodies. Adds Service
implementation that writes the result of ServiceExecutor to response body
and attaches the internal ResponseMetaHeader.

Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
Leonard Lyubich 2020-08-22 17:26:48 +03:00 committed by Alex Vanin
parent 5cf622881f
commit 7cc1a2a85a

View file

@ -0,0 +1,42 @@
package accounting
import (
"context"
"github.com/nspcc-dev/neofs-api-go/v2/accounting"
"github.com/nspcc-dev/neofs-api-go/v2/session"
"github.com/pkg/errors"
)
type ServiceExecutor interface {
Balance(context.Context, *accounting.BalanceRequestBody) (*accounting.BalanceResponseBody, error)
}
type executorSvc struct {
exec ServiceExecutor
metaHeader *session.ResponseMetaHeader
}
// NewExecutionService wraps ServiceExecutor and returns Accounting Service interface.
//
// Passed meta header is attached to all responses.
func NewExecutionService(exec ServiceExecutor, metaHdr *session.ResponseMetaHeader) accounting.Service {
return &executorSvc{
exec: exec,
metaHeader: metaHdr,
}
}
func (s *executorSvc) Balance(ctx context.Context, req *accounting.BalanceRequest) (*accounting.BalanceResponse, error) {
respBody, err := s.exec.Balance(ctx, req.GetBody())
if err != nil {
return nil, errors.Wrap(err, "could not execute Balance request")
}
resp := new(accounting.BalanceResponse)
resp.SetBody(respBody)
resp.SetMetaHeader(s.metaHeader)
return resp, nil
}