mirror of
https://github.com/JKorf/CryptoExchange.Net
synced 2025-06-07 16:06:15 +00:00
Added replace converter, added library helpers class
This commit is contained in:
parent
62c9769c72
commit
f4797caf37
@ -1,6 +1,7 @@
|
|||||||
using CryptoExchange.Net.Objects;
|
using CryptoExchange.Net.Objects;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using NUnit.Framework.Legacy;
|
using NUnit.Framework.Legacy;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
|
||||||
namespace CryptoExchange.Net.UnitTests
|
namespace CryptoExchange.Net.UnitTests
|
||||||
@ -70,5 +71,20 @@ namespace CryptoExchange.Net.UnitTests
|
|||||||
var result = ExchangeHelpers.Normalize(input);
|
var result = ExchangeHelpers.Normalize(input);
|
||||||
Assert.That(expected == result.ToString(CultureInfo.InvariantCulture));
|
Assert.That(expected == result.ToString(CultureInfo.InvariantCulture));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
[TestCase("123", "BKR", 32, true, "BKR|JK|123")]
|
||||||
|
[TestCase("123", "BKR", 32, false, "123")]
|
||||||
|
[TestCase("123123123123123123123123123123", "BKR", 32, true, "123123123123123123123123123123")] // 30
|
||||||
|
[TestCase("123123123123123123123123123", "BKR", 32, true, "123123123123123123123123123")] // 27
|
||||||
|
[TestCase("1231231231231231231231231", "BKR", 32, true, "BKR|JK|1231231231231231231231231")] // 25
|
||||||
|
[TestCase(null, "BKR", 32, true, null)]
|
||||||
|
public void ApplyBrokerIdTests(string clientOrderId, string brokerId, int maxLength, bool allowValueAdjustement, string expected)
|
||||||
|
{
|
||||||
|
var result = LibraryHelpers.ApplyBrokerId(clientOrderId, brokerId, maxLength, allowValueAdjustement);
|
||||||
|
|
||||||
|
if (expected != null)
|
||||||
|
Assert.That(result, Is.EqualTo(expected));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
using System;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace CryptoExchange.Net.Converters.SystemTextJson
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Attribute for allowing specifying a JsonConverter with constructor parameters
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
[AttributeUsage(AttributeTargets.Property)]
|
||||||
|
public class JsonConverterCtorAttribute<T> : JsonConverterAttribute where T : JsonConverter
|
||||||
|
{
|
||||||
|
private readonly object[] _parameters;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ctor
|
||||||
|
/// </summary>
|
||||||
|
public JsonConverterCtorAttribute(params object[] parameters) => _parameters = parameters;
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override JsonConverter CreateConverter(Type typeToConvert)
|
||||||
|
{
|
||||||
|
return (T)Activator.CreateInstance(typeof(T), _parameters);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace CryptoExchange.Net.Converters.SystemTextJson
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Replace a value on a string property
|
||||||
|
/// </summary>
|
||||||
|
public class ReplaceConverter : JsonConverter<string>
|
||||||
|
{
|
||||||
|
private readonly (string ValueToReplace, string ValueToReplaceWith)[] _replacementSets;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ctor
|
||||||
|
/// </summary>
|
||||||
|
public ReplaceConverter(params string[] replaceSets)
|
||||||
|
{
|
||||||
|
_replacementSets = replaceSets.Select(x =>
|
||||||
|
{
|
||||||
|
var split = x.Split(new string[] { "->" }, StringSplitOptions.None);
|
||||||
|
if (split.Length != 2)
|
||||||
|
throw new ArgumentException("Invalid replacement config");
|
||||||
|
return (split[0], split[1]);
|
||||||
|
}).ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override string? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||||
|
{
|
||||||
|
var value = reader.GetString();
|
||||||
|
foreach (var set in _replacementSets)
|
||||||
|
value = value?.Replace(set.ValueToReplace, set.ValueToReplaceWith);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) => writer.WriteStringValue(value);
|
||||||
|
}
|
||||||
|
}
|
@ -20,7 +20,7 @@
|
|||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<PackageReleaseNotes>https://github.com/JKorf/CryptoExchange.Net?tab=readme-ov-file#release-notes</PackageReleaseNotes>
|
<PackageReleaseNotes>https://github.com/JKorf/CryptoExchange.Net?tab=readme-ov-file#release-notes</PackageReleaseNotes>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>10.0</LangVersion>
|
<LangVersion>12.0</LangVersion>
|
||||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
47
CryptoExchange.Net/LibraryHelpers.cs
Normal file
47
CryptoExchange.Net/LibraryHelpers.cs
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace CryptoExchange.Net
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Helpers for client libraries
|
||||||
|
/// </summary>
|
||||||
|
public static class LibraryHelpers
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Client order id seperator
|
||||||
|
/// </summary>
|
||||||
|
public const string ClientOrderIdSeperator = "|JK|";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Apply broker id to a client order id
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="clientOrderId"></param>
|
||||||
|
/// <param name="brokerId"></param>
|
||||||
|
/// <param name="maxLength"></param>
|
||||||
|
/// <param name="allowValueAdjustement"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string ApplyBrokerId(string? clientOrderId, string brokerId, int maxLength, bool allowValueAdjustement)
|
||||||
|
{
|
||||||
|
var reservedLength = brokerId.Length + ClientOrderIdSeperator.Length;
|
||||||
|
|
||||||
|
if ((clientOrderId?.Length + reservedLength) > maxLength)
|
||||||
|
return clientOrderId!;
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(clientOrderId))
|
||||||
|
{
|
||||||
|
if (allowValueAdjustement)
|
||||||
|
clientOrderId = brokerId + ClientOrderIdSeperator + clientOrderId;
|
||||||
|
|
||||||
|
return clientOrderId!;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
clientOrderId = ExchangeHelpers.AppendRandomString(brokerId + ClientOrderIdSeperator, maxLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
return clientOrderId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user