1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2025-06-07 16:06:15 +00:00

Updated IEnumerable responses to arrays

This commit is contained in:
Jkorf 2025-03-05 13:13:55 +01:00
parent 89bd091848
commit 89c87b19e1
49 changed files with 101 additions and 100 deletions

View File

@ -10,16 +10,16 @@ namespace CryptoExchange.Net.Converters.SystemTextJson
/// <summary> /// <summary>
/// Converter for comma separated enum values /// Converter for comma separated enum values
/// </summary> /// </summary>
public class CommaSplitEnumConverter<T> : JsonConverter<IEnumerable<T>> where T: struct, Enum public class CommaSplitEnumConverter<T> : JsonConverter<T[]> where T: struct, Enum
{ {
/// <inheritdoc /> /// <inheritdoc />
public override IEnumerable<T>? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) public override T[]? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{ {
return (reader.GetString()?.Split(',').Select(x => (T)EnumConverter.ParseString<T>(x)!).ToArray() ?? []); return (reader.GetString()?.Split(',').Select(x => (T)EnumConverter.ParseString<T>(x)!).ToArray() ?? []);
} }
/// <inheritdoc /> /// <inheritdoc />
public override void Write(Utf8JsonWriter writer, IEnumerable<T> value, JsonSerializerOptions options) public override void Write(Utf8JsonWriter writer, T[] value, JsonSerializerOptions options)
{ {
writer.WriteStringValue(string.Join(",", value.Select(x => EnumConverter.GetString(x)))); writer.WriteStringValue(string.Join(",", value.Select(x => EnumConverter.GetString(x))));
} }

View File

@ -225,10 +225,10 @@ namespace CryptoExchange.Net
/// <param name="request">The request parameters</param> /// <param name="request">The request parameters</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
/// <returns></returns> /// <returns></returns>
public static async IAsyncEnumerable<ExchangeWebResult<IEnumerable<T>>> ExecutePages<T, U>(Func<U, INextPageToken?, CancellationToken, Task<ExchangeWebResult<IEnumerable<T>>>> paginatedFunc, U request, [EnumeratorCancellation]CancellationToken ct = default) public static async IAsyncEnumerable<ExchangeWebResult<T[]>> ExecutePages<T, U>(Func<U, INextPageToken?, CancellationToken, Task<ExchangeWebResult<T[]>>> paginatedFunc, U request, [EnumeratorCancellation]CancellationToken ct = default)
{ {
var result = new List<T>(); var result = new List<T>();
ExchangeWebResult<IEnumerable<T>> batch; ExchangeWebResult<T[]> batch;
INextPageToken? nextPageToken = null; INextPageToken? nextPageToken = null;
while (true) while (true)
{ {

View File

@ -54,7 +54,7 @@ namespace CryptoExchange.Net.Interfaces
/// Get all headers /// Get all headers
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
Dictionary<string, IEnumerable<string>> GetHeaders(); Dictionary<string, string[]> GetHeaders();
/// <summary> /// <summary>
/// Get the response /// Get the response

View File

@ -28,7 +28,7 @@ namespace CryptoExchange.Net.Interfaces
/// <summary> /// <summary>
/// The response headers /// The response headers
/// </summary> /// </summary>
IEnumerable<KeyValuePair<string, IEnumerable<string>>> ResponseHeaders { get; } KeyValuePair<string, string[]>[] ResponseHeaders { get; }
/// <summary> /// <summary>
/// Get the response stream /// Get the response stream

View File

@ -42,7 +42,7 @@ namespace CryptoExchange.Net.Interfaces
/// <summary> /// <summary>
/// Event when order book was updated. Be careful! It can generate a lot of events at high-liquidity markets /// Event when order book was updated. Be careful! It can generate a lot of events at high-liquidity markets
/// </summary> /// </summary>
event Action<(IEnumerable<ISymbolOrderBookEntry> Bids, IEnumerable<ISymbolOrderBookEntry> Asks)> OnOrderBookUpdate; event Action<(ISymbolOrderBookEntry[] Bids, ISymbolOrderBookEntry[] Asks)> OnOrderBookUpdate;
/// <summary> /// <summary>
/// Event when the BestBid or BestAsk changes ie a Pricing Tick /// Event when the BestBid or BestAsk changes ie a Pricing Tick
/// </summary> /// </summary>
@ -64,17 +64,17 @@ namespace CryptoExchange.Net.Interfaces
/// <summary> /// <summary>
/// Get a snapshot of the book at this moment /// Get a snapshot of the book at this moment
/// </summary> /// </summary>
(IEnumerable<ISymbolOrderBookEntry> bids, IEnumerable<ISymbolOrderBookEntry> asks) Book { get; } (ISymbolOrderBookEntry[] bids, ISymbolOrderBookEntry[] asks) Book { get; }
/// <summary> /// <summary>
/// The list of asks /// The list of asks
/// </summary> /// </summary>
IEnumerable<ISymbolOrderBookEntry> Asks { get; } ISymbolOrderBookEntry[] Asks { get; }
/// <summary> /// <summary>
/// The list of bids /// The list of bids
/// </summary> /// </summary>
IEnumerable<ISymbolOrderBookEntry> Bids { get; } ISymbolOrderBookEntry[] Bids { get; }
/// <summary> /// <summary>
/// The best bid currently in the order book /// The best bid currently in the order book

View File

@ -192,7 +192,7 @@ namespace CryptoExchange.Net.Objects
/// <summary> /// <summary>
/// The headers sent with the request /// The headers sent with the request
/// </summary> /// </summary>
public IEnumerable<KeyValuePair<string, IEnumerable<string>>>? RequestHeaders { get; set; } public KeyValuePair<string, string[]>[]? RequestHeaders { get; set; }
/// <summary> /// <summary>
/// The request id /// The request id
@ -217,7 +217,7 @@ namespace CryptoExchange.Net.Objects
/// <summary> /// <summary>
/// The response headers /// The response headers
/// </summary> /// </summary>
public IEnumerable<KeyValuePair<string, IEnumerable<string>>>? ResponseHeaders { get; set; } public KeyValuePair<string, string[]>[]? ResponseHeaders { get; set; }
/// <summary> /// <summary>
/// The time between sending the request and receiving the response /// The time between sending the request and receiving the response
@ -238,13 +238,13 @@ namespace CryptoExchange.Net.Objects
/// <param name="error"></param> /// <param name="error"></param>
public WebCallResult( public WebCallResult(
HttpStatusCode? code, HttpStatusCode? code,
IEnumerable<KeyValuePair<string, IEnumerable<string>>>? responseHeaders, KeyValuePair<string, string[]>[]? responseHeaders,
TimeSpan? responseTime, TimeSpan? responseTime,
int? requestId, int? requestId,
string? requestUrl, string? requestUrl,
string? requestBody, string? requestBody,
HttpMethod? requestMethod, HttpMethod? requestMethod,
IEnumerable<KeyValuePair<string, IEnumerable<string>>>? requestHeaders, KeyValuePair<string, string[]>[]? requestHeaders,
Error? error) : base(error) Error? error) : base(error)
{ {
ResponseStatusCode = code; ResponseStatusCode = code;
@ -343,7 +343,7 @@ namespace CryptoExchange.Net.Objects
/// <summary> /// <summary>
/// The headers sent with the request /// The headers sent with the request
/// </summary> /// </summary>
public IEnumerable<KeyValuePair<string, IEnumerable<string>>>? RequestHeaders { get; set; } public KeyValuePair<string, string[]>[]? RequestHeaders { get; set; }
/// <summary> /// <summary>
/// The request id /// The request id
@ -373,7 +373,7 @@ namespace CryptoExchange.Net.Objects
/// <summary> /// <summary>
/// The response headers /// The response headers
/// </summary> /// </summary>
public IEnumerable<KeyValuePair<string, IEnumerable<string>>>? ResponseHeaders { get; set; } public KeyValuePair<string, string[]>[]? ResponseHeaders { get; set; }
/// <summary> /// <summary>
/// The time between sending the request and receiving the response /// The time between sending the request and receiving the response
@ -403,7 +403,7 @@ namespace CryptoExchange.Net.Objects
/// <param name="error"></param> /// <param name="error"></param>
public WebCallResult( public WebCallResult(
HttpStatusCode? code, HttpStatusCode? code,
IEnumerable<KeyValuePair<string, IEnumerable<string>>>? responseHeaders, KeyValuePair<string, string[]>[]? responseHeaders,
TimeSpan? responseTime, TimeSpan? responseTime,
long? responseLength, long? responseLength,
string? originalData, string? originalData,
@ -411,7 +411,7 @@ namespace CryptoExchange.Net.Objects
string? requestUrl, string? requestUrl,
string? requestBody, string? requestBody,
HttpMethod? requestMethod, HttpMethod? requestMethod,
IEnumerable<KeyValuePair<string, IEnumerable<string>>>? requestHeaders, KeyValuePair<string, string[]>[]? requestHeaders,
ResultDataSource dataSource, ResultDataSource dataSource,
[AllowNull] T data, [AllowNull] T data,
Error? error) : base(data, originalData, error) Error? error) : base(data, originalData, error)

View File

@ -22,11 +22,11 @@ namespace CryptoExchange.Net.OrderBook
/// <summary> /// <summary>
/// List of changed/new asks /// List of changed/new asks
/// </summary> /// </summary>
public IEnumerable<ISymbolOrderBookEntry> Asks { get; set; } = Array.Empty<ISymbolOrderBookEntry>(); public ISymbolOrderBookEntry[] Asks { get; set; } = Array.Empty<ISymbolOrderBookEntry>();
/// <summary> /// <summary>
/// List of changed/new bids /// List of changed/new bids
/// </summary> /// </summary>
public IEnumerable<ISymbolOrderBookEntry> Bids { get; set; } = Array.Empty<ISymbolOrderBookEntry>(); public ISymbolOrderBookEntry[] Bids { get; set; } = Array.Empty<ISymbolOrderBookEntry>();
} }
} }

View File

@ -8,16 +8,16 @@ namespace CryptoExchange.Net.OrderBook
{ {
public long StartUpdateId { get; set; } public long StartUpdateId { get; set; }
public long EndUpdateId { get; set; } public long EndUpdateId { get; set; }
public IEnumerable<ISymbolOrderBookEntry> Bids { get; set; } = Array.Empty<ISymbolOrderBookEntry>(); public ISymbolOrderBookEntry[] Bids { get; set; } = Array.Empty<ISymbolOrderBookEntry>();
public IEnumerable<ISymbolOrderBookEntry> Asks { get; set; } = Array.Empty<ISymbolOrderBookEntry>(); public ISymbolOrderBookEntry[] Asks { get; set; } = Array.Empty<ISymbolOrderBookEntry>();
} }
internal class InitialOrderBookItem internal class InitialOrderBookItem
{ {
public long StartUpdateId { get; set; } public long StartUpdateId { get; set; }
public long EndUpdateId { get; set; } public long EndUpdateId { get; set; }
public IEnumerable<ISymbolOrderBookEntry> Bids { get; set; } = Array.Empty<ISymbolOrderBookEntry>(); public ISymbolOrderBookEntry[] Bids { get; set; } = Array.Empty<ISymbolOrderBookEntry>();
public IEnumerable<ISymbolOrderBookEntry> Asks { get; set; } = Array.Empty<ISymbolOrderBookEntry>(); public ISymbolOrderBookEntry[] Asks { get; set; } = Array.Empty<ISymbolOrderBookEntry>();
} }
internal class ChecksumItem internal class ChecksumItem

View File

@ -123,7 +123,7 @@ namespace CryptoExchange.Net.OrderBook
public event Action<(ISymbolOrderBookEntry BestBid, ISymbolOrderBookEntry BestAsk)>? OnBestOffersChanged; public event Action<(ISymbolOrderBookEntry BestBid, ISymbolOrderBookEntry BestAsk)>? OnBestOffersChanged;
/// <inheritdoc/> /// <inheritdoc/>
public event Action<(IEnumerable<ISymbolOrderBookEntry> Bids, IEnumerable<ISymbolOrderBookEntry> Asks)>? OnOrderBookUpdate; public event Action<(ISymbolOrderBookEntry[] Bids, ISymbolOrderBookEntry[] Asks)>? OnOrderBookUpdate;
/// <inheritdoc/> /// <inheritdoc/>
public DateTime UpdateTime { get; private set; } public DateTime UpdateTime { get; private set; }
@ -135,27 +135,27 @@ namespace CryptoExchange.Net.OrderBook
public int BidCount { get; private set; } public int BidCount { get; private set; }
/// <inheritdoc/> /// <inheritdoc/>
public IEnumerable<ISymbolOrderBookEntry> Asks public ISymbolOrderBookEntry[] Asks
{ {
get get
{ {
lock (_bookLock) lock (_bookLock)
return _asks.Select(a => a.Value).ToList(); return _asks.Select(a => a.Value).ToArray();
} }
} }
/// <inheritdoc/> /// <inheritdoc/>
public IEnumerable<ISymbolOrderBookEntry> Bids public ISymbolOrderBookEntry[] Bids
{ {
get get
{ {
lock (_bookLock) lock (_bookLock)
return _bids.Select(a => a.Value).ToList(); return _bids.Select(a => a.Value).ToArray();
} }
} }
/// <inheritdoc/> /// <inheritdoc/>
public (IEnumerable<ISymbolOrderBookEntry> bids, IEnumerable<ISymbolOrderBookEntry> asks) Book public (ISymbolOrderBookEntry[] bids, ISymbolOrderBookEntry[] asks) Book
{ {
get get
{ {
@ -412,7 +412,7 @@ namespace CryptoExchange.Net.OrderBook
/// <param name="orderBookSequenceNumber">The last update sequence number until which the snapshot is in sync</param> /// <param name="orderBookSequenceNumber">The last update sequence number until which the snapshot is in sync</param>
/// <param name="askList">List of asks</param> /// <param name="askList">List of asks</param>
/// <param name="bidList">List of bids</param> /// <param name="bidList">List of bids</param>
protected void SetInitialOrderBook(long orderBookSequenceNumber, IEnumerable<ISymbolOrderBookEntry> bidList, IEnumerable<ISymbolOrderBookEntry> askList) protected void SetInitialOrderBook(long orderBookSequenceNumber, ISymbolOrderBookEntry[] bidList, ISymbolOrderBookEntry[] askList)
{ {
_processQueue.Enqueue(new InitialOrderBookItem { StartUpdateId = orderBookSequenceNumber, EndUpdateId = orderBookSequenceNumber, Asks = askList, Bids = bidList }); _processQueue.Enqueue(new InitialOrderBookItem { StartUpdateId = orderBookSequenceNumber, EndUpdateId = orderBookSequenceNumber, Asks = askList, Bids = bidList });
_queueEvent.Set(); _queueEvent.Set();
@ -424,7 +424,7 @@ namespace CryptoExchange.Net.OrderBook
/// <param name="updateId">The sequence number</param> /// <param name="updateId">The sequence number</param>
/// <param name="bids">List of updated/new bids</param> /// <param name="bids">List of updated/new bids</param>
/// <param name="asks">List of updated/new asks</param> /// <param name="asks">List of updated/new asks</param>
protected void UpdateOrderBook(long updateId, IEnumerable<ISymbolOrderBookEntry> bids, IEnumerable<ISymbolOrderBookEntry> asks) protected void UpdateOrderBook(long updateId, ISymbolOrderBookEntry[] bids, ISymbolOrderBookEntry[] asks)
{ {
_processQueue.Enqueue(new ProcessQueueItem { StartUpdateId = updateId, EndUpdateId = updateId, Asks = asks, Bids = bids }); _processQueue.Enqueue(new ProcessQueueItem { StartUpdateId = updateId, EndUpdateId = updateId, Asks = asks, Bids = bids });
_queueEvent.Set(); _queueEvent.Set();
@ -437,7 +437,7 @@ namespace CryptoExchange.Net.OrderBook
/// <param name="lastUpdateId">The sequence number of the last update</param> /// <param name="lastUpdateId">The sequence number of the last update</param>
/// <param name="bids">List of updated/new bids</param> /// <param name="bids">List of updated/new bids</param>
/// <param name="asks">List of updated/new asks</param> /// <param name="asks">List of updated/new asks</param>
protected void UpdateOrderBook(long firstUpdateId, long lastUpdateId, IEnumerable<ISymbolOrderBookEntry> bids, IEnumerable<ISymbolOrderBookEntry> asks) protected void UpdateOrderBook(long firstUpdateId, long lastUpdateId, ISymbolOrderBookEntry[] bids, ISymbolOrderBookEntry[] asks)
{ {
_processQueue.Enqueue(new ProcessQueueItem { StartUpdateId = firstUpdateId, EndUpdateId = lastUpdateId, Asks = asks, Bids = bids }); _processQueue.Enqueue(new ProcessQueueItem { StartUpdateId = firstUpdateId, EndUpdateId = lastUpdateId, Asks = asks, Bids = bids });
_queueEvent.Set(); _queueEvent.Set();
@ -448,7 +448,7 @@ namespace CryptoExchange.Net.OrderBook
/// </summary> /// </summary>
/// <param name="bids">List of updated/new bids</param> /// <param name="bids">List of updated/new bids</param>
/// <param name="asks">List of updated/new asks</param> /// <param name="asks">List of updated/new asks</param>
protected void UpdateOrderBook(IEnumerable<ISymbolOrderSequencedBookEntry> bids, IEnumerable<ISymbolOrderSequencedBookEntry> asks) protected void UpdateOrderBook(ISymbolOrderSequencedBookEntry[] bids, ISymbolOrderSequencedBookEntry[] asks)
{ {
var highest = Math.Max(bids.Any() ? bids.Max(b => b.Sequence) : 0, asks.Any() ? asks.Max(a => a.Sequence) : 0); var highest = Math.Max(bids.Any() ? bids.Max(b => b.Sequence) : 0, asks.Any() ? asks.Max(a => a.Sequence) : 0);
var lowest = Math.Min(bids.Any() ? bids.Min(b => b.Sequence) : long.MaxValue, asks.Any() ? asks.Min(a => a.Sequence) : long.MaxValue); var lowest = Math.Min(bids.Any() ? bids.Min(b => b.Sequence) : long.MaxValue, asks.Any() ? asks.Min(a => a.Sequence) : long.MaxValue);
@ -707,7 +707,7 @@ namespace CryptoExchange.Net.OrderBook
UpdateTime = DateTime.UtcNow; UpdateTime = DateTime.UtcNow;
_logger.OrderBookDataSet(Api, Symbol, BidCount, AskCount, item.EndUpdateId); _logger.OrderBookDataSet(Api, Symbol, BidCount, AskCount, item.EndUpdateId);
CheckProcessBuffer(); CheckProcessBuffer();
OnOrderBookUpdate?.Invoke((item.Bids, item.Asks)); OnOrderBookUpdate?.Invoke((item.Bids.ToArray(), item.Asks.ToArray()));
OnBestOffersChanged?.Invoke((BestBid, BestAsk)); OnBestOffersChanged?.Invoke((BestBid, BestAsk));
} }
} }
@ -745,7 +745,7 @@ namespace CryptoExchange.Net.OrderBook
return; return;
} }
OnOrderBookUpdate?.Invoke((item.Bids, item.Asks)); OnOrderBookUpdate?.Invoke((item.Bids.ToArray(), item.Asks.ToArray()));
CheckBestOffersChanged(prevBestBid, prevBestAsk); CheckBestOffersChanged(prevBestBid, prevBestAsk);
} }
} }

View File

@ -67,9 +67,9 @@ namespace CryptoExchange.Net.Requests
} }
/// <inheritdoc /> /// <inheritdoc />
public Dictionary<string, IEnumerable<string>> GetHeaders() public Dictionary<string, string[]> GetHeaders()
{ {
return _request.Headers.ToDictionary(h => h.Key, h => h.Value); return _request.Headers.ToDictionary(h => h.Key, h => h.Value.ToArray());
} }
/// <inheritdoc /> /// <inheritdoc />

View File

@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Net; using System.Net;
using System.Net.Http; using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -24,7 +25,7 @@ namespace CryptoExchange.Net.Requests
public long? ContentLength => _response.Content.Headers.ContentLength; public long? ContentLength => _response.Content.Headers.ContentLength;
/// <inheritdoc /> /// <inheritdoc />
public IEnumerable<KeyValuePair<string, IEnumerable<string>>> ResponseHeaders => _response.Headers; public KeyValuePair<string, string[]>[] ResponseHeaders => _response.Headers.Select(x => new KeyValuePair<string, string[]>(x.Key, x.Value.ToArray())).ToArray();
/// <summary> /// <summary>
/// Create response for a http response message /// Create response for a http response message

View File

@ -19,6 +19,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedFundingRate>>> GetFundingRateHistoryAsync(GetFundingRateHistoryRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedFundingRate[]>> GetFundingRateHistoryAsync(GetFundingRateHistoryRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
} }
} }

View File

@ -62,7 +62,7 @@ namespace CryptoExchange.Net.SharedApis
/// </summary> /// </summary>
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedFuturesOrder>>> GetOpenFuturesOrdersAsync(GetOpenOrdersRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedFuturesOrder[]>> GetOpenFuturesOrdersAsync(GetOpenOrdersRequest request, CancellationToken ct = default);
/// <summary> /// <summary>
/// Spot get closed orders request options /// Spot get closed orders request options
@ -74,7 +74,7 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedFuturesOrder>>> GetClosedFuturesOrdersAsync(GetClosedOrdersRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedFuturesOrder[]>> GetClosedFuturesOrdersAsync(GetClosedOrdersRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
/// <summary> /// <summary>
/// Futures get order trades request options /// Futures get order trades request options
@ -85,7 +85,7 @@ namespace CryptoExchange.Net.SharedApis
/// </summary> /// </summary>
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedUserTrade>>> GetFuturesOrderTradesAsync(GetOrderTradesRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedUserTrade[]>> GetFuturesOrderTradesAsync(GetOrderTradesRequest request, CancellationToken ct = default);
/// <summary> /// <summary>
/// Futures user trades request options /// Futures user trades request options
@ -97,7 +97,7 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedUserTrade>>> GetFuturesUserTradesAsync(GetUserTradesRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedUserTrade[]>> GetFuturesUserTradesAsync(GetUserTradesRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
/// <summary> /// <summary>
/// Futures cancel order request options /// Futures cancel order request options
@ -119,7 +119,7 @@ namespace CryptoExchange.Net.SharedApis
/// </summary> /// </summary>
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedPosition>>> GetPositionsAsync(GetPositionsRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedPosition[]>> GetPositionsAsync(GetPositionsRequest request, CancellationToken ct = default);
/// <summary> /// <summary>
/// Close position order request options /// Close position order request options

View File

@ -14,10 +14,10 @@ namespace CryptoExchange.Net.SharedApis
/// </summary> /// </summary>
EndpointOptions<GetSymbolsRequest> GetFuturesSymbolsOptions { get; } EndpointOptions<GetSymbolsRequest> GetFuturesSymbolsOptions { get; }
/// <summary> /// <summary>
/// Get info on all futures symbols supported on the exchagne /// Get info on all futures symbols supported on the exchange
/// </summary> /// </summary>
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedFuturesSymbol>>> GetFuturesSymbolsAsync(GetSymbolsRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedFuturesSymbol[]>> GetFuturesSymbolsAsync(GetSymbolsRequest request, CancellationToken ct = default);
} }
} }

View File

@ -25,10 +25,10 @@ namespace CryptoExchange.Net.SharedApis
/// </summary> /// </summary>
EndpointOptions<GetTickersRequest> GetFuturesTickersOptions { get; } EndpointOptions<GetTickersRequest> GetFuturesTickersOptions { get; }
/// <summary> /// <summary>
/// Get ticker info for aall futures symbols /// Get ticker info for all futures symbols
/// </summary> /// </summary>
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedFuturesTicker>>> GetFuturesTickersAsync(GetTickersRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedFuturesTicker[]>> GetFuturesTickersAsync(GetTickersRequest request, CancellationToken ct = default);
} }
} }

View File

@ -19,6 +19,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedFuturesKline>>> GetIndexPriceKlinesAsync(GetKlinesRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedFuturesKline[]>> GetIndexPriceKlinesAsync(GetKlinesRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
} }
} }

View File

@ -19,6 +19,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedFuturesKline>>> GetMarkPriceKlinesAsync(GetKlinesRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedFuturesKline[]>> GetMarkPriceKlinesAsync(GetKlinesRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
} }
} }

View File

@ -19,6 +19,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedPositionHistory>>> GetPositionHistoryAsync(GetPositionHistoryRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedPositionHistory[]>> GetPositionHistoryAsync(GetPositionHistoryRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
} }
} }

View File

@ -31,6 +31,6 @@ namespace CryptoExchange.Net.SharedApis
/// </summary> /// </summary>
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedAsset>>> GetAssetsAsync(GetAssetsRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedAsset[]>> GetAssetsAsync(GetAssetsRequest request, CancellationToken ct = default);
} }
} }

View File

@ -20,6 +20,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeWebResult<IEnumerable<SharedBalance>>> GetBalancesAsync(GetBalancesRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedBalance[]>> GetBalancesAsync(GetBalancesRequest request, CancellationToken ct = default);
} }
} }

View File

@ -20,7 +20,7 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeWebResult<IEnumerable<SharedDepositAddress>>> GetDepositAddressesAsync(GetDepositAddressesRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedDepositAddress[]>> GetDepositAddressesAsync(GetDepositAddressesRequest request, CancellationToken ct = default);
/// <summary> /// <summary>
/// Deposits request options /// Deposits request options
@ -34,6 +34,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeWebResult<IEnumerable<SharedDeposit>>> GetDepositsAsync(GetDepositsRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedDeposit[]>> GetDepositsAsync(GetDepositsRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
} }
} }

View File

@ -21,6 +21,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeWebResult<IEnumerable<SharedKline>>> GetKlinesAsync(GetKlinesRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedKline[]>> GetKlinesAsync(GetKlinesRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
} }
} }

View File

@ -20,6 +20,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeWebResult<IEnumerable<SharedTrade>>> GetRecentTradesAsync(GetRecentTradesRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedTrade[]>> GetRecentTradesAsync(GetRecentTradesRequest request, CancellationToken ct = default);
} }
} }

View File

@ -21,6 +21,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeWebResult<IEnumerable<SharedTrade>>> GetTradeHistoryAsync(GetTradeHistoryRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedTrade[]>> GetTradeHistoryAsync(GetTradeHistoryRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
} }
} }

View File

@ -21,6 +21,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeWebResult<IEnumerable<SharedWithdrawal>>> GetWithdrawalsAsync(GetWithdrawalsRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedWithdrawal[]>> GetWithdrawalsAsync(GetWithdrawalsRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
} }
} }

View File

@ -21,11 +21,11 @@ namespace CryptoExchange.Net.SharedApis
/// <summary> /// <summary>
/// Supported order types /// Supported order types
/// </summary> /// </summary>
IEnumerable<SharedOrderType> SpotSupportedOrderTypes { get; } SharedOrderType[] SpotSupportedOrderTypes { get; }
/// <summary> /// <summary>
/// Supported time in force /// Supported time in force
/// </summary> /// </summary>
IEnumerable<SharedTimeInForce> SpotSupportedTimeInForce { get; } SharedTimeInForce[] SpotSupportedTimeInForce { get; }
/// <summary> /// <summary>
/// Quantity types support /// Quantity types support
/// </summary> /// </summary>
@ -62,7 +62,7 @@ namespace CryptoExchange.Net.SharedApis
/// </summary> /// </summary>
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedSpotOrder>>> GetOpenSpotOrdersAsync(GetOpenOrdersRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedSpotOrder[]>> GetOpenSpotOrdersAsync(GetOpenOrdersRequest request, CancellationToken ct = default);
/// <summary> /// <summary>
/// Spot get closed orders request options /// Spot get closed orders request options
@ -74,7 +74,7 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedSpotOrder>>> GetClosedSpotOrdersAsync(GetClosedOrdersRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedSpotOrder[]>> GetClosedSpotOrdersAsync(GetClosedOrdersRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
/// <summary> /// <summary>
/// Spot get order trades request options /// Spot get order trades request options
@ -85,7 +85,7 @@ namespace CryptoExchange.Net.SharedApis
/// </summary> /// </summary>
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedUserTrade>>> GetSpotOrderTradesAsync(GetOrderTradesRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedUserTrade[]>> GetSpotOrderTradesAsync(GetOrderTradesRequest request, CancellationToken ct = default);
/// <summary> /// <summary>
/// Spot user trades request options /// Spot user trades request options
@ -97,7 +97,7 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param> /// <param name="nextPageToken">The pagination token from the previous request to continue pagination</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedUserTrade>>> GetSpotUserTradesAsync(GetUserTradesRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default); Task<ExchangeWebResult<SharedUserTrade[]>> GetSpotUserTradesAsync(GetUserTradesRequest request, INextPageToken? nextPageToken = null, CancellationToken ct = default);
/// <summary> /// <summary>
/// Spot cancel order request options /// Spot cancel order request options

View File

@ -19,6 +19,6 @@ namespace CryptoExchange.Net.SharedApis
/// </summary> /// </summary>
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedSpotSymbol>>> GetSpotSymbolsAsync(GetSymbolsRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedSpotSymbol[]>> GetSpotSymbolsAsync(GetSymbolsRequest request, CancellationToken ct = default);
} }
} }

View File

@ -28,6 +28,6 @@ namespace CryptoExchange.Net.SharedApis
/// </summary> /// </summary>
/// <param name="request">Request info</param> /// <param name="request">Request info</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
Task<ExchangeWebResult<IEnumerable<SharedSpotTicker>>> GetSpotTickersAsync(GetTickersRequest request, CancellationToken ct = default); Task<ExchangeWebResult<SharedSpotTicker[]>> GetSpotTickersAsync(GetTickersRequest request, CancellationToken ct = default);
} }
} }

View File

@ -23,6 +23,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="handler">Update handler</param> /// <param name="handler">Update handler</param>
/// <param name="ct">Cancellation token, can be used to stop the updates</param> /// <param name="ct">Cancellation token, can be used to stop the updates</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeResult<UpdateSubscription>> SubscribeToFuturesOrderUpdatesAsync(SubscribeFuturesOrderRequest request, Action<ExchangeEvent<IEnumerable<SharedFuturesOrder>>> handler, CancellationToken ct = default); Task<ExchangeResult<UpdateSubscription>> SubscribeToFuturesOrderUpdatesAsync(SubscribeFuturesOrderRequest request, Action<ExchangeEvent<SharedFuturesOrder[]>> handler, CancellationToken ct = default);
} }
} }

View File

@ -23,6 +23,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="handler">Update handler</param> /// <param name="handler">Update handler</param>
/// <param name="ct">Cancellation token, can be used to stop the updates</param> /// <param name="ct">Cancellation token, can be used to stop the updates</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeResult<UpdateSubscription>> SubscribeToPositionUpdatesAsync(SubscribePositionRequest request, Action<ExchangeEvent<IEnumerable<SharedPosition>>> handler, CancellationToken ct = default); Task<ExchangeResult<UpdateSubscription>> SubscribeToPositionUpdatesAsync(SubscribePositionRequest request, Action<ExchangeEvent<SharedPosition[]>> handler, CancellationToken ct = default);
} }
} }

View File

@ -23,6 +23,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="handler">Update handler</param> /// <param name="handler">Update handler</param>
/// <param name="ct">Cancellation token, can be used to stop the updates</param> /// <param name="ct">Cancellation token, can be used to stop the updates</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeResult<UpdateSubscription>> SubscribeToBalanceUpdatesAsync(SubscribeBalancesRequest request, Action<ExchangeEvent<IEnumerable<SharedBalance>>> handler, CancellationToken ct = default); Task<ExchangeResult<UpdateSubscription>> SubscribeToBalanceUpdatesAsync(SubscribeBalancesRequest request, Action<ExchangeEvent<SharedBalance[]>> handler, CancellationToken ct = default);
} }
} }

View File

@ -23,6 +23,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="handler">Update handler</param> /// <param name="handler">Update handler</param>
/// <param name="ct">Cancellation token, can be used to stop the updates</param> /// <param name="ct">Cancellation token, can be used to stop the updates</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeResult<UpdateSubscription>> SubscribeToAllTickersUpdatesAsync(SubscribeAllTickersRequest request, Action<ExchangeEvent<IEnumerable<SharedSpotTicker>>> handler, CancellationToken ct = default); Task<ExchangeResult<UpdateSubscription>> SubscribeToAllTickersUpdatesAsync(SubscribeAllTickersRequest request, Action<ExchangeEvent<SharedSpotTicker[]>> handler, CancellationToken ct = default);
} }
} }

View File

@ -23,6 +23,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="handler">Update handler</param> /// <param name="handler">Update handler</param>
/// <param name="ct">Cancellation token, can be used to stop the updates</param> /// <param name="ct">Cancellation token, can be used to stop the updates</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeResult<UpdateSubscription>> SubscribeToTradeUpdatesAsync(SubscribeTradeRequest request, Action<ExchangeEvent<IEnumerable<SharedTrade>>> handler, CancellationToken ct = default); Task<ExchangeResult<UpdateSubscription>> SubscribeToTradeUpdatesAsync(SubscribeTradeRequest request, Action<ExchangeEvent<SharedTrade[]>> handler, CancellationToken ct = default);
} }
} }

View File

@ -23,6 +23,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="handler">Update handler</param> /// <param name="handler">Update handler</param>
/// <param name="ct">Cancellation token, can be used to stop the updates</param> /// <param name="ct">Cancellation token, can be used to stop the updates</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeResult<UpdateSubscription>> SubscribeToUserTradeUpdatesAsync(SubscribeUserTradeRequest request, Action<ExchangeEvent<IEnumerable<SharedUserTrade>>> handler, CancellationToken ct = default); Task<ExchangeResult<UpdateSubscription>> SubscribeToUserTradeUpdatesAsync(SubscribeUserTradeRequest request, Action<ExchangeEvent<SharedUserTrade[]>> handler, CancellationToken ct = default);
} }
} }

View File

@ -23,6 +23,6 @@ namespace CryptoExchange.Net.SharedApis
/// <param name="handler">Update handler</param> /// <param name="handler">Update handler</param>
/// <param name="ct">Cancellation token, can be used to stop the updates</param> /// <param name="ct">Cancellation token, can be used to stop the updates</param>
/// <returns></returns> /// <returns></returns>
Task<ExchangeResult<UpdateSubscription>> SubscribeToSpotOrderUpdatesAsync(SubscribeSpotOrderRequest request, Action<ExchangeEvent<IEnumerable<SharedSpotOrder>>> handler, CancellationToken ct = default); Task<ExchangeResult<UpdateSubscription>> SubscribeToSpotOrderUpdatesAsync(SubscribeSpotOrderRequest request, Action<ExchangeEvent<SharedSpotOrder[]>> handler, CancellationToken ct = default);
} }
} }

View File

@ -100,7 +100,7 @@ namespace CryptoExchange.Net.SharedApis
string exchange, string exchange,
TradingMode[]? dataTradeModes, TradingMode[]? dataTradeModes,
HttpStatusCode? code, HttpStatusCode? code,
IEnumerable<KeyValuePair<string, IEnumerable<string>>>? responseHeaders, KeyValuePair<string, string[]>[]? responseHeaders,
TimeSpan? responseTime, TimeSpan? responseTime,
long? responseLength, long? responseLength,
string? originalData, string? originalData,
@ -108,7 +108,7 @@ namespace CryptoExchange.Net.SharedApis
string? requestUrl, string? requestUrl,
string? requestBody, string? requestBody,
HttpMethod? requestMethod, HttpMethod? requestMethod,
IEnumerable<KeyValuePair<string, IEnumerable<string>>>? requestHeaders, KeyValuePair<string, string[]>[]? requestHeaders,
ResultDataSource dataSource, ResultDataSource dataSource,
[AllowNull] T data, [AllowNull] T data,
Error? error, Error? error,

View File

@ -14,7 +14,7 @@ namespace CryptoExchange.Net.SharedApis
/// <summary> /// <summary>
/// The supported kline intervals /// The supported kline intervals
/// </summary> /// </summary>
public IEnumerable<SharedKlineInterval> SupportIntervals { get; } public SharedKlineInterval[] SupportIntervals { get; }
/// <summary> /// <summary>
/// Max number of data points which can be requested /// Max number of data points which can be requested
/// </summary> /// </summary>

View File

@ -14,7 +14,7 @@ namespace CryptoExchange.Net.SharedApis
/// <summary> /// <summary>
/// Supported order book depths /// Supported order book depths
/// </summary> /// </summary>
public IEnumerable<int>? SupportedLimits { get; set; } public int[]? SupportedLimits { get; set; }
/// <summary> /// <summary>
/// The min order book depth /// The min order book depth
@ -37,7 +37,7 @@ namespace CryptoExchange.Net.SharedApis
/// <summary> /// <summary>
/// ctor /// ctor
/// </summary> /// </summary>
public GetOrderBookOptions(IEnumerable<int> supportedLimits, bool authenticated) : base(authenticated) public GetOrderBookOptions(int[] supportedLimits, bool authenticated) : base(authenticated)
{ {
SupportedLimits = supportedLimits; SupportedLimits = supportedLimits;
} }

View File

@ -26,8 +26,8 @@ namespace CryptoExchange.Net.SharedApis
PlaceSpotOrderRequest request, PlaceSpotOrderRequest request,
TradingMode? tradingMode, TradingMode? tradingMode,
TradingMode[] supportedApiTypes, TradingMode[] supportedApiTypes,
IEnumerable<SharedOrderType> supportedOrderTypes, SharedOrderType[] supportedOrderTypes,
IEnumerable<SharedTimeInForce> supportedTimeInForce, SharedTimeInForce[] supportedTimeInForce,
SharedQuantitySupport quantitySupport) SharedQuantitySupport quantitySupport)
{ {
if (request.OrderType == SharedOrderType.Other) if (request.OrderType == SharedOrderType.Other)

View File

@ -13,12 +13,12 @@ namespace CryptoExchange.Net.SharedApis
/// <summary> /// <summary>
/// Order book depths supported for updates /// Order book depths supported for updates
/// </summary> /// </summary>
public IEnumerable<int> SupportedLimits { get; } public int[] SupportedLimits { get; }
/// <summary> /// <summary>
/// ctor /// ctor
/// </summary> /// </summary>
public SubscribeOrderBookOptions(bool needsAuthentication, IEnumerable<int> limits) : base(needsAuthentication) public SubscribeOrderBookOptions(bool needsAuthentication, int[] limits) : base(needsAuthentication)
{ {
SupportedLimits = limits; SupportedLimits = limits;
} }

View File

@ -19,7 +19,7 @@ namespace CryptoExchange.Net.SharedApis
/// <summary> /// <summary>
/// Asset networks info /// Asset networks info
/// </summary> /// </summary>
public IEnumerable<SharedAssetNetwork>? Networks { get; set; } = Array.Empty<SharedAssetNetwork>(); public SharedAssetNetwork[]? Networks { get; set; } = Array.Empty<SharedAssetNetwork>();
/// <summary> /// <summary>
/// ctor /// ctor

View File

@ -11,16 +11,16 @@ namespace CryptoExchange.Net.SharedApis
/// <summary> /// <summary>
/// Asks list /// Asks list
/// </summary> /// </summary>
public IEnumerable<ISymbolOrderBookEntry> Asks { get; set; } public ISymbolOrderBookEntry[] Asks { get; set; }
/// <summary> /// <summary>
/// Bids list /// Bids list
/// </summary> /// </summary>
public IEnumerable<ISymbolOrderBookEntry> Bids { get; set; } public ISymbolOrderBookEntry[] Bids { get; set; }
/// <summary> /// <summary>
/// ctor /// ctor
/// </summary> /// </summary>
public SharedOrderBook(IEnumerable<ISymbolOrderBookEntry> asks, IEnumerable<ISymbolOrderBookEntry> bids) public SharedOrderBook(ISymbolOrderBookEntry[] asks, ISymbolOrderBookEntry[] bids)
{ {
Asks = asks; Asks = asks;
Bids = bids; Bids = bids;

View File

@ -195,12 +195,12 @@ namespace CryptoExchange.Net.Sockets
/// <summary> /// <summary>
/// Current subscription topics on this connection /// Current subscription topics on this connection
/// </summary> /// </summary>
public IEnumerable<string> Topics public string[] Topics
{ {
get get
{ {
lock (_listenersLock) lock (_listenersLock)
return _listeners.OfType<Subscription>().Select(x => x.Topic).Where(t => t != null).ToList()!; return _listeners.OfType<Subscription>().Select(x => x.Topic).Where(t => t != null).ToArray()!;
} }
} }

View File

@ -10,7 +10,7 @@ namespace CryptoExchange.Net.Testing.Implementations
{ {
internal class TestRequest : IRequest internal class TestRequest : IRequest
{ {
private readonly Dictionary<string, IEnumerable<string>> _headers = new Dictionary<string, IEnumerable<string>>(); private readonly Dictionary<string, string[]> _headers = new Dictionary<string, string[]>();
private readonly TestResponse _response; private readonly TestResponse _response;
public string Accept { set { } } public string Accept { set { } }
@ -35,7 +35,7 @@ namespace CryptoExchange.Net.Testing.Implementations
_headers.Add(key, new[] { value }); _headers.Add(key, new[] { value });
} }
public Dictionary<string, IEnumerable<string>> GetHeaders() => _headers; public Dictionary<string, string[]> GetHeaders() => _headers;
public Task<IResponse> GetResponseAsync(CancellationToken cancellationToken) => Task.FromResult<IResponse>(_response); public Task<IResponse> GetResponseAsync(CancellationToken cancellationToken) => Task.FromResult<IResponse>(_response);

View File

@ -16,7 +16,7 @@ namespace CryptoExchange.Net.Testing.Implementations
public long? ContentLength { get; } public long? ContentLength { get; }
public IEnumerable<KeyValuePair<string, IEnumerable<string>>> ResponseHeaders { get; } = new Dictionary<string, IEnumerable<string>>(); public KeyValuePair<string, string[]>[] ResponseHeaders { get; } = new KeyValuePair<string, string[]>[0];
public TestResponse(HttpStatusCode code, Stream response) public TestResponse(HttpStatusCode code, Stream response)
{ {

View File

@ -91,7 +91,7 @@ namespace CryptoExchange.Net.Trackers.Klines
/// <param name="fromTimestamp">Start timestamp to get the data from, defaults to tracked data start time</param> /// <param name="fromTimestamp">Start timestamp to get the data from, defaults to tracked data start time</param>
/// <param name="toTimestamp">End timestamp to get the data until, defaults to current time</param> /// <param name="toTimestamp">End timestamp to get the data until, defaults to current time</param>
/// <returns></returns> /// <returns></returns>
IEnumerable<SharedKline> GetData(DateTime? fromTimestamp = null, DateTime? toTimestamp = null); SharedKline[] GetData(DateTime? fromTimestamp = null, DateTime? toTimestamp = null);
/// <summary> /// <summary>
/// Get statistics on the klines /// Get statistics on the klines

View File

@ -285,7 +285,7 @@ namespace CryptoExchange.Net.Trackers.Klines
} }
/// <inheritdoc /> /// <inheritdoc />
public IEnumerable<SharedKline> GetData(DateTime? since = null, DateTime? until = null) public SharedKline[] GetData(DateTime? since = null, DateTime? until = null)
{ {
lock (_lock) lock (_lock)
{ {
@ -297,7 +297,7 @@ namespace CryptoExchange.Net.Trackers.Klines
if (until != null) if (until != null)
result = result.Where(d => d.OpenTime <= until); result = result.Where(d => d.OpenTime <= until);
return result.ToList(); return result.ToArray();
} }
} }

View File

@ -87,7 +87,7 @@ namespace CryptoExchange.Net.Trackers.Trades
/// <param name="fromTimestamp">Start timestamp to get the data from, defaults to tracked data start time</param> /// <param name="fromTimestamp">Start timestamp to get the data from, defaults to tracked data start time</param>
/// <param name="toTimestamp">End timestamp to get the data until, defaults to current time</param> /// <param name="toTimestamp">End timestamp to get the data until, defaults to current time</param>
/// <returns></returns> /// <returns></returns>
IEnumerable<SharedTrade> GetData(DateTime? fromTimestamp = null, DateTime? toTimestamp = null); SharedTrade[] GetData(DateTime? fromTimestamp = null, DateTime? toTimestamp = null);
/// <summary> /// <summary>
/// Get statistics on the trades /// Get statistics on the trades

View File

@ -297,7 +297,7 @@ namespace CryptoExchange.Net.Trackers.Trades
protected virtual Task DoStopAsync() => _updateSubscription?.CloseAsync() ?? Task.CompletedTask; protected virtual Task DoStopAsync() => _updateSubscription?.CloseAsync() ?? Task.CompletedTask;
/// <inheritdoc /> /// <inheritdoc />
public IEnumerable<SharedTrade> GetData(DateTime? since = null, DateTime? until = null) public SharedTrade[] GetData(DateTime? since = null, DateTime? until = null)
{ {
lock (_lock) lock (_lock)
{ {
@ -309,7 +309,7 @@ namespace CryptoExchange.Net.Trackers.Trades
if (until != null) if (until != null)
result = result.Where(d => d.Timestamp <= until); result = result.Where(d => d.Timestamp <= until);
return result.ToList(); return result.ToArray();
} }
} }