From 8ae91198585305c44b9ae61303ef0c9dbcb54ae6 Mon Sep 17 00:00:00 2001 From: ig Date: Thu, 2 Mar 2023 17:15:10 +0100 Subject: [PATCH] Round Units to 3 significant digits by default (ToString). Add JsonConverters to generator --- csharp/App/SaliMax/src/Utils.cs | 2 +- csharp/Lib/Units/Angle.generated.cs | 21 +++++++++++++- csharp/Lib/Units/ApparentPower.generated.cs | 21 +++++++++++++- csharp/Lib/Units/Current.generated.cs | 21 +++++++++++++- csharp/Lib/Units/Frequency.generated.cs | 21 +++++++++++++- csharp/Lib/Units/Generator/Template.txt | 23 ++++++++++++++-- csharp/Lib/Units/Generator/generate.sh | 2 +- csharp/Lib/Units/Json/CurrentConverter.cs | 17 ------------ csharp/Lib/Units/Json/PowerConverter.cs | 17 ------------ csharp/Lib/Units/Json/ResistanceConverter.cs | 17 ------------ csharp/Lib/Units/Json/VoltageConverter.cs | 17 ------------ csharp/Lib/Units/Number.generated.cs | 21 +++++++++++++- csharp/Lib/Units/Power.cs | 1 - csharp/Lib/Units/Power.generated.cs | 21 +++++++++++++- csharp/Lib/Units/ReactivePower.generated.cs | 21 +++++++++++++- csharp/Lib/Units/Resistance.generated.cs | 21 +++++++++++++- csharp/Lib/Units/State.cs | 4 +-- csharp/Lib/Units/Temperature.generated.cs | 21 +++++++++++++- csharp/Lib/Units/Units.cs | 29 +++++++++++++------- csharp/Lib/Units/Voltage.generated.cs | 21 +++++++++++++- csharp/Lib/Utils/DecimalUtils.cs | 16 +++++++---- csharp/Lib/Utils/EnumerableUtils.cs | 4 +-- 22 files changed, 256 insertions(+), 103 deletions(-) delete mode 100644 csharp/Lib/Units/Json/CurrentConverter.cs delete mode 100644 csharp/Lib/Units/Json/PowerConverter.cs delete mode 100644 csharp/Lib/Units/Json/ResistanceConverter.cs delete mode 100644 csharp/Lib/Units/Json/VoltageConverter.cs diff --git a/csharp/App/SaliMax/src/Utils.cs b/csharp/App/SaliMax/src/Utils.cs index 4104b5384..1cf608f84 100644 --- a/csharp/App/SaliMax/src/Utils.cs +++ b/csharp/App/SaliMax/src/Utils.cs @@ -6,6 +6,6 @@ public static class Utils { public static Decimal Round3(this Decimal d) { - return DecimalUtils.RoundToSignificantFigures(d, 3); + return DecimalUtils.RoundToSignificantDigits(d, 3); } } \ No newline at end of file diff --git a/csharp/Lib/Units/Angle.generated.cs b/csharp/Lib/Units/Angle.generated.cs index f2317f977..0c1abd7e5 100644 --- a/csharp/Lib/Units/Angle.generated.cs +++ b/csharp/Lib/Units/Angle.generated.cs @@ -2,6 +2,9 @@ #define Sum using static System.Math; +using System.Text.Json; +using System.Text.Json.Serialization; +using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Units; @@ -10,7 +13,7 @@ using T = Angle; public readonly partial struct Angle { public Decimal Value { get; } - public override String ToString() => Value + Unit; + public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit; // scalar multiplication @@ -75,3 +78,19 @@ public readonly partial struct Angle public override Int32 GetHashCode() => Value.GetHashCode(); } + + +internal class AngleConverter : JsonConverter +{ + public override Angle Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return new Angle(reader.GetDecimal()); + } + + public override void Write(Utf8JsonWriter writer, Angle value, JsonSerializerOptions options) + { + var rounded = value.Value.RoundToSignificantDigits(Units.JsonSignificantDigits); + + writer.WriteNumberValue(rounded); + } +} \ No newline at end of file diff --git a/csharp/Lib/Units/ApparentPower.generated.cs b/csharp/Lib/Units/ApparentPower.generated.cs index 0775151c9..ae632e889 100644 --- a/csharp/Lib/Units/ApparentPower.generated.cs +++ b/csharp/Lib/Units/ApparentPower.generated.cs @@ -2,6 +2,9 @@ #define Sum using static System.Math; +using System.Text.Json; +using System.Text.Json.Serialization; +using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Units; @@ -10,7 +13,7 @@ using T = ApparentPower; public readonly partial struct ApparentPower { public Decimal Value { get; } - public override String ToString() => Value + Unit; + public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit; // scalar multiplication @@ -75,3 +78,19 @@ public readonly partial struct ApparentPower public override Int32 GetHashCode() => Value.GetHashCode(); } + + +internal class ApparentPowerConverter : JsonConverter +{ + public override ApparentPower Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return new ApparentPower(reader.GetDecimal()); + } + + public override void Write(Utf8JsonWriter writer, ApparentPower value, JsonSerializerOptions options) + { + var rounded = value.Value.RoundToSignificantDigits(Units.JsonSignificantDigits); + + writer.WriteNumberValue(rounded); + } +} \ No newline at end of file diff --git a/csharp/Lib/Units/Current.generated.cs b/csharp/Lib/Units/Current.generated.cs index 93e9bdbf7..1bb733666 100644 --- a/csharp/Lib/Units/Current.generated.cs +++ b/csharp/Lib/Units/Current.generated.cs @@ -2,6 +2,9 @@ #define Sum using static System.Math; +using System.Text.Json; +using System.Text.Json.Serialization; +using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Units; @@ -10,7 +13,7 @@ using T = Current; public readonly partial struct Current { public Decimal Value { get; } - public override String ToString() => Value + Unit; + public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit; // scalar multiplication @@ -75,3 +78,19 @@ public readonly partial struct Current public override Int32 GetHashCode() => Value.GetHashCode(); } + + +internal class CurrentConverter : JsonConverter +{ + public override Current Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return new Current(reader.GetDecimal()); + } + + public override void Write(Utf8JsonWriter writer, Current value, JsonSerializerOptions options) + { + var rounded = value.Value.RoundToSignificantDigits(Units.JsonSignificantDigits); + + writer.WriteNumberValue(rounded); + } +} \ No newline at end of file diff --git a/csharp/Lib/Units/Frequency.generated.cs b/csharp/Lib/Units/Frequency.generated.cs index 9618c18bc..b1e8c6e65 100644 --- a/csharp/Lib/Units/Frequency.generated.cs +++ b/csharp/Lib/Units/Frequency.generated.cs @@ -2,6 +2,9 @@ #define Equal using static System.Math; +using System.Text.Json; +using System.Text.Json.Serialization; +using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Units; @@ -10,7 +13,7 @@ using T = Frequency; public readonly partial struct Frequency { public Decimal Value { get; } - public override String ToString() => Value + Unit; + public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit; // scalar multiplication @@ -75,3 +78,19 @@ public readonly partial struct Frequency public override Int32 GetHashCode() => Value.GetHashCode(); } + + +internal class FrequencyConverter : JsonConverter +{ + public override Frequency Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + return new Frequency(reader.GetDecimal()); + } + + public override void Write(Utf8JsonWriter writer, Frequency value, JsonSerializerOptions options) + { + var rounded = value.Value.RoundToSignificantDigits(Units.JsonSignificantDigits); + + writer.WriteNumberValue(rounded); + } +} \ No newline at end of file diff --git a/csharp/Lib/Units/Generator/Template.txt b/csharp/Lib/Units/Generator/Template.txt index c78a3fcc6..857ecad58 100644 --- a/csharp/Lib/Units/Generator/Template.txt +++ b/csharp/Lib/Units/Generator/Template.txt @@ -1,7 +1,10 @@ #nullable enable // Auto-generated code requires an explicit '#nullable' directive in source. -#define Type +#define AggregationType using static System.Math; +using System.Text.Json; +using System.Text.Json.Serialization; +using InnovEnergy.Lib.Utils; namespace InnovEnergy.Lib.Units; @@ -10,7 +13,7 @@ using T = Template; public readonly partial struct Template { public Decimal Value { get; } - public override String ToString() => Value + Unit; + public override String ToString() => Value.RoundToSignificantDigits(Units.DisplaySignificantDigits) + Unit; // scalar multiplication @@ -75,3 +78,19 @@ public readonly partial struct Template public override Int32 GetHashCode() => Value.GetHashCode(); } + + +internal class TemplateConverter : JsonConverter