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

Updated IEnumerable responses to arrays Part 2

This commit is contained in:
Jkorf 2025-03-05 13:25:15 +01:00
parent 89c87b19e1
commit 7219441ec4
9 changed files with 28 additions and 27 deletions

View File

@ -112,7 +112,7 @@ namespace CryptoExchange.Net.UnitTests
{
var result = new WebCallResult<TestObjectResult>(
System.Net.HttpStatusCode.OK,
new List<KeyValuePair<string, IEnumerable<string>>>(),
new KeyValuePair<string, string[]>[0],
TimeSpan.FromSeconds(1),
null,
"{}",
@ -120,7 +120,7 @@ namespace CryptoExchange.Net.UnitTests
"https://test.com/api",
null,
HttpMethod.Get,
new List<KeyValuePair<string, IEnumerable<string>>>(),
new KeyValuePair<string, string[]>[0],
ResultDataSource.Server,
new TestObjectResult(),
null);
@ -142,7 +142,7 @@ namespace CryptoExchange.Net.UnitTests
{
var result = new WebCallResult<TestObjectResult>(
System.Net.HttpStatusCode.OK,
new List<KeyValuePair<string, IEnumerable<string>>>(),
new KeyValuePair<string, string[]>[0],
TimeSpan.FromSeconds(1),
null,
"{}",
@ -150,7 +150,7 @@ namespace CryptoExchange.Net.UnitTests
"https://test.com/api",
null,
HttpMethod.Get,
new List<KeyValuePair<string, IEnumerable<string>>>(),
new KeyValuePair<string, string[]>[0],
ResultDataSource.Server,
new TestObjectResult(),
null);

View File

@ -17,6 +17,7 @@ using Microsoft.Extensions.Logging;
using CryptoExchange.Net.Clients;
using CryptoExchange.Net.SharedApis;
using Microsoft.Extensions.Options;
using System.Linq;
namespace CryptoExchange.Net.UnitTests.TestImplementations
{
@ -49,13 +50,13 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
response.Setup(c => c.IsSuccessStatusCode).Returns(true);
response.Setup(c => c.GetResponseStreamAsync()).Returns(Task.FromResult((Stream)responseStream));
var headers = new Dictionary<string, IEnumerable<string>>();
var headers = new Dictionary<string, string[]>();
var request = new Mock<IRequest>();
request.Setup(c => c.Uri).Returns(new Uri("http://www.test.com"));
request.Setup(c => c.GetResponseAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(response.Object));
request.Setup(c => c.SetContent(It.IsAny<string>(), It.IsAny<string>())).Callback(new Action<string, string>((content, type) => { request.Setup(r => r.Content).Returns(content); }));
request.Setup(c => c.AddHeader(It.IsAny<string>(), It.IsAny<string>())).Callback<string, string>((key, val) => headers.Add(key, new List<string> { val }));
request.Setup(c => c.GetHeaders()).Returns(() => headers);
request.Setup(c => c.AddHeader(It.IsAny<string>(), It.IsAny<string>())).Callback<string, string>((key, val) => headers.Add(key, new string[] { val }));
request.Setup(c => c.GetHeaders()).Returns(() => headers.ToArray());
var factory = Mock.Get(Api1.RequestFactory);
factory.Setup(c => c.Create(It.IsAny<HttpMethod>(), It.IsAny<Uri>(), It.IsAny<int>()))
@ -84,7 +85,7 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
var request = new Mock<IRequest>();
request.Setup(c => c.Uri).Returns(new Uri("http://www.test.com"));
request.Setup(c => c.GetHeaders()).Returns(new Dictionary<string, IEnumerable<string>>());
request.Setup(c => c.GetHeaders()).Returns(new KeyValuePair<string, string[]>[0]);
request.Setup(c => c.GetResponseAsync(It.IsAny<CancellationToken>())).Throws(we);
var factory = Mock.Get(Api1.RequestFactory);
@ -108,12 +109,12 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
response.Setup(c => c.IsSuccessStatusCode).Returns(false);
response.Setup(c => c.GetResponseStreamAsync()).Returns(Task.FromResult((Stream)responseStream));
var headers = new Dictionary<string, IEnumerable<string>>();
var headers = new List<KeyValuePair<string, string[]>>();
var request = new Mock<IRequest>();
request.Setup(c => c.Uri).Returns(new Uri("http://www.test.com"));
request.Setup(c => c.GetResponseAsync(It.IsAny<CancellationToken>())).Returns(Task.FromResult(response.Object));
request.Setup(c => c.AddHeader(It.IsAny<string>(), It.IsAny<string>())).Callback<string, string>((key, val) => headers.Add(key, new List<string> { val }));
request.Setup(c => c.GetHeaders()).Returns(headers);
request.Setup(c => c.AddHeader(It.IsAny<string>(), It.IsAny<string>())).Callback<string, string>((key, val) => headers.Add(new KeyValuePair<string, string[]>(key, new string[] { val })));
request.Setup(c => c.GetHeaders()).Returns(headers.ToArray());
var factory = Mock.Get(Api1.RequestFactory);
factory.Setup(c => c.Create(It.IsAny<HttpMethod>(), It.IsAny<Uri>(), It.IsAny<int>()))
@ -186,7 +187,7 @@ namespace CryptoExchange.Net.UnitTests.TestImplementations
return await SendRequestAsync<T>(new Uri("http://www.test.com"), HttpMethod.Get, ct, requestWeight: 0);
}
protected override Error ParseErrorResponse(int httpStatusCode, IEnumerable<KeyValuePair<string, IEnumerable<string>>> responseHeaders, IMessageAccessor accessor)
protected override Error ParseErrorResponse(int httpStatusCode, KeyValuePair<string, string[]>[] responseHeaders, IMessageAccessor accessor)
{
var errorData = accessor.Deserialize<TestError>();

View File

@ -638,7 +638,7 @@ namespace CryptoExchange.Net.Clients
paramString = $" with request body '{request.Content}'";
var headers = request.GetHeaders();
if (headers.Count != 0)
if (headers.Length != 0)
paramString += " with headers " + string.Join(", ", headers.Select(h => h.Key + $"=[{string.Join(",", h.Value)}]"));
TotalRequestsMade++;
@ -768,7 +768,7 @@ namespace CryptoExchange.Net.Clients
/// <param name="accessor">Data accessor</param>
/// <param name="responseHeaders">The response headers</param>
/// <returns>Null if not an error, Error otherwise</returns>
protected virtual Error? TryParseError(IEnumerable<KeyValuePair<string, IEnumerable<string>>> responseHeaders, IMessageAccessor accessor) => null;
protected virtual Error? TryParseError(KeyValuePair<string, string[]>[] responseHeaders, IMessageAccessor accessor) => null;
/// <summary>
/// Can be used to indicate that a request should be retried. Defaults to false. Make sure to retry a max number of times (based on the the tries parameter) or the request will retry forever.
@ -943,7 +943,7 @@ namespace CryptoExchange.Net.Clients
/// <param name="responseHeaders">The response headers</param>
/// <param name="accessor">Data accessor</param>
/// <returns></returns>
protected virtual Error ParseErrorResponse(int httpStatusCode, IEnumerable<KeyValuePair<string, IEnumerable<string>>> responseHeaders, IMessageAccessor accessor)
protected virtual Error ParseErrorResponse(int httpStatusCode, KeyValuePair<string, string[]>[] responseHeaders, IMessageAccessor accessor)
{
var message = accessor.OriginalDataAvailable ? accessor.GetOriginalString() : "[Error response content only available when OutputOriginal = true in client options]";
return new ServerError(message);
@ -956,7 +956,7 @@ namespace CryptoExchange.Net.Clients
/// <param name="responseHeaders">The response headers</param>
/// <param name="accessor">Data accessor</param>
/// <returns></returns>
protected virtual ServerRateLimitError ParseRateLimitResponse(int httpStatusCode, IEnumerable<KeyValuePair<string, IEnumerable<string>>> responseHeaders, IMessageAccessor accessor)
protected virtual ServerRateLimitError ParseRateLimitResponse(int httpStatusCode, KeyValuePair<string, string[]>[] responseHeaders, IMessageAccessor accessor)
{
var message = accessor.OriginalDataAvailable ? accessor.GetOriginalString() : "[Error response content only available when OutputOriginal = true in client options]";

View File

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

View File

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

View File

@ -21,11 +21,11 @@ namespace CryptoExchange.Net.SharedApis
/// <summary>
/// Supported order types
/// </summary>
IEnumerable<SharedOrderType> FuturesSupportedOrderTypes { get; }
SharedOrderType[] FuturesSupportedOrderTypes { get; }
/// <summary>
/// Supported time in force
/// </summary>
IEnumerable<SharedTimeInForce> FuturesSupportedTimeInForce { get; }
SharedTimeInForce[] FuturesSupportedTimeInForce { get; }
/// <summary>
/// Quantity types support
/// </summary>

View File

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

View File

@ -13,7 +13,7 @@ namespace CryptoExchange.Net.SharedApis
/// <summary>
/// Kline intervals supported for updates
/// </summary>
public IEnumerable<SharedKlineInterval> SupportIntervals { get; }
public SharedKlineInterval[] SupportIntervals { get; }
/// <summary>
/// ctor

View File

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