64 lines
1.9 KiB
Go
64 lines
1.9 KiB
Go
package gateway
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/tech/sendico/pkg/api/routers/gsresponse"
|
|
gatewayv1 "github.com/tech/sendico/pkg/proto/common/gateway/v1"
|
|
mntxv1 "github.com/tech/sendico/pkg/proto/gateway/mntx/v1"
|
|
)
|
|
|
|
// ListGatewayInstances exposes the Monetix gateway instance descriptors.
|
|
func (s *Service) ListGatewayInstances(ctx context.Context, req *mntxv1.ListGatewayInstancesRequest) (*mntxv1.ListGatewayInstancesResponse, error) {
|
|
return executeUnary(ctx, s, "ListGatewayInstances", s.handleListGatewayInstances, req)
|
|
}
|
|
|
|
func (s *Service) handleListGatewayInstances(_ context.Context, _ *mntxv1.ListGatewayInstancesRequest) gsresponse.Responder[mntxv1.ListGatewayInstancesResponse] {
|
|
items := make([]*gatewayv1.GatewayInstanceDescriptor, 0, 1)
|
|
if s.gatewayDescriptor != nil {
|
|
items = append(items, cloneGatewayDescriptor(s.gatewayDescriptor))
|
|
}
|
|
return gsresponse.Success(&mntxv1.ListGatewayInstancesResponse{Items: items})
|
|
}
|
|
|
|
func cloneGatewayDescriptor(src *gatewayv1.GatewayInstanceDescriptor) *gatewayv1.GatewayInstanceDescriptor {
|
|
if src == nil {
|
|
return nil
|
|
}
|
|
cp := *src
|
|
if src.Currencies != nil {
|
|
cp.Currencies = append([]string(nil), src.Currencies...)
|
|
}
|
|
if src.Capabilities != nil {
|
|
cap := *src.Capabilities
|
|
cp.Capabilities = &cap
|
|
}
|
|
if src.Limits != nil {
|
|
limits := *src.Limits
|
|
if src.Limits.VolumeLimit != nil {
|
|
limits.VolumeLimit = map[string]string{}
|
|
for key, value := range src.Limits.VolumeLimit {
|
|
limits.VolumeLimit[key] = value
|
|
}
|
|
}
|
|
if src.Limits.VelocityLimit != nil {
|
|
limits.VelocityLimit = map[string]int32{}
|
|
for key, value := range src.Limits.VelocityLimit {
|
|
limits.VelocityLimit[key] = value
|
|
}
|
|
}
|
|
if src.Limits.CurrencyLimits != nil {
|
|
limits.CurrencyLimits = map[string]*gatewayv1.LimitsOverride{}
|
|
for key, value := range src.Limits.CurrencyLimits {
|
|
if value == nil {
|
|
continue
|
|
}
|
|
clone := *value
|
|
limits.CurrencyLimits[key] = &clone
|
|
}
|
|
}
|
|
cp.Limits = &limits
|
|
}
|
|
return &cp
|
|
}
|