From 7cc1a2a85a2dabae357585a8fb66ac7d42eeb5b6 Mon Sep 17 00:00:00 2001 From: Leonard Lyubich Date: Sat, 22 Aug 2020 17:26:48 +0300 Subject: [PATCH] [#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 --- pkg/services/accounting/executor.go | 42 +++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 pkg/services/accounting/executor.go diff --git a/pkg/services/accounting/executor.go b/pkg/services/accounting/executor.go new file mode 100644 index 00000000..c2bc76c0 --- /dev/null +++ b/pkg/services/accounting/executor.go @@ -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 +}