forked from TrueCloudLab/frostfs-node
7cc1a2a85a
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>
42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
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
|
|
}
|