private static FeeOrderAction ToFeeOrderAction(OrderAction action)
        {
            FeeOrderAction orderAction;

            switch (action)
            {
            case OrderAction.Buy:
                orderAction = FeeOrderAction.Buy;
                break;

            case OrderAction.Sell:
                orderAction = FeeOrderAction.Sell;
                break;

            default:
                throw new InvalidOperationException("Unknown order action");
            }

            return(orderAction);
        }
        public async Task <MarketOrderFeeModel[]> GetMarketOrderFees(string clientId, AssetPair assetPair,
                                                                     OrderAction orderAction)
        {
            var fee = await _feeCalculatorClient.GetMarketOrderAssetFee(clientId, assetPair.Id, assetPair.BaseAssetId,
                                                                        ToFeeOrderAction(orderAction));

            var model = new MarketOrderFeeModel
            {
                Size           = (double)fee.Amount,
                SizeType       = GetFeeSizeType(fee.Type),
                SourceClientId = clientId,
                TargetClientId = fee.TargetWalletId ?? _feeSettings.TargetClientId.Hft,
                Type           = fee.Amount == 0m
                    ? MeFeeType.NO_FEE
                    : MeFeeType.CLIENT_FEE,
                AssetId = string.IsNullOrEmpty(fee.TargetAssetId)
                    ? Array.Empty <string>()
                    : new[] { fee.TargetAssetId }
            };

            return(new[] { model });
        }
        public async Task <LimitOrderFeeModel[]> GetLimitOrderFees(string clientId, AssetPair assetPair, OrderAction orderAction)
        {
            var fee = await _feeCalculatorClient.GetLimitOrderFees(clientId, assetPair.Id, assetPair.BaseAssetId, ToFeeOrderAction(orderAction));

            var model = new LimitOrderFeeModel
            {
                MakerSize      = (double)fee.MakerFeeSize,
                TakerSize      = (double)fee.TakerFeeSize,
                SourceClientId = clientId,
                TargetClientId = _feeSettings.TargetClientId.Hft,
                Type           = fee.MakerFeeSize == 0m && fee.TakerFeeSize == 0m
                    ? MeFeeType.NO_FEE
                    : MeFeeType.CLIENT_FEE,
                MakerFeeModificator = (double)fee.MakerFeeModificator,
                MakerSizeType       = GetFeeSizeType(fee.MakerFeeType),
                TakerSizeType       = GetFeeSizeType(fee.TakerFeeType),
                AssetId             = Array.Empty <string>()
            };

            return(new[] { model });
        }