using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Runtime.InteropServices;
using System.Security;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using CryptoExchange.Net.Logging;
using CryptoExchange.Net.Objects;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace CryptoExchange.Net
{
///
/// Helper methods
///
public static class ExtensionMethods
{
///
/// Add a parameter
///
///
///
///
public static void AddParameter(this Dictionary parameters, string key, string value)
{
parameters.Add(key, value);
}
///
/// Add a parameter
///
///
///
///
public static void AddParameter(this Dictionary parameters, string key, object value)
{
parameters.Add(key, value);
}
///
/// Add an optional parameter. Not added if value is null
///
///
///
///
public static void AddOptionalParameter(this Dictionary parameters, string key, object? value)
{
if(value != null)
parameters.Add(key, value);
}
///
/// Add an optional parameter. Not added if value is null
///
///
///
///
public static void AddOptionalParameter(this Dictionary parameters, string key, string? value)
{
if (value != null)
parameters.Add(key, value);
}
///
/// Create a query string of the specified parameters
///
/// The parameters to use
/// Whether or not the values should be url encoded
/// How to serialize array parameters
///
public static string CreateParamString(this Dictionary parameters, bool urlEncodeValues, ArrayParametersSerialization serializationType)
{
var uriString = "";
var arraysParameters = parameters.Where(p => p.Value.GetType().IsArray).ToList();
foreach (var arrayEntry in arraysParameters)
{
if(serializationType == ArrayParametersSerialization.Array)
uriString += $"{string.Join("&", ((object[])(urlEncodeValues ? Uri.EscapeDataString(arrayEntry.Value.ToString()) : arrayEntry.Value)).Select(v => $"{arrayEntry.Key}[]={v}"))}&";
else
{
var array = (Array)arrayEntry.Value;
uriString += string.Join("&", array.OfType