using CryptoExchange.Net.Objects; using System; using System.Collections.Generic; using System.Linq; namespace CryptoExchange.Net.SharedApis { /// /// Options for placing a new spot order /// public class PlaceSpotOrderOptions : EndpointOptions { /// /// ctor /// public PlaceSpotOrderOptions() : base(true) { } /// /// Validate a request /// public Error? ValidateRequest( string exchange, PlaceSpotOrderRequest request, TradingMode? tradingMode, TradingMode[] supportedApiTypes, SharedOrderType[] supportedOrderTypes, SharedTimeInForce[] supportedTimeInForce, SharedQuantitySupport quantitySupport) { if (request.OrderType == SharedOrderType.Other) throw new ArgumentException("OrderType can't be `Other`", nameof(request.OrderType)); if (!supportedOrderTypes.Contains(request.OrderType)) return ArgumentError.Invalid(nameof(PlaceSpotOrderRequest.OrderType), "Order type not supported"); if (request.TimeInForce != null && !supportedTimeInForce.Contains(request.TimeInForce.Value)) return ArgumentError.Invalid(nameof(PlaceSpotOrderRequest.TimeInForce), "Order time in force not supported"); var quantityError = quantitySupport.Validate(request.Side, request.OrderType, request.Quantity); if (quantityError != null) return quantityError; return base.ValidateRequest(exchange, request, tradingMode, supportedApiTypes); } } }